我已经inheritance了一个Mysql master master系统,我注意到第二个master(从现在开始称它为奴隶,因为它运行在一个“奴隶”机器上)停止获取其数据库的更新。 我看到了
主:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
奴隶:(我有一个错误截断)
Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1062 Last_Error: Error 'Duplicate entry '3' for key 'PRIMARY'' on [...]
我不知道是什么导致它处理,考虑到我们不能在那里重复。 重要的是恢复正常的操作。
现在我已经stop slave; 在主上stop slave; 在奴隶,因为我看到,如果我改变logging在奴隶的变化得到传播到主,这是积极使用。
我如何:强制同步一切从主机到从机而不影响主机上的数据? 那么希望像往常一样从机拾取复制?
更新 OK我试图删除所有表上的奴隶,然后抱怨在错误部分,'表'不存在。 所以我做了一个没有数据转储的硕士,并确保我只有在辅助(奴隶)空表。 我start slave; 在奴隶,但现在它抱怨血腥的alter table语句,例如:
Last_Errno: 1060 Last_Error: Error 'Duplicate column name [...] Query: 'ALTER TABLE [...]
如何跳过fracking alter语句我只是想复制血腥的数据并且用它来完成,我的表已经有了FFS的更改,现在它抱怨几个星期前被复制之后所做的更改
如何重置日志或什么?
为什么会出现这种情况? “次要”正在传播到“主要”。 “小学”不传播到“中学”。 但是,我试图做的任何修复都将其保留在相同的状态。是 – 是是 – 否与相同的Last_Error。 我想到那个时候,服务器已经脱离了networking,可能会以某种方式混淆MySQL?
首先,您需要了解MySQL复制只能同步CHANGES。 清空表(或删除它们)将不会再获取数据。 您必须使用一组一致的数据文件启动从站。
重新开始你的奴隶的粗略过程如下:(不要按照这些指示)
如果你不能容忍停机时间,那么有两种方法可以实现这一点。
如果你的数据足够小,你可以mysqldump包括数据的一切, 那么这些说明是好的 。 如果你有多个数据库,请确保你阅读这篇文章,因为我不打算在这里复制这些注意事项。 但是如果你只有一个数据库,那么基本的步骤是:
mysqldump -u root -e -q --single-transaction --master-data database_name START SLAVE UNTIL MASTER_LOG_FILE='bin.000029', MASTER_LOG_POS=651322976; 如果你的数据库对于mysql dump来说太大了,那么你将需要使用操作系统的卷快照function来快照你的表。 这将暂停您的MySQL服务器几秒钟,所以最好在几个小时后,它可能不会打扰任何人。
flush tables with write lock来使它们保持一致。 这将有效地暂停服务器。 SHOW MASTER STATUS获取当前日志位置,然后UNLOCK TABLES释放locking。 服务器现在是未被暂停的。 START SLAVE UNTIL MASTER_LOG_FILE='bin.000029', MASTER_LOG_POS=651322976;