基于Docker搭建MySQL主从服务器
可参考博文:Docker构建MySQL主从同步
环境信息
- mysql主:127.0.0.1:3339
- mysql从:127.0.0.1:3340
安装MyCat
- 官网下载 Mycat1.6.7
- 将Mycat下载到指定目录 …/mycat/
读写分离配置
- 打开配置文件 …/mycat/conf/server.xml,修改掉mycat登录的默认密码
- 打开配置文件 …/mycat/conf/schema.xml,根据实际mysql主从服务器信息做配置修改
- 启动Mycat,并查看进程是否启动成功
./mycat start
ps -ef |grep mycat
- 登录Mycat管理端口
mysql -uroot -h127.0.0.1 -P9066
- 查看主从配置情况
mysql> show @datasource;
ERROR 1003 (HY000): Unsupported statement
mysql> show @@datasource;
+-----------+--------+-------+-----------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+-----------+--------+-------+-----------+------+------+--------+------+------+---------+-----------+------------+
| jxd_mycat | hostM1 | mysql | localhost | 3339 | W | 0 | 10 | 1000 | 20 | 0 | 0 |
| jxd_mycat | hostS2 | mysql | localhost | 3340 | R | 0 | 4 | 1000 | 13 | 0 | 0 |
+-----------+--------+-------+-----------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)
- 查看心跳信息
mysql> show @@heartbeat;
+--------+-------+-----------+------+---------+-------+
| NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME | STOP |
+--------+-------+-----------+------+---------+-------+
| hostM1 | mysql | localhost | 3339 | 1 | 0 | idle | 30000 | 2,2,2 | 2019-12-20 14:43:47 | false |
| hostS2 | mysql | localhost | 3340 | 1 | 0 | idle | 30000 | 2,2,2 | 2019-12-20 14:43:47 | false |
+--------+-------+-----------+------+---------+-------+
2 rows in set (0.01 sec)
- 登录Mycat数据端口
mysql -uroot -p123456 -h127.0.0.1 -P8066
- 测试读写分离
首先修改下Mycat的日志级别为debug,方便我们查看日志;
然后重启Mycat;
bin ./mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
监控 …/mycat/logs/mycat.log日志变化
logs tail -f mycat.log
执行查询语句:select * from user;
从日志中可以看出,查询语句是执行的端口为3340的从服务器;
执行新增语句:insert into user(name) value(‘Tony’);
从日志可以看出,新增语句执行的是端口为3339的主服务器;
继续执行删除和修改语句测试,发现都是操作的主服务器。
以上,利用Mycat实现了MySQL读写分离操作。