实验环境前端
如下配置都是创建在mariadb主从没有问题的状况下:java
1.三台主机:mysql
在三台机器/etc/hosts添加如下3条主机信息
mycat:192.168.254.24
hostM1:192.168.254.28
hostS1:192.168.254.29
2.须要安装java1.8版本或以上linux
3.下载mycat源码包
(1)wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
(2)tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
(3)mv mycat /usr/local/sql
mycat配置数据库
vim /usr/local/mycat/conf/server.xml设置以下参数vim
<user name="testuser1"> <property name="password">testuser1</property> <property name="schemas">testdb,testdb1</property> <!-- 表级 DML 权限设置 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user> <user name="testuser2"> <property name="password">testuser2</property> <property name="schemas">testdb,testdb1</property> <property name="readOnly">true</property> </user>
#testuser1用来写的用户
#testuser2用来读的用户
#testdb是mycat是逻辑库后端
vim /usr/local/mycat/conf/schema.xml配置(请先备份cp schema.xml schema.xml.bak,而后把schema.xml文件清空,粘贴如下内容)ide
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> <schema name="testdb1" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn2"> </schema> <dataNode name="dn1" dataHost="hostM1" database="test" /> <dataNode name="dn2" dataHost="hostM1" database="test1" /> <dataHost name="hostM1" maxCon="2000" minCon="1" balance="1" writeType="1" dbType="mysql" dbDriver="native" switchType= "1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.254.28:3306" user="testuser1" password="testuser1"> <readHost host="hostS1" url="192.168.254.29:3306" user="testuser2" password="testuser2" /> </writeHost> </dataHost> </mycat:schema>
server.xml和schema.xml标绿色处要一致,都是逻辑库,我这里建立了2个逻辑库url
dataHost为数据节点名称,database为真实数据库名称即后台数据库test和test1
balance:
0表示不开启读写分离,都在master上执行读写操做
1表示都参与select
2表示全部读请求随机在readhost和writehost分担
3表示全部读请求对应到readhost里去
writeType
0,全部写操做发送到配置的第一个writeHost
1,全部写操做都随机的发送到配置的writeHost
2,不执行写操做。
switchType
-1,不自动切换
1,默认值,自动切换
2,基于MySQL 主从同步的状态决定是否切换
3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’
writeHost和readHost分别配置对应后台的mysql主从真实用户密码
建立用户并赋予权限(主建立同步到从)
grant all on *.* to testuser1@'%' identified by 'testuser1'; grant all on *.* to testuser2@'%' identified by 'testuser2';
启动mycat服务并查看端口
/usr/local/mycat/bin/mycat start
8066是管理端口
9066是链接后端数据库的端口,默认是9066,登陆该端口后直接用show @@datasource;语句便可查询主从库的读写状态
mysql -h 192.168.254.24 -P8066 -utestuser1 -ptestuser1 (能够执行增删改查) mysql -h 192.168.254.24 -P9066 -utestuser1 -ptestuser1 (能够查看节点状态)
查看心跳状态
show @@heartbeat\G
#查看前端链接状态
show @@connection\G
#查看后端状态
show @@backend\G
#查看数据库资源状态
show @@datasource