问题背景
今天数据库主库异常重启,导致数据丢失,所以在5.5版本(历史遗留问题)的MySQL主库上
重新做了一份新的备份,还原到从库(从库是5.7的版本),还原非常成功,但是在搭建主从关系的
时候,发生了如下报错:
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
从库无法进行change master to
命令
排查过程
查看error log发现报错,存储主从同步信息的表找不到:
去数据库里面确认:
发现5.5恢复过来的少了很多系统表,
这里可以看到不仅少了复制的表,而且少了统计信息相关的表。
仔细考虑一下,mysql5.5的统计信息以及复制相关都是写文件的,所以
应该是版本不兼容的原因:
所以只要修复系统表就可以:
那就可以请出我们的神器:
mysql_upgrade
mysql_upgrade
检查所有数据库中的所有表是否与当前版本的MySQL Server不兼容。mysql_upgrade
还会升级系统表,以便您可以利用可能已添加的新特权或功能。
执行下面的命令:
mysql_upgrade -u root -p
然后系统就会自动进行检测然后创建丢失的系统表:
执行完之后,你就会惊喜发现:
mysql 系统库下面的表由25个变成33个,对应丢失的表都重新创建了回来。
到这里不要着急,重点来了
表恢复成功之后一定要重启mysqld服务才会生效。
执行
systemctl restart mysqld
再次 change master to
果然成功了,也不报错了。
总结
在版本升级或者跨版本恢复的过程中可能会遇到系统表不兼容丢失,这时可以使用mysql-upgrade
去检查兼容性,mysql_upgrade
的作用是检查所有库的所有表是否与当前的新版本兼容,并更新系统库。
额外备注
:
mysql_upgrade
在8.0 版本之后将会被移除,8.0目前也无法使用,系统会自己进行校验修复。