从属 SQL 线程未运行

从属 SQL 线程未运行

我的复制突然离线。SHOW SLAVE STATUS显示 I/O 线程正在运行,而 SQL 线程没有运行。

我有错误信息:

致命错误:发现表映射事件映射表 ID 0,该表已被映射,但设置不同。

我无法使用 Google 找到此问题的解决方案。

停止/启动从属没有太大帮助。

答案1

如果你的掌握服务器的版本早于 MySQL 5.1.53,您遇到了错误。

http://bugs.mysql.com/bug.php?id=56226

MySQL 5.1.53 (2010-11-03) 中的变化 —

复制:如果语句ALTER TABLE修改了表中的列MyISAM但没有设置该列的大小,则会导致二进制日志损坏,因为表映射被多个表上的更新(包括删除)意外设置为 0,从而导致多个表收到相同的表映射 ID 时复制失败。(错误 #56226,错误 #11763509)

http://dev.mysql.com/doc/relnotes/mysql/5.1/en/news-5-1-53.html

这个问题已经存在几天了,所以你可能已经重建了复制。如果你的服务器版本较旧,你应该升级,因为问题很可能会再次出现。

如果没有,你可能能够SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;跳过无效的表映射条目……尽管我不确定这是否可以在这种情况下使用。即使它确实有效,您也可能会有一个与主服务器不同的从服务器,因此您需要使用第三方工具验证两台服务器上的数据是否相同。

如果您的服务器不是很旧,这表明二进制日志已损坏,这是不应该发生的,但如果发生了,可能意味着主服务器或从服务器上的其他问题即将出现。

答案2

如果复制失败,您最好重新开始,而不是排除故障。

1)在主 MySQL 服务器上FLUSH TABLES WITH READ LOCK;

2)转储所有数据库mysqldump -uusername --all-databases -p | gzip -2 > dump.sql.gz

3) 在主 MySQL 服务器上UNLOCK TABLES; // 不一定是 CAPS。

4)scp将您的文件复制到辅助 MySQL 服务器。

5)slave stop;在辅助 MySQL 服务器上。

6)在辅助 MySQL 服务器上导入 dump.sql.gz,如下所示:

gunzip < dump.sql.gz | mysql -uusername -password

7)如果你已经MASTER正确设置了配置,你可以启动slave

start slave;

8)显示从站状态SHOW SLAVE STATUS\G;

检查特定的错误代码并更新您的答案以提供更多详细信息。如果可能的话

相关内容