mysql中间件MyCat安装及使用

MyCat负责分库分表;MyCat负责mysql数据库的主从分离和负载均衡

1.下载安装

1
2
3
4
http://www.mycat.org.cn/ 选择1.6linux版本
#tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#mv mycat /usr/local/mycat  //将解压得到的文件夹移动到某个位置,这个位置需要自己创建
#cd /usr/local/mycat

2.配置环境变量

1
2
#export MYCAT_HOME=/usr/local/mycat
#PATH=$PATH:$MYCAT_HOME/bin

3.创建一个新的group

1
2
3
4
5
#groupadd mycat
创建一个新的用户,并加入group
#useradd -g mycat mycat
给新用户设置密码,
#passwd mycat

4.修改mycat配置

1).编辑schema文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#cp $MYCAT_HOME/conf/schema.xml MYCAT_HOME/conf/schema.xml.tmp
#vim $MYCAT_HOME/conf/schema.xml
删除第三行开始的所有内容,只保留第一行和第一行,然后粘贴下列内容
############################# 主从分离,负载均衡 #####################################
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="MYCAT" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
    <dataNode name="dn1" dataHost="localhost1" database="test_sys" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <writeHost host="hostM1" url="192.168.20.44:3306" user="root" password="root">
            <readHost host="hostS1" url="127.0.0.1:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
</mycat:schema>
############################## 主从分离,负载均衡 ####################################
配置说明
A.设置 balance=“1"与writeType=“0”
1
2
3
4
5
6
7
8
Balance参数设置:
balance=“0”, 所有读操作都发送到当前可用的writeHost上。
balance=“1”,所有读操作都随机的发送到readHost
balance=“2”,所有读操作都随机的在writeHost、readhost上分发
WriteType参数设置:
writeType=“0”, 所有写操作都发送到可用的writeHost上。
writeType=“1”,所有写操作都随机的发送到readHost。
writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
B.设置 switchType=“2” 与slaveThreshold=“100”

switchType 目前有三种选择:

  • -1:表示不自动切换
  • 1 :默认值,自动切换
  • 2 :基于MySQL主从同步的状态决定是否切换 “Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType=“2” 与slaveThreshold=“100”,此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running"三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
############################# 分库分表 #####################################
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="MYCAT" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
        <table name="sp_user" primaryKey="id" type="global" dataNode="dn1,dn2"/>
        <table name="sp_user_olny" primaryKey="id" type="global" dataNode="dn1" />
        <table name="sp_user_all" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" />
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="test_sys1" />
    <dataNode name="dn2" dataHost="localhost1" database="test_sys2" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <writeHost host="hostM1" url="192.168.20.44:3306" user="root" password="root">
            <readHost host="hostS1" url="127.0.0.1:3306" user="root" password="root" />
        </writeHost>
    </dataHost>
</mycat:schema>

############################## 分库分表 ####################################

2).配置rule.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
添加如下配置:水平切分,数据按Id取模均匀划分到两个数据库中
############################## 先检查是否有mod-long,没有则添加下列代码 ####################################
<tableRule name="mod-long"> <!-- 对应表的分片规则 -->
    <rule>
        <columns>id</columns><!-- 对应数据表要取模的字段名称 -->
        <algorithm>mod-long</algorithm><!-- 对应function的名称 -->
    </rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- name:对应tableRule的名称;class:切分规则对应的切分类 -->
    <!--  scheme.xml中有多少个dataNode就改成多少个 -->
    <property name="count">2</property>
</function>
############################## 先检查是否有mod-long,没有则添加下列代码 ####################################

3).配置server.xml

1
2
3
4
5
6
7
8
#vim $MYCAT_HOME/conf/server.xml
将目录下无效的用户全部删掉或者注释掉,添加可用的用户
##################################################################
<user name="mycat">
    <property name="password">123456</property>
    <property name="schemas">MYCAT</property>
</user>
##################################################################

3).修改conf下的partition-hash-int.txt文件,暂不处理

在下面添加10020=2,原本默认的是分两个就是10000和10010,现在我们三个就要三个分类id了,添加一个即可

4.)全局序列号配置

A.默认时间戳方式(2)

设置mysql数据表主键自增长,为bigint(20)

B.本地文件方式(0)
1
2
3
4
5
设置sequence_conf.properties
SP_USER_ALL.HISIDS=
SP_USER_ALL.MINID=1#最小
SP_USER_ALL.MAXID=1000000000#最大
SP_USER_ALL.CURID=1#当前

5.启动&停止

1
2
3
4
5
6
7
mycat支持的命令{ console | start | stop | restart | status | dump }
Mycat的默认端口号为:8066
启动:/usr/local/mycat/bin/mycat start
重启:/usr/local/mycat/bin/mycat restart
停止:/usr/local/mycat/bin/mycat stop
状态:/usr/local/mycat/bin/mycat status
日志:/usr/local/mycat/bin/mycat console