我的复制突然离线。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;
检查特定的错误代码并更新您的答案以提供更多详细信息。如果可能的话