我有一个包含三台数据库服务器(两台主服务器和一台从服务器)的 MySQL-MMM 集群。最近有人直接插入从数据库服务器,导致复制中断。发现此问题后,我重新建立了从系统db1
到db2
和db3
系统的复制。复制现在正在运行,并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 不同步。