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

来源:https://www.cnblogs.com/Javame/archive/2018/08/31/9563808.html
-Advertisement-
Play Games

一、錯誤日誌解析: (1) 【ERROR】1452:無法在外鍵的表插入參考主鍵沒有的數據 1452:無法在外鍵的表插入或更新參考主鍵沒有的數據。由於item_discovery.itemid欄位(外鍵)參考了items.itemid欄位(主鍵),當要在item_discovery表插數據時,如果it ...


一、錯誤日誌解析:

(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框架

網頁載入性能調優


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、說明 所謂的PXE是Preboot Execution Environment的縮寫,字面上的意思是開機前的執行環境。 要實現pxe,至少需要3個服務 2、流程 註意:全部用的udp封裝 1)client向pxe server上的dhcp發送IP地址請求消息,dhcp檢測client是否合法,同 ...
  • 使用ntsd程式 (如果安裝過VS,在VS的安裝目錄下,比如“C:\Program Files (x86)\Debugging Tools for Windows (x86)\ntsd.exe”,也可以在這裡下載) 兩種方法 一種是使用進程的ID號,將PID換成對應進程ID號即可 一種是使用進程的名 ...
  • Linux日誌查找方法 適用於測試,開發,運維人員,用來查找Linux伺服器問題的一般方法,比較實用,如果有更好的辦法可以一塊討論,歡迎大神們來指導哈!!! 進入正題 第一步、通過Xshell登錄伺服器 鏈接方法—找度娘、開發同事#最好是自己找度娘,自給自足豐衣足食嘛賬號、密碼—找技術老大 第二步、 ...
  • 通過 Certbot 為 nginx 開啟https支持。 環境 CentOS 7.1 python2.x(這玩意系統里本來就有) 安裝Nginx 順手啟動: 順手設置開機啟動: 嗯,就完成了。 至於配置文件,會在後面設置。 配置https 此處我們使用 Let's Encrypt 提供的證書。且為 ...
  • 研究nginx優化時反覆安裝清理nginx,為方便做了一個簡單部署腳本,用的最新穩定版1.14.0,預設路徑,加入systemd系統進程管理中,可以通過systemd管理nginx的啟動、終止、重載、狀態、開機自啟等. 需要再次覆蓋nginx時,用awk找到nginx的進程然後kill掉,再次執行安 ...
  • 阿裡雲yum源速度快而且穩定,下麵給出配置方法 打開centos的yum文件夾 cd /etc/yum.repos.d/ 用wget下載repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 備份系統原來的repo文件 mv CentOS-B ...
  • 使用場景 linux管理員忘記root密碼,需要進行找回操作。 註意事項:本文基於centos7環境進行操作,由於centos的版本是有差異的,繼續之前請確定好版本。 步驟 一、重啟系統,在開機過程中,快速按下鍵盤上的方向鍵↑和↓。目的是告知引導程式,我們需要在引導頁面選擇不同的操作,以便讓引導程式 ...
  • 本節重點: 如何找出兩張表之間的關係 表的三種關係 一、介紹 因為有foreign key的約束,使得兩張表形成了三種了關係: 多對一 多對多 一對一 二、重點理解如果找出兩張表之間的關係 三、表的三種關係 (1)書和出版社 一對多(或多對一):一個出版社可以出版多本書。看圖說話。 關聯方式:for ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...