我有一个复制系统,我的主人有一个mysql 5.5版本,而奴隶是mysql 5.1.我知道这不受支持,因为奴隶版本应该比主版本大,但我们还不能升级.
在主服务器中创建新数据库之前一切正常,然后从服务器复制失败并显示错误:
Query caused different errors on master and slave.
Error on master: message (format)=
'Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d.
Please use mysql_upgrade to fix this error.' error code=1558 ; Error on slave: actual message='no error', error code=0. Default database: 'newdb'. Query: 'DROP DATABASE newdb'
我的解决方法是:
set global sql_slave_skip_counter=2;
create database newdb;
start slave
在对所有数据库表进行校验和后,一切似乎都没问题,但我们有一个非常糟糕的应用程序,它经常创建数据库,所以我想知道是否有一种方法并不意味着编码解决问题而无需手动创建数据库.
解决方法:
主服务器生成的每个复制事件都包含执行生成事件的查询所导致的错误代码.这通常是“成功”(0,没有错误).
当从属执行查询时,它期望遇到的错误与主遇到的错误相同(同样,通常是“无错误”).如果没有发生这种情况,复制将停止.请注意,不保留来自主服务器的错误消息,只保留代码.这就是您在错误消息中看到占位符的原因,因为从属显示错误消息的sprintf()模板.
但请仔细注意错误的位置.
检查主服务器的错误日志.
看起来好像主人没有正确升级到MySQL 5.5;具体来说,看起来mysql_upgrade实用程序似乎没有用于升级系统表以与MySQL 5.5完全兼容.
http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html
您确实在运行不受支持的配置,使用较新的主服务器和较旧的服务器…但在这种情况下,您的主服务器似乎存在与复制无关的问题.
Error on master:
message (format)=
'Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d.
Please use mysql_upgrade to fix this error.'
error code=1558 ;
主人遇到了错误;您可能会在主日志中发现类似的错误,尽管它们可能只在启动时发生,如果有的话.无论如何,你的应用程序也应该看到这个错误……也许它忽略了它.