1. 程式人生 > >mysql主從同步錯誤恢復

mysql主從同步錯誤恢復

      Mysql主從同步叢集在生成環境使用過程中,如果主從伺服器之間網路通訊條件差或者資料庫資料量非常大,容易導致MYSQL主從同步延遲。

      MYSQL主從產生延遲之後,一旦主庫宕機,會導致部分資料沒有及時同步至叢庫,重新啟動主庫,會導致叢庫與主庫同步錯誤,如何快速恢復主從同步關係呢,如下有兩種方法:

1、忽略錯誤後,繼續同步(只有一次錯誤)

此種方法適用於主從庫資料內容相差不大,或者要求資料可以不完全統一的情況,資料要求不嚴格的情況。

Master端執行如下命令,將資料庫設定全域性讀鎖,不允許寫入新資料:

flush  tables  with  read  lock

Slave端停止Slave I/O及sql執行緒,同時將同步錯誤的SQL跳過1次,跳過會導致資料不一致,最後啟動start  slave,同步狀態恢復,命令如下:

stop slave;
set  global sql_slave_skip_counter =1;
start slave;

2、重新做主從同步,完全同步:(主從資料差別大)

此種方法適用於主從庫資料內容相差很大,或者要求資料完全統一的情況,資料需完全保持一致。

1)在master進行鎖表

flush  tables  with  read  lock;
注意:該處是鎖定為只讀狀態,語句不區分大小寫

2)進行資料備份

mysqldump -uroot -p -hlocalhost  --all-databases > mysql.sql (--all-databases表示所有資料庫)
這裡注意一點:資料庫備份一定要定期進行,可以用shell指令碼或者python指令碼,都比較方便,確保資料萬無一失

3)檢視master 狀態:

show master status;

4)把mysql備份檔案傳到從庫機器,進行資料恢復:

scp mysql.sql [email protected]10.6.97.134:/tmp/

5)停止從庫的狀態,匯入資料備份

mysql> stop slave;
mysql> source /tmp/mysql.sql;

6)設定從庫同步,並開啟slave;

change master to master_host = '10.6.97.133', master_user =  'tongbu',master_password='123456', master_log_file = 'mysql-bin.000003',  master_log_pos= 34427537;
start slave;
show slave status\G;

7)在master上解鎖:

  unlock tables;