我们正在运行一个标准的Mysql Master / Slave复制系统,该系统已经运行了好几年。事实上,我们能够通过使用Slave DB(在将其转换为Master之后)从服务器中断(使Master脱机)中恢复。
无论如何,导致我们问题的问题发生在我们恢复服务器并将原始Master作为Master并且原始slave作为Slave后返回。
这是因为我是个白痴 - 而不是别的什么!
基本上在Slave上发生了写操作 - 这意味着由于重复的主键错误,无法复制Master上同一个表上的写入。
正如我所说,我的错。
我可以删除Slave中错误写入的记录 - 从而从Slave中删除冲突的ID,但我想要来自Master DB的记录。
我的问题是:我知道我可以通过从主服务器跳过相关查询来“修复”复制(通过将SQL_SLAVE_SKIP_COUNTER设置为1) - 但这意味着我将丢失来自主服务器的记录。
那么,有没有一种'重放'错误复制写入的方法?基本上将复制指向一个查询?
或者我是否必须完全放弃我的Slave,从我上次成功备份中重新填充它并再次成为Slave?
非常感谢提前。
答案 0 :(得分:0)
如果这是一个简单的修改/更新/ ...为什么不简单地在主服务器上播放它(手动或从奴隶二进制日志中获取它,如果你有的话),关闭slave的slave进程,然后设置从站上的新复制指针(文件和位置)(显示主站状态;在主站上),并重新启动从站?
答案 1 :(得分:0)
答案实际上是在盯着我(不是一直都是这样!)。
重复的主键错误是由于我在Slave上执行插入并插入到master上的同一个表 - 这意味着两个新记录具有相同的ID。
幸运的是,我不需要Slave上的插入,所以我只是将其删除 - 这意味着只有一条带有主键值的记录。
我只需要一种方法让复制尝试复制记录 - 这很容易。
重启奴隶!
所以:
mysql root:(none)>START SLAVE;
Query OK, 0 rows affected (0.03 sec)
mysql root:(none)> _