采用专职专责的设计减少数据库压力,提高性能,将写请求交给Master处理,读请求交给Slave处理,从而提高系统性能,减缓数据库压力
MySQL5.7主从同步环境搭建
https://blog.csdn.net/l_learning/article/details/103629651
MyCat官网
http://www.mycat.io/
环境Mycat-server-1.5.1 + MySQL5.7
MyCat 127.0.0.1
MySQL master 192.168.241.200
MySQL slave1 192.168.241.201
MySQL slave2 192.168.241.202
在数据库中为Mycat新建一个账号并赋权
CREATE USER 'MyCat'@'host' IDENTIFIED BY '666666';
GRANT ALL privileges ON `goods`.* TO 'MyCat'@'host';
--赋予所有权限
GRANT ALL PRIVILEGES ON `goods`.* TO 'MyCat'@'host';
--刷新权限
FLUSH PRIVILEGES;
server.xml配置
在conf目录下的server.xml
配置一个MyCat用户供应用连接到mycat,同时mycat 在schema.xml中配置后了一个逻辑库MyCat,配置好逻辑库与用户的映射关系
<user name="MyCat">
<property name="password">666666</property>
<property name="schemas">MyCat</property>
</user>
schema.xml配置
schema标签中的name属性(MyCat)必须与server.xml中的user标签的逻辑库一致(MyCat)
<schema name="MyCat" checkSQLschema="false" sqlMaxLimit="100" dataNode="mycatdb">
</schema>
<dataNode name="mycatdb" dataHost="mycluster" database="goods" />
<!-- 开启读写分离必须将balance修改为1-->
<dataHost name="mycluster" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!-- 读写分离 -->
<writeHost host="Master" url="192.168.241.200:3306" user="root" password="666666">
<readHost host="Slave1" url="192.168.241.201:3306" user="root" password="666666" />
<readHost host="Slave2" url="192.168.241.202:3306" user="root" password="666666" />
</writeHost>
</dataHost>
启动MyCat
修改conf目录下的log4j.xml的日志等级为DEBUG
<root>
<level value="DEBUG" />
<appender-ref ref="FILE" />
</root>
这里使用的是window版,双击startup_nowrap.bat即可
Linux启动
./mycat start
插入一条数据,通过mycat.log查看mycat连接的真实数据库
INSERT INTO good VALUES (3,'方便面',8)
200的是主节点,执行写操作
查询数据库记录,通过mycat.log查看mycat连接的真实数据库
DELETE FROM good WHERE good_id = 3
202的是从节点,执行读操作
故障转移
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<schema name="MyCat" checkSQLschema="false" sqlMaxLimit="100" dataNode="mycatdb">
</schema>
<dataNode name="mycatdb" dataHost="mycluster" database="goods" />
<!-- 开启读写分离必须将balance修改为1-->
<dataHost name="mycluster" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!-- 读写分离 -->
<writeHost host="Master" url="192.168.241.200:3306" user="root" password="666666">
<readHost host="Slave1" url="192.168.241.201:3306" user="root" password="666666" />
<readHost host="Slave2" url="192.168.241.202:3306" user="root" password="666666" />
</writeHost>
<!-- 主从切换 -->
<writeHost host="Slave1" url="192.168.241.201:3306" user="root" password="666666"></writeHost>
<writeHost host="Slave2" url="192.168.241.202:3306" user="root" password="666666"></writeHost>
</dataHost>
</mycat:schema>
把主节点关闭,执行写操作会将一个从节点提升为主节点,执行写操作从而实现故障转移