MySQL 主从复制不同步问题解决方案(mysql主从不同步)

MySQL 主从复制是一种强有力的高可用性和容灾备份技术,是 MySQL 数据库高可用性解决方案的重要组成部分。然而,MySQL 主从复制操作过程中会遇到主从不同步的情况,影响数据的一致性,严重时可能导致数据库发生危害,因此,MySQL主从不同步问题的解决是企业级数据库安全稳定提升的重要依靠。

MySQL 主从不同步发生几种情况,可能连主从服务器之间的连接失败或延时导致,或主服务器上发生一些错误,从服务器或者基础设施故障,主从保存到磁盘的lag_time过长等等都可能出现问题,故障现象一般表现为因为某种原因,造成主从在当前位置不一致且无法实现同步,当数据变更传播到从库后,从库状态会变为“异常(Error)”状态,不再对外连接,不能正常工作。

针对MySQL 主从不同步问题的解决方案主要有3种:

1.采用脚本定时监控主从复制状态, 针对slave_ io_running、slave_sql_running 两项以及Seconds_Behind_Master3个状态发生变化来判断状态是否可用。如果不可用,分析具体原因,深入分析,找出实际原因并采取对应行动,如调整网络延时、排查磁盘I/O状态等;

#!/bin/bash
#检查是否存在replication挂掉
# master_status=`mysql -uroot -p123456 -e "show master status\G" | grep " | " | awk '{print}'`
slave_io=`mysql -uroot -p123456 -e "show slave status\G" | grep Slave_IO_Running | awk '{print $2}'`
slave_sql=`mysql -uroot -p123456 -e "show slave status\G" | grep Slave_SQL_Running | awk '{print $2}'`
if [ "$slave_io" = "No" -o "$slave_sql" = "No" ]
then
# echo "The replication is broken!"
# echo "Starting reinitializing replication..."
# mysql -uroot -p123456 -e "slave stop; change master to master_log_file='0'; change master to master_log_pos= 0; start slave;show slave status\G"
else
echo "The replication is ok"
fi

2.让主从复制停止后,重新进行复制,重新启动主从复制。

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='host_ip',MASTER_USER='username',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql_bin.000003',MASTER_LOG_POS=981;
mysql> start slave;

3.采用 delete from master 的方式重置主服务器 binlog,从库会重新把之前从失败的位置重新执行一次。

mysql> delete from mysql.gtid_executed where source_id=NodeId;
mysql> reset master;

因此,针对不同的MySQL 主从复制不同步的情况,可以采取以上3种解决方案,c能够灵活排查处理此类问题,解决MySQL 主从复制不同步问题,以保障MySQL高可用性运行。


数据运维技术 » MySQL 主从复制不同步问题解决方案(mysql主从不同步)