MySQL复制错误:Error_code:1032

我设置只读的MySQL只读副本。 主从机都运行MySQL 5.6。 奴隶永远不会被直接写入,但我似乎无法保持同步了一个多小时。 经过一段时间后,我经常遇到这种types的错误:

Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log 

然后,我必须经历从MySQL转储重新创build奴隶的过程,但不pipe我做什么,我再次得到这个错误。 有没有人有一个线索,为什么这可能会发生?

根据你使用的是什么引擎,你是否使用多个模式,以及你使用mysqldump的选项,你可能不会得到一致的转储。

如果你有两个模式,比如说一个命名的开发和另一个命名的生产,mysqldump为每个模式分别locking表。 这意味着在备份开发模式的同时,生产模式仍然是可写的和正在更新的。

现在您已经拥有了两个模式的转储并启动了复制,两个模式实际上位于不同的binlog位置。 这意味着当你得到错误代码1032你真的没有那个关键。

如果所有需要备份的表都是InnoDB,则应该查看mysqldump的--single-transaction选项。 如果你有InnoDB和MyISAM的混合,那么只有InnoDB表保证一致。 MyISAM表格仍将使用此选项写入。

如果你有一个InnoDB和MyISAM的混合,或者只是纯粹的MyISAM,最好的select(使用mysqldump)是使用--lock-all-tables 。 这就是听起来像什么,直到转储完成后才会写入。 这有一个主要的缺点,即依赖于数据库的应用程序或网站也被locking(因为它不能写入)。

IMO的最佳select是将所有东西都移到InnoDB中,如果它还没有使用,则使用Percona Xtrabackup 。 它仍然可以和MyISAM表一样正常工作,但通过与InnoDB表( cprsync )不同的工具。 它仍然需要在复制MyISAM表时locking表,但是尽量减less这个时间。 如果使用rsync方法,那么该工具将首先复制所有MyISAM表, 然后locking这些表,然后复制自第一个副本以来已更新的任何表。 锁只需要在第二个rsync期间进行。