【问题标题】:Replaying Mysql Replication error重放 Mysql 复制错误
【发布时间】:2012-08-23 23:46:38
【问题描述】:

我们正在运行一个标准的 Mysql 主/从复制系统,该系统已经运行了几年。事实上,我们能够通过使用 Slave DB(在将其变为 Master 之后)从服务器中断(导致 Master 离线)中恢复过来。

无论如何,导致我们问题的问题发生在我们恢复服务器并将原来的 Master 恢复为 Master 并将原来的 slave 恢复为 Slave 之后。

这是因为我是个白痴,而不是其他任何原因!

基本上在 Slave 上发生了写入 - 这意味着由于 Duplicated Primary Key 错误,无法复制 Master 上同一张表上的写入。

正如我所说,我的错。

我可以从 Slave 中删除错误写入的记录 - 从而从 Slave 中删除冲突的 ID,但我想要来自 Master DB 的记录。

我的问题是:我知道我可以通过跳过来自 Master 的相关查询来“修复”复制(通过将 SQL_SLAVE_SKIP_COUNTER 设置为 1)——但这意味着我会丢失来自 Master 的记录。

那么,有没有办法“重放”错误的复制写入?基本上将复制指向一个查询?

或者我是否必须经历整个繁琐的过程:删除我的 Slave,从我上次成功的备份中重新填充它并再次将其设置为 Slave?

非常感谢。

【问题讨论】:

    标签: mysql database-replication


    【解决方案1】:

    答案实际上是盯着我的脸(不总是这样!)。

    重复的主键错误是由于我在从属设备上插入并在主设备上插入同一张表引起的 - 这意味着两个新记录具有相同的 ID。

    对我来说幸运的是,我不需要在 Slave 上插入,所以我只是删除了它 - 这意味着只有一条具有主键值的记录。

    我只需要一种方法来进行复制以尝试复制记录 - 这很容易。

    只需重新启动从站!

    所以:

    mysql root:(none)>START SLAVE;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql root:(none)> _
    

    【讨论】:

      【解决方案2】:

      如果它是一个简单的修改/更新/...你为什么不简单地在主服务器上播放它(手动或从从属二进制日志中获取它,如果你有的话),关闭从属进程的从属进程,然后设置从站上的新复制指针(文件和位置)(显示主站状态;在主站上),然后重新启动从站?

      【讨论】:

      • 感谢您的回复@Parallelis。我实际上并不需要出错的更新——更多的是如何修复它的问题。但是你帮了我 - 我的答案在下面
      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 2011-06-07
      • 2016-08-13
      • 2017-02-10
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      相关资源
      最近更新 更多