[英]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 不好的完整詳細信息。
您可以刪除從屬數據庫中大於重復的行;
DELETE FROM mydatabasename.atable WHERE ID>=174465;
那么
START SLAVE;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.