MGR 集群只剩一台节点怎么办

本文适用于 MGR 整体崩坏,且主库独立提供一段时间服务的情况。区别于新增节点

故障原因

故障现象

MGR 集群从库全部断开

处理方式

解散 MGR 集群,使业务全部连接单点(原 master)进读写操作。当前业使用正常。

预计低峰期对 MGR 集群进行恢复。

注意:掉一台机器,和重新搭建 MGR 的情况不一样。如果是新增节点,或者尝试恢复一台机器,请参考文档《MGR 如何新增节点?》

MGR 集群恢复

将承担读写的那台实设置为 MGR 主库,使用 mysqldump 扩容两个新的从库,连接到该主库上。

前置检查

检查链接:

select * from information_schema.processlist where command <> 'Sleep';

检查流量:

检查单主模式是否开启:

检查 server_id 是否冲突:

检查实例当前的地址:

检查 MGR 集群当前的配置:

将 master-01 设置为 MGR 主库

这里有个前提,就是 master-01 当前在以单节点的形式提供服务,且不能够停机。

数据备份

备份 master-01:

参数说明:

  1. -q: --quick , Don't buffer query, dump directly to stdout.

  2. ​--single-transaction: Creates a consistent snapshot by dumping all tables in a single transaction.

  3. --master-data=2: 会注释掉 change master to, MGR 不需要指定具体位置,会自动寻找

如果你用的是 MySQL5.7.* 版本,那么恭喜了,因为 MySQL 自带 bug,所有 5.7 的小版本在全局导出时,会丢失掉 sys 库的内容。 所以你需要用一条命令单独导出,作为补充 sql:

修复 slave-03

gtid_executed , gtid_purged 变量置空

导入备份的数据(master):

生效导入

加入 MGR 集群:

执行完此操作后,在主库进行可用性测试,观从库同步是否正常。

恢复 slave-02

将 slave-02 的数据永久保留,按照 slave-03 的操作步骤进行恢复操作。

验证 slave-02 的可用性

ProxySQL 恢复

添加主从服务器列表

加载和保存

检查用户、规则等是否存在

如果不存在,添加:

可用性测试

确保建表、删表、增删改查没有问题

错误日志

查看 proxy 和 mysql 的错误日志,观察是否有报错

可用性测试

最后更新于

这有帮助吗?