生产环境上的主从集群,因为一些异常原因,导致主从同步失败。现记录下通过重做mysql从库的方式来解决,重做过程不影响主库。
mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction --master-data=1 --all-databases > dump.sql
mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction --master-data=1 --all-databases --socket=/u/mysql/tmp/mysql.sock > dump.sql
--single-transaction
参数是mysqldump在全量数据导入是对锁的一些处理,都应该加上该参数--master-data=1
参数是在备份文件中有?CHANGE MATER TO xxxxx
命令,对备库有用,默认值为1,如果为2,就是把该条语句注释了。通过mysql-client使用root用户登录上mysql
停止从库:
stop slave;
重置从库:
reset slave all;
导入主库的数据:
source /tmp/dump.sql;
查看dump.sql文件里面主库同步的位点:
CHANGE MASTER TO MASTER_HOST='XXXXX',MASTER_USER='REPL',MASTER_PASSWORD='XXXX',MASTER_LOG_FILE='mysql-bin.002029',MASTER_LOG_POS=486015475;
#登录 MySQL 主库,创建用于复制的账号并授权:
```
mysql -u root -p
```
```
CREATE USER 'replication'@'从库IP地址' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'从库IP地址';
FLUSH PRIVILEGES;
#在从库上登录 MySQL,并执行以下命令:
```
mysql -u root -p
```
```
CHANGE MASTER TO MASTER_HOST='主库IP地址',
MASTER_USER='replication',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='主库的binlog文件名',
MASTER_LOG_POS=主库的binlog位置;
开启同步:
start slave;
查看同步状态:
show slave status\G;
如果发现`Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection`报错
解决方法:
在从库上执行一下命令即可,出现该报错的原因是因为mysql8.0默认要求连mysql需要安全连接
stop slave;
CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;
start slave