MySQL主從復制主從之間數據不一致的原因和解決


面試被問到主從復制的主和從之間的數據不一致的原因,以及解決方法,當時沒答出來,一是確實沒有思考過這個問題,二來也有些因為緊張,沒有想到。后來再次回想自己所學習的主復制的過程,應該有這幾個原因:

  • 主從之間存在防火牆或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 
    
  • 網絡的問題。。。

  • 數據量太大,可以配置負載均衡,如配置讀寫分離。

查了一下資料,主從復制不一致的原因還有可能是以下的原因:

  1. 從庫寫入

  2. 主從復制過程中主庫異常宕機

  3. 主庫的max_allowed_packet參數比從庫大,一個較大的SQL語句在從庫上無法執行

  4. 主數據庫版本高於從數據庫

    解決方案:低版本做主庫,高版本做從庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM