mysql主從出現問題 如何診斷故障點 如何恢復數據

1 主從問題緣由

通常致使主從問題的因素通常有如下幾種:一個主庫的從庫太多,從庫硬件比主庫差,慢SQL語句過多主從複製單線程,主庫寫併發太大來不及傳送到從庫。主從庫之間的網絡延遲。由於機器配置的問題,包括磁盤IOCPU,內存等各方面因素形成複製的延遲mysql

2 主從問題

主從問題不少,錯誤代碼也不同,能夠在從庫上執行show slave status\G查看是否主從同步了,若是sqllo線程狀態不是yes,說明主從同步出現問題了。sql

實例1-1      從庫寫入數據衝突數據庫

例如:show slave status\G查看主從同步,下面會出現錯誤碼:服務器

Last_SQL_Error: Error 'Can't createdatabase 'mao'; database exists' on query. Default database: 'mao'. Query:'create database mao'網絡

通常出現錯誤會有代碼提示,如上能夠看出來是由於從庫建立了跟主庫同名的數據庫,形成衝突了。併發


實例1-2      server-id相同ide

另外,常常也有主和從的server-id配置相同,致使從庫的IO線程一直是正在鏈接的狀態(connecting),一直轉變不了yes.ui

若是server-id衝突,主服務器會kill掉先鏈接進來的從服務器的IO線程,後面鏈接進來的具備相同server-idIO線程會覆蓋前面具備相同server-idIO線程.spa

通常能夠修改從庫的配置文件中server-id,與主庫不一樣便可。線程


實例1-3      uuid相同衝突

配置MySQL主從時,因爲是拷貝的mysql目錄,致使主從mysql uuid相同, Slave_IO沒法啓動,報錯信息以下:

The slave I/O thread stops becausemaster and slave have equal MySQL server UUIDs; these UUIDs must be differentfor replication to work.

解決辦法:修改mysqldata 目錄下auto.cnf 文件中uuid的值,使兩臺mysql不一樣便可,修改後重啓mysql服務。

 

3 其餘補充解決方法

方法一:若是數據要求不嚴格,能夠忽略錯誤後,繼續同步;該方法適用於主從庫數據相差不大,或者要求數據能夠不徹底統一的狀況。

stop slave;

#表示跳過一步錯誤,後面的數字可變

set global sql_slave_skip_counter =1;

start slave;

方法二:

根據能夠忽略的錯誤號事先在配置文件中配置,跳過指定的不影響業務數據的錯誤。

[root@DB01 logs]# grep slave-skip/etc/my.cnf

slave-skip-errors = 1032,1062,1007

方法三:主從庫數據相差較大,或者要求數據徹底統一的狀況能夠從新作主從,徹底同步。

相關文章
相關標籤/搜索