簡體   English   中英

MySQL 復制錯誤 (1062)

[英]MySQL Replication Error(1062)

我是 MySQL 的新手,經過長時間的搜索,我能夠配置基於主從 ROW 的復制。 我認為它是安全的,我不必一次又一次地重新檢查。

但是今天當我確實SHOW SLAVE STATUS; 在奴隸然后我發現以下

無法在表 mydatabasename.atable 上執行 Write_rows 事件; 密鑰“PRIMARY”的重復條目“174465”,錯誤代碼:1062; 處理程序錯誤 HA_ERR_FOUND_DUPP_KEY; 事件的主日志 mysql-bin.000004, end_log_pos 60121977

有人能告訴我,當 master 沒有這樣的錯誤並且兩台服務器上的架構相同時,這怎么會發生,那么這怎么會發生。 以及如何修復它以使其再次工作以及如何防止將來發生此類事情。

還請讓我知道除此之外我還應該期待什么。

它永遠不會發生在主人身上,為什么?

這一系列的SQL是從master復制過來的,
如果該記錄已存在於 master 中,則 mysql 在 master 上拒絕

但是在從站上,如果失敗並且復制位置沒有前進到下一個 SQL(它只是停止了)

原因?

該記錄的插入查詢直接寫入從屬,而無需使用主服務器的復制

如何修復?

跳過奴隸上的錯誤,比如

SET GLOBAL sql_slave_skip_counter = N;

詳細信息 - http://dev.mysql.com/doc/refman/5.0/en/set-global-sql-slave-skip-counter.html

或者刪除slave上的重復記錄,重新恢復slave(讓replication做插入)

更糟糕的情況是,需要您重新進行設置以確保從站上的數據完整性。

如何預防?

檢查應用程序級別,確保沒有直接寫入從站
這包括您如何在命令提示符下連接到 mysql

拆分可以讀寫的mysql用戶,
因此,您的應用程序應該在不需要寫入時使用讀取用戶(主從)。
使用寫入用戶(僅限主)執行需要寫入數據庫的操作。

跳過計數器始終不是一個可行的解決方案,您正在跳過記錄,但它可能會影響更多記錄。

這是有關為什么 sql slave skip counter 不好的完整詳細信息。

http://www.mysqlperformanceblog.com/2013/07/23/another-reason-why-sql_slave_skip_counter-is-bad-in-mysql/

您可以刪除從屬數據庫中大於重復的行;

DELETE FROM mydatabasename.atable WHERE ID>=174465; 

那么

START SLAVE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM