美文网首页
Mysql双机同步故障排除记录

Mysql双机同步故障排除记录

作者: 阿乐_822e | 来源:发表于2021-06-18 12:36 被阅读0次

开发环境两台Mysql主机,已配置高可用(keepalived)双向同步,某天巡视发现,同步失败。经检查当前主用库(192.168.1.182)数据正常,故决定在第二台机(192.168.1.181)上重做同步。
因主机数据库较大,为提高效率,故采用物理备份方案,备份工具使用percona公司xtrabackup,版本号:2.4.4,两台机都要安装,过程省略。
说明:采用本方案,主库不用锁表,即实现了”热备“,实际上本方案就是一个使用xtrabackup来搭建slave的方案

1. 确认主用机器已停止同步

因为之前配的高可用双向同步,所以先将主库的同步停掉

# 主机上操作
mysql> stop slave ;change master to master_host=' ';reset slave all;
mysql> show slave status\G
Empty set (0.00 sec)

# 查看备份用户是否存在
mysql> select host,user from mysql.user where user='rep';
+--------------+------+
| host         | user |
+--------------+------+
| 192.168.1.% | rep  |
+--------------+------+
1 row in set (0.00 sec)

# 如果上述命令返回为空,则创建备份用户
mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123456'; 
mysql> flush privileges;
  1. 清除并重建从机上的数据库
# 从机上准备工作 
$ service mysql stop
$ rm -rf /data/mysql /opt/test1  # 删除所有数据库及备份文件存放目录
# 主机上操作
$ rm -rf /opt/test1 && mkdir -pv /opt/test1
# 全备
$ innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --slave-info --no-timestamp /opt/test1
$ scp -r /opt/test1 root@192.168.1.181:/opt/
# 从机上操作
# 准备
$ innobackupex --apply-log /opt/test1/
# 在输出结果中找到类似"InnoDB: xtrabackup: Last MySQL binlog file position 990174286, file name log_bin.000186"
# 还原 
$ innobackupex --defaults-file=/etc/my.cnf --copy-back /opt/test1
$ chown -R mysql.mysql /data/mysql
$ cat /opt/test1/xtrabackup_binlog_info # 查到同步的信息(和上面命令的结果一致)
log_bin.000186  990174286
$ service mysql start
# 到从机上操作
mysql> change master to master_host='192.168.1.182',
     master_user='rep',
     master_password='123456',
     master_log_file='log_bin.000186',   
     master_log_pos=990174286;  
mysql> start slave ;
mysql> show slave status\G ;
*************************** 1. row ***************************
            ......
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes  ....
            
# 再准备配置双活            
mysql> show master status\G
*************************** 1. row ***************************
             File: log_bin.000002
         Position: 1149270
       
# 再到主机上start slave 
mysql> change master to master_host='192.168.1.181',
     master_user='rep',
     master_password='123456',
     master_log_file='log_bin.000002',   
     master_log_pos=1149270;  
mysql> start slave ;
mysql> show slave status\G ;

# 确认主从一致后,两台机都清理一下
$ rm -rf /opt/test1

# 让相关开发人员检查服务运行情况

PS; 特别说明,在设置同步点的时候,网上很多资料说是查看xtrabackup_slave_info文件,但本人在实践中发现,这个文件的提示有时候并不靠谱,甚至根本找不到它所提示的bin_log文件,因此,还是以xtrabackup_binlog_info文件为准

  1. 关于找不到记录的处理办法
    有些时候查看同步状态时会显示“ Could not execute Delete_rows event on table XXX.XXX; Can't find record in 'xxx', ....."之类的错误,这表示删除记录时,这条记录不存在,路过这条记录就可以了
mysql> show slave status\G ;
*************************** 1. row ***************************
              ......
             Slave_IO_Running: Yes
            Slave_SQL_Running: No  
              ......
                   Last_Errno: 1032  # 错误类型1032(记录不存在)
                   Last_Error: Could not execute Delete_rows event on table XXX.xxx; Can't find record in 'xxx', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log log_bin.000183, end_log_pos 373070996 ......          
mysql> stop slave;set global sql_slave_skip_counter=1;start slave;
mysql> show slave status\G ;
# 如果频繁出现1032(记录不存在)错误,则到my.cnf中设置跳过此错误
$ vi /etc/my.cnf  # 在[mysqld]项最后添加
slave-skip-errors=1032
$ service mysql restart
mysql> show slave status\G ;

相关文章

网友评论

      本文标题:Mysql双机同步故障排除记录

      本文链接:https://www.haomeiwen.com/subject/vkukyltx.html