- 由 管建智创建, 最终由 张少南修改于 六月 16, 2023
一、mycat是什么
Mycat简单点说就是数据库中间件,用来连接java程序与数据库中的中间件。
为什么要使用MyCat。具体原因是java代码与数据库的高耦合,在高访问量和高并发时对数据库的压力会使得数据库 读写请求数据不一致,我们现在普遍使用的是java直接对数据库进行操作,
在配置文件中定义了mysql的数据源,直接连接到了我们的mysql软件,但是当某些情况下我们可能需要用到了多个数据库, 这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,
如果我们在Java与mysql中间使用了MyCat,我们只需要访问mycat就可以了,至于数据源等问题,mycat会直接帮我们搞定。
二、基于kubernetes如何搭建mycat+多主mysql
1、创建deployments:
mycat镜像:192.168.3.204:5000/mycat_mysql:1.0.0
mysql镜像:192.168.3.204:5000/mysql_ms:5.7.40
mycat环境变量:
mysql环境变量:
mysql1:
mysql2:
2、配置configMap:
mycat的configMap:
schema.xml
|
server.xml:
|
mysql的configMap:
mysql1:
|
mysql2:
|
三、验证双M数据同步
1、创建demo数据
|
master
slave
2、关闭节点mysql slave ,通过mysql master插入一条数据,然后启动mysql slave 观察两边数据是否一致
master
slave
五、数据恢复
30339数据正确,30338数据错误异常
- 在主机上备份:
mysqldump -h 192.168.3.201 -P30339 -uroot -p123456 --single-transaction --master-data=1 -R --events --triggers=true --databases pdl > ./`date +%F-%H`_mysql-pdl.sql
查看binlog位置
grep -i "CHANGE MASTER" 2023-06-16-16_mysql-pdl.sql
- 停止slave
30339(mysql中)上的slave :stop slave;
启动303389(mysql中) 并停止slave:stop slave;
- 在主机通过dump恢复
mysql -h 192.168.3.201 -P30338 -uroot -p < 2023-06-16-11_mysql-pdl.sql
- 30338执行
先在30338(mysql中) 执行show master status\G 记录需要在30339中执行的 MASTER_LOG_FILE='mysql-bin.000419', MASTER_LOG_POS=286531727;
然后在30338上执行 grep命令查出来的 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=54617;
30338上启动:start slave
- 30339执行
在30339(mysql中)上执行 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=20397;
然后启动:start slave
(1、mysql容器中执行,生成dump文件)
mysqldump -uzeusroot -pzhanwanzhanchi --single-transaction --master-data=1 -R --events --triggers=true --set-gtid-purged=off --databases iwork iwork_test iwork_test_sql iwork_wh iworkapp iwork-jx middle_office tm > ./`date +%F%H`_mysql.sql
(2、复制容器中的dump文件到主机上:default是namespace)
kubectl cp default/mysql-7669c875d7-g827d:/2023-10-2613_mysql.sql /tmp/2023-10-2613_mysql.sql
(3、复制主机上的dump文件到mysql2容器内)
kubectl cp /tmp/2023-10-2613_mysql.sql default/mysql2-6889bdb9f8-fh9tf:/2023-10-2613_mysql.sql
(4、mysql2容器中执行恢复dump文件)
mysql -h 192.168.3.201 -P30338 -uroot -p < 2023-06-16-11_mysql-pdl.sql
(5、mysql2容器中执行个grep命令,查询mysql的MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=103457)
grep -i "CHANGE MASTER" 2023-10-2613_mysql.sql
(6、mysql2数据库中执行)
change master to master_host='mysql.default', master_user='zeusroot',master_password='zhanwanzhanchi',master_log_file='mysql-bin.000002',master_log_pos=103457;
show master status\G(查询mysql2的File: mysql-bin.000004 Position: 68923805 给mysql用)
start slave;
show slave status\G;
(7、mysql数据库中执行)
change master to master_host='mysql2.default', master_user='zeusroot',master_password='zhanwanzhanchi',master_log_file='mysql-bin.000004',master_log_pos=68923805 ;
start slave;
show slave status\G;
六、新增数据库配置
schema.xml中新增对应的数据库配置
<schema name="pdl" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="test1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="pdl" />
<dataNode name="test1" dataHost="localhost1" database="test" />
server.xml中新增对应的数据库配置
<user name="root">
<property name="password">123456</property>
<property name="schemas">pdl,test</property>
</user>