面试被问到主从复制的主和从之间的数据不一致的原因,以及解决方法,当时没答出来,一是确实没有思考过这个问题,二来也有些因为紧张,没有想到。后来再次回想自己所学习的主复制的过程,应该有这几个原因:
- 主从之间存在防火墙或selinux阻拦,从服务器没法到主服务器上拿到数据;
- 在搭建主从复制架构的时候没有进行一次数据同步
- 网络的延迟
- 数据量太大
解决的方法:
-
关闭防火墙和selinux
service firewalld stop systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
-
再进行一次数据同步
# 进入主库,进行锁表,防止数据写入 mysql> flush tables with read lock; # 备份主服务器上的数据 mysqldump -uroot -p --all-databases > backup.sql # scp backup.sql root@xxx.xxx.xxx.xxx:~ #在从服务器上导入数据 mysql -uroot -p < /root/backup.sql
-
网络的问题。。。
-
数据量太大,可以配置负载均衡,如配置读写分离。
查了一下资料,主从复制不一致的原因还有可能是以下的原因:
-
从库写入
-
主从复制过程中主库异常宕机
-
主库的max_allowed_packet参数比从库大,一个较大的SQL语句在从库上无法执行
-
主数据库版本高于从数据库
解决方案:低版本做主库,高版本做从库