MySQL主從 常見的錯誤及解決方案

2022-02-15 01:52:20 字數 2415 閱讀 5837

一、錯誤日誌解析:

(1) 【error】1452:無法在外鍵的表插入參考主鍵沒有的資料

1452:無法在外鍵的表插入或更新參考主鍵沒有的資料。由於item_discovery.itemid欄位(外來鍵)參考了items.itemid欄位(主鍵),當要在item_discovery表插資料時,如果items表的主鍵沒有對應的資料,則無法插入,報1452錯誤。此時可以檢查參考的表的主鍵是否有主庫對應的資料,如果有,則插入參考的表相應的資料,再開啟複製恢復sql執行緒。

(2) 【error】1032:刪除或更新資料,從庫找不到記錄

1032:刪除或更新從庫的資料,從庫找不到記錄。此時,主庫的資料是比從庫新的,可以採取從庫新增相同的資料在開啟複製恢復sql執行緒。

(3) 【error】1062:從庫插入資料,發生唯一性衝突

1062:從庫插入資料,發生唯一性衝突。此時從庫已經有相同主鍵的資料,如果再插入相同主鍵值的資料則會報錯。可以檢視主庫的改行資料與從庫的要插入資料是否一致,如一致則跳過錯誤,恢復sql執行緒,如不一致,則以主庫為準,將從庫的該行記錄刪除,再開啟複製。

如果當前高可用架構為master-master,則以下均在從庫的操作都必須set sql_log_bin=0,避免從庫執行的語句同步到主庫(恢復時以主庫的資料為準)。

二、怎麼解決問題:

1.臨時解決方案(業務執行期間不適宜使用資料對比和修復工具)

【error】1452:

普通主從複製環境

從庫:主庫:

檢視主庫在出錯的相應位置的執行語句,可通過sql得出當時insert或者update的對應的主鍵值。

查詢item_discovery的外來鍵約束c_item_discovery_1參考的表items對應主鍵值的資料行。

從庫:在items表插入主庫查詢出來的資料。

基於gtid複製環境

與普通主從複製環境處理方式相同。

【error】1032:

發生1032可能是delete或者update時從庫沒有對應資料行,可以分兩種情況處理:

(1)如果是could not execute delete_rows,則可以直接跳過錯誤

普通主從複製環境

從庫:基於gtid複製環境

從庫:找出複製出錯時的executed_gtid_set,若出現多個,則選擇跟master_uuid相同的那一條。

(2)如果是could not execute update_rows,則需要在二進位制日誌找出出錯位置的sql,再找出該錶在主庫的對應的資料行,然後直接在從庫插入這條資料,開啟sql執行緒恢復。

普通主從複製環境

從庫:主庫:

檢視主庫在出錯的相應位置的執行語句,可通過sql得出當時update的對應的主鍵值。

查詢item_discovery的對應主鍵值的資料行。

從庫:在items表插入主庫查詢出來的資料。

基於gtid複製環境

與普通主從複製環境處理方式相同。

【error】1062:

普通主從複製環境

從庫:主庫:

檢視主庫在出錯的相應位置的執行語句,可通過sql得出當時insert的對應的主鍵值。

查詢trends_uint表對應主鍵值的資料行。

從庫:在trends_uint表刪除主庫查詢出來的資料。

基於gtid複製環境

與普通主從複製環境處理方式相同。

2.徹底解決方案

使用pt-table-checksum和pt-table-sync徹底修復資料不一致。

注意:使用pt工具包首先要安裝pt工具包和安裝perl模組。

(1)   從庫停止複製

(2) 在主庫建立校驗資訊表

(3) 在主庫用pt-table-checksum校驗主從資料一致性

在從庫執行以下語句,檢視last_error,發現資料不一致的表:

然後返回作業系統執行以下命令:

該命令可以檢視該錶是否發生資料不一致情況,若有,則使用pt-table-sync修復。

(4) 在主庫用pt-table-sync列印出修復不一致資料的sql(如果有外來鍵約束,修復資料應先從外來鍵參考的字段所屬表開始修復),後將修復語句在從庫執行。

三、優化建議

在複製由於1045、1032、1062的原因中斷後,應使用三.1的臨時解決方案,恢復複製後再在業務低谷使用pt-check-sum檢查資料一致性。

檢查完後可以在從庫執行這條語句檢視有無資料不一致表:

針對核心表,可以定製自動資料校驗指令碼,每週進行資料校驗,但必須要在業務低谷進行校驗哦!

推薦閱讀:

【乾貨】linux監控 sar命令解析

【乾貨】linux shell常用經典指令碼收藏

教你分分鐘搞定python之flask框架

網頁載入效能調優

IIS常見錯誤及解決

iis常見錯誤 1.http 錯誤 404.3 not found 解決辦法 windows 8系統,執行aspx頁面出現上述錯誤資訊,解決辦法如下 iis7 控制面板 開啟或關閉windows功能 internet資訊服務 全球資訊網服務 應用程式開發功能,勾選上 net擴充套件性 和 asp.n...

IIS常見錯誤及解決

iis常見錯誤 1.http 錯誤 404.3 not found 解決辦法 windows 8系統,執行aspx頁面出現上述錯誤資訊,解決辦法如下 iis7 控制面板 開啟或關閉windows功能 internet資訊服務 全球資訊網服務 應用程式開發功能,勾選上 net擴充套件性 和 asp.n...

mysql安裝及常見錯誤

mysql 設定mysql客戶端預設字符集 default character set utf8 mysqld 設定3306埠 port 3306 設定mysql的安裝目錄 basedir d apache2.4 mysql 設定mysql資料庫的資料的存放目錄 datadir d apache2....