面試被問到主從復制的主和從之間的數據不一致的原因,以及解決方法,當時沒答出來,一是確實沒有思考過這個問題,二來也有些因為緊張,沒有想到。后來再次回想自己所學習的主復制的過程,應該有這幾個原因:
- 主從之間存在防火牆或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語句在從庫上無法執行
-
主數據庫版本高於從數據庫
解決方案:低版本做主庫,高版本做從庫
