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高可用性运行。