Mycat配置读写分离
大家好,我是anyux。本文介绍Mycat配置读写分离。
MySQL分布式架构介绍
1. schema拆分及业务分库
2. 垂直拆分-分库分表
3. 水平拆分-分片
企业代表产品
360 Atlas-Sharding
Alibaba cobar
Mycat
TDDL
Heisenberg
Oceanus
Vitess
OneProxy
DRDS
用户创建及数据库导入
db117
mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'%' identified by 'root';source /root/world.sql;"
mysql -S /data/3308/mysql.sock -e "grant all on *.* to root@'%' identified by 'root';source /root/world.sql;"
配置文件介绍
目录文件 | 作用 | 备注 |
---|---|---|
conf/schema.xml | 主配置文件(读写分离、高可用、分布式策略定制、节点控制) | |
conf/server.xml | mycat软件本身相关的配置 | |
conf/rule.xml | 分片规则配置文件,记录分片规则列表、使用方法等 | |
logs/wrapper.log | mycat启动日志 | |
logs/mycat.log | mycat详细工作日志 |
db119上管理
备份schema.xml
cd /app/mycat/conf
mv schema.xml schema.xml.bak
配置schema.xml
实现一主一从读写分离
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--以上为xml头文件格式-->
<!--
schema mycat的逻辑库定义
TESTDB 默认逻辑库名称,是对后端数据库的集成
checkSQLschema
sqlMaxLimit
dataNode="sh1" 标识数据节点,定位数据节点
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">
</schema>
<!--
dataNode 数据节点定义
name="sh1" 对应schema中的dataNode值
dataHost="db117" 对应dataHost中的name值
database="world" 对应实际存储的数据库名称
-->
<dataNode name="sh1" dataHost="data" database= "world" />
<!--
dataHost 后端主机定义
name="db117" 对应dataNode中的dataHost值
maxCon="1000"
minCon="10"
balance="1"
writeType="0"
dbType="mysql"
dbDriver="native"
switchType="1"
-->
<dataHost name="data" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
<!--
writeHost 写节点
readHost 读节点
host="db1" 主机对应名称
url="192.168.255.117:3307" 连接参数
user="root" 用户名
password="root" 密码
-->
<writeHost host="db1" url="192.168.255.117:3307" user="root" password="root">
<readHost host="db2" url="192.168.255.117:3309" user="root" password="root" />
</writeHost>
<writeHost host="db3" url="192.168.255.118:3307" user="root" password="root">
<readHost host="db4" url="192.168.255.118:3309" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
重启mycat
mycat restart
连接测试
mysql -uroot -p123456 -h 127.0.0.1 -P8066 -e "select @@server_id\Gselect @@server_id\Gselect @@server_id\G;begin;select @@server_id\G;commit;begin;select @@server_id\G;commit;"
下图中,写操作只对server_id为7的数据库,读操作随机在3个数据库选择