如何在 MySQL-MMM 集群中重新配置复制后纠正主主机上的复制?

如何在 MySQL-MMM 集群中重新配置复制后纠正主主机上的复制?

我有一个包含三台数据库服务器(两台主服务器和一台从服务器)的 MySQL-MMM 集群。最近有人直接插入从数据库服务器,导致复制中断。发现此问题后,我重新建立了从系统db1db2db3系统的复制。复制现在正在运行,并mmm_control show显示所有服务器都处于在线状态:

[root@host ~]# mmm_control show
  db1(10.1.0.21) master/ONLINE. Roles: reader(10.1.0.31), writer(10.1.0.30)
  db2(10.1.0.22) master/ONLINE. Roles: reader(10.1.0.32)
  db3(10.1.0.23) slave/ONLINE. Roles: reader(10.1.0.33)

然而,当我检查所有的状态检查时,我发现db1复制已经中断:

[root@host ~]# mmm_control checks all
db2  ping         [last change: 2010/11/24 03:57:48]  OK
db2  mysql        [last change: 2010/11/27 03:21:42]  OK
db2  rep_threads  [last change: 2010/11/27 03:23:19]  OK
db2  rep_backlog  [last change: 2010/11/24 03:57:48]  OK: Backlog is null
db3  ping         [last change: 2010/11/24 03:58:15]  OK
db3  mysql        [last change: 2010/11/27 03:19:21]  OK
db3  rep_threads  [last change: 2010/11/27 03:23:06]  OK
db3  rep_backlog  [last change: 2010/11/24 03:58:23]  OK: Backlog is null
db1  ping         [last change: 2010/11/24 03:57:48]  OK
db1  mysql        [last change: 2010/11/27 03:22:27]  OK
db1  rep_threads  [last change: 2010/11/27 02:14:46]  ERROR: Replication is broken
db1  rep_backlog  [last change: 2010/11/24 03:58:00]  OK: Backlog is null

db1由于数据库看起来已经同步,我需要做什么来修复复制?

答案1

登录 db1 的 mysql 并执行“show slave status”,它会告诉你哪里出了问题。如果你看到“I/O 线程正在运行”和“SQL 线程正在运行”的结果是“是”,则表示复制正常。MMM 可能会感到困惑。

附言:我认为您的 MMM 配置不是最优的。根据我在您的 mmm_control show 输出中看到的内容,如果您的主要主机发生故障,除非正确进行负载平衡,否则您的从属主机的流量将加倍(它将从刚刚发生故障的主机那里获得读取器角色,因为任何主机都不能比其他主机多出一个角色)。更明智的选择是两个主机和两个从属主机,其中主机只具有写入器角色,而从属主机都具有 1 个读取器角色。这只是我的个人看法 :)

答案2

这意味着复制线程处于离线状态 - 检查您的 /var/log/mysql-mmm/ 日志以查找可能的线索。您可能只需运行一个简单的“mmm_control set_offline db1”,然后运行“mmm_control set_online db1”,看看切换它是否能恢复连接。

不过,检查日志是关键 - 您想了解 repl 线程为何死掉 - 是否有语句失败?如果无法跳过错误,这可能意味着您的 DB1 不同步。

相关内容