背景
生产环境上的主从集群,因为一些异常原因,导致主从同步失败。现记录下通过重做mysql从库的方式来解决,重做过程不影响主库。
步骤
1、在主库上的操作步骤
-  备份主库所有数据,并将dump.sql文件拷贝到从库/tmp目录-  mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction --master-data=1 --all-databases > dump.sql备注:
- 如果出现报错`Can't connect to local MySQL server through socket` 可以执行netstat -ln | grep  mysql命令查看mysql socket的地址 可以执行netstat -ln | grep  mysql命令查看mysql socket的地址 需要添加参数 --socket=/u/mysql/tmp/mysql.sock 再次执行即可 需要添加参数 --socket=/u/mysql/tmp/mysql.sock 再次执行即可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,就是把该条语句注释了。
 
-  
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
-  参考连接:mysql主从复制报错:Authentication plugin ‘caching_sha2_password‘ reported error: Authentication requires se_authentication plugin 'caching_sha2_password' repo-CSDN博客 
- 再次查看从库状态,这两个都是yes即可