天天看点

mysql5.6备份在mysql5.7上恢复后建立主从关系报错

背景:生产环境主从架构复制报错,重新拉取主库完整备份在从库恢复,报错日志: 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.

环境:mysql:主库:percona5.6.25,从库percona5.7.31

问题分析:首先从日志入手,最有价值也是唯一有价值的信息,看日志信息大体意思就是从库的必要属性没有配置,至少要配置–server-id ,配置文件中是有server-id属性的, 那就是其他的原因,通过一番查找社区文章发现是由于主从复制相关的系统表差异导致的,5.6和5.7的系统表是有差异的,所以就想到了用5.7的系统表在5.6版本恢复出来的数据基础上做修改,来解决差异问题

步骤:

1.从其他的5.7 mysql库中导出slave_master_info,slave_relay_log_info,slave_worker_info,innodb_index_stats,innodb_table_stats表结构sql

2.删除5.6恢复出来的数据的mysql库中删除slave_master_info,slave_relay_log_info,slave_worker_info,innodb_index_stats,innodb_table_stats表

mysql> drop table slave_master_info;
mysql> drop table slave_relay_log_info;
mysql> drop table slave_worker_info;
mysql> drop table innodb_index_stats;
mysql> drop table innodb_table_stats;
           

3.导入从5.7导出的表结构

mysql5.6备份在mysql5.7上恢复后建立主从关系报错

4.重启MySQL

service mysqld restart
           

5.重新搭建主从即可

mysql> reset master;
mysql> reset slave;
mysql> SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 0;
mysql> SET @@GLOBAL.GTID_PURGED='132028ab-abc5-11e6-b2f0-000c29a60c3d:1-45675';
mysql> SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
mysql> change master to master_host='xxxxxxx',master_port =3306,master_user='xx',master_password='xxxxx',master_auto_position=1;
mysql> start slave;