2011-01-12 54 views
3

我是MySQL的新手,經過長時間的搜索後,我可以配置基於主從行的複製。我認爲這將是安全的,我不必一次又一次地重新檢查。今天MySQL複製錯誤(1062)

但是,當我做了奴隸SHOW SLAVE STATUS;後來我發現以下

無法執行 表mydatabasename.atable Write_rows事件;重複 項'174465'爲'PRIMARY'鍵, Error_code:1062;處理程序錯誤 HA_ERR_FOUND_DUPP_KEY;事件的 主日誌的mysql-bin.000004, end_log_pos 60121977

誰能告訴我這是如何甚至可以來當主既有服務器上沒有這樣的錯誤和模式是一樣的話,怎麼可能出現這種情況。以及如何解決這個問題,以便今後再次開展工作,以及今後如何預防此類事情。

請讓我知道還有什麼意外的,我應該期望除此之外。

+0

有很多的原因,這可能會發生,但它會如果您想檢查在主機和從機PK = 174465數據存儲中的錯誤之後,看看數據是十分有用已經一樣了。 – symcbean 2011-01-12 13:30:18

+0

謝謝,我檢查一個它已經存在,但問題的原因如何可能發生,之前有一些電源故障,但不是通過使用數據庫事務更新奴隸確保一致性? – 2011-01-12 14:01:25

+0

http://bugs.mysql.com/bug.php?id=38205此鏈接可能會對您有所幫助。 – programmer 2011-01-12 13:22:48

回答

6

它永遠不會發生在主人身上,爲什麼?

的一系列SQL是從主複製,
如果記錄master中已經存在,MySQL的拒絕上主

而是奴隸,如果失敗,複製位置不前進到下一個SQL(它剛剛停止)

原因?

該記錄的插入查詢是直接寫入到從沒有使用複製從主

如何解決?

跳過站的錯誤,像

SET GLOBAL sql_slave_skip_counter = N; 

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

或刪除從重複記錄,然後再重新開始奴隸(讓複製做插入)

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

如何預防?

檢查應用水平,確保沒有直接寫到從
這包括如何連接到MySQL在命令提示符下

分割mysql用戶,可以做的寫入和讀取,
所以,你的應用程序應該使用讀取用戶(主機和從機)不需要寫入時。
使用寫入用戶(僅限主機)進行操作需要寫入數據庫。