乐趣区

关于mycat:mycat-中间件安装与使用

一,什么是 mycat

一个彻底开源的,面向企业应用开发的大数据库集群

反对事务、ACID、能够代替 MySQL 的加强版数据库

一个能够视为 MySQL 集群的企业级数据库,用来代替低廉的 Oracle 集群

一个交融内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server

联合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新鲜的数据库中间件产品

以上是官网阐明。其实就是数据库的连接池。mysql proxy 也是一种连接池,然而效率很低。

二,mycat 装置

1,下载地址 mycat

http://dl.mycat.io/

2,装置 mycat

# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

三,配置 mycat

1,配置 server.xml

# vim /usr/local/mycat/conf/server.xml // 增加以下内容 

<user name= “user” > //mycat 用户名
<property name= “password” >user< /property > //mycat 明码
<property name= “schemas” >mytest< /property > //mycat 虚构数据库名
<property name= “readOnly” > true < /property > // 只读
< /user >

<user name= “tankzhang” >
<property name= “password” >admin< /property >
<property name= “schemas” >mytest< /property >
< /user >
在这里要留神,默认的虚构数据名是 TESTDB,如果 schema.xml 外面没有配置 testdb,那就要把 testdb 改成 schema.xml 外面有的虚构数据名。这里定义的用户名和明码,虚构数据库名,并不是在 mysql 中实在存在的。

2,配置 schema.xml

# cat schema.xml

<?xml version= “1.0” ?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd” >
<mycat:schema xmlns:mycat= “http://io.mycat/” >

<schema name= “mytest” checkSQLschema= “false” sqlMaxLimit= “100” dataNode= “my1” /> // 定义虚构数据库名 mytest
<dataNode name= “my1” dataHost= “test1” database= “test” /> // 实在数据库名 test
<dataHost name= “test1” maxCon= “1000” minCon= “10” balance= “1” writeType= “0” dbType= “mysql” dbDriver= “native” >
<heartbeat> select user()< /heartbeat >
<writeHost host= “hostM1” url= “192.168.5.213:3306” user= “tank” password= “123456” > // 实在数据库的连贯形式
<readHost host= “hostS1” url= “192.168.5.214:3306” user= “tank” password= “123456” /> // 同上
< /writeHost >
< /dataHost >

< /mycat :schema>
mycat 的配置参数,相当的多。重点说一下 balance=”1″ 与 writeType=”0″

a. balance 属性负载平衡类型,目前的取值有 4 种:

  1. balance=”0″, 不开启读写拆散机制,所有读操作都发送到以后可用的 writeHost 上。
  2. balance=”1″,全副的 readHost 与 stand by writeHost 参加 select 语句的负载平衡,简略的说,当双主双从模式 (M1 ->S1,M2->S2,并且 M1 与 M2 互为主备),失常状况下,M2,S1,S2 都参加 select 语句的负载平衡。
  3. balance=”2″,所有读操作都随机的在 writeHost、readhost 上散发。
  4. balance=”3″,所有读申请随机的散发到 wiriterHost 对应的 readhost 执行,writerHost 不累赘读压力,留神 balance=3 只在 1.4 及其当前版本有,1.3 没有。

b. writeType 属性

负载平衡类型,目前的取值有 3 种:

  1. writeType=”0″, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个

writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

  1. writeType=”1″,所有写操作都随机的发送到配置的 writeHost。
  2. writeType=”2″,没实现。

具体参数:http://mycat.io/document/Myca…

3,配置主从服务器,就不在这儿说了,博客中有

4,增加实在用户

grant all privileges on test .* to tank@ “192.168.%” identified by ‘123456’ ;
flush privileges
在 213,214 二台机器上增加用户。

5,测试实在用户连贯,确保 schema.xml 中配置的实在用户,能连上实在的数据库。留神防火墙。

四,启动 mycat

1,罕用参数
./mycat start 启动
./mycat stop 进行
./mycat console 前台运行
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态

2,启动,并查看 mycat

# ./mycat start

Starting Mycat-server…

# netstat -tpnl |grep 8066

tcp 0 0 :::8066 :::* LISTEN 31728 /java

# ./mycat status

Mycat-server is running (31726).

五,测试读写拆散

# mysql -u tankzhang -p -P 8066 -h 127.0.0.1 // 肯定要带上 127.0.0.1

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2016, Oracle and /or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and /or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> show databases;
DATABASE
mytest // 虚构数据库

1 row in set (0.00 sec)

mysql> use mytest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

mysql> CREATE TABLE IF NOT EXISTS user (
-> id int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘ID’ ,
-> name varchar(20) NOT NULL DEFAULT ” COMMENT ‘ 姓名 ’ ,
-> create_time int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘ 创立工夫 ’ ,
-> PRIMARY KEY ( id )
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.08 sec)

Database changed

mysql> show tables;
Tables_in_test
user

1 row in set (0.01 sec)

mysql> INSERT INTO user ( id ,name)VALUES (‘1’ , ‘tank’);
Query OK, 1 row affected (0.00 sec)

mysql> select * from user; // 批改从数据库的 user 表中的 name, 会发现读是从从数据库读取的
id name create_time
1 tankzhang 0

1 row in set (0.01 sec)
六,小结

mycat 反对 mysql 的分表,分片等等,然而不倡议应用。mycat 反对的集群不多,如果能配合 mha 应用就比拟牛 B 了。

关键词:java 培训

退出移动版