2008-08-27 73 views
11

我正在運行一個主從MySQL二進制日誌複製系統(phew!),對於某些數據,它不同步(意思是主服務器比從服務器擁有更多的數據)。但奴隸停止很頻繁的MySQL錯誤,這可以禁用? (也許my.cnf設置複製從屬忽略複製錯誤或一些排序;))MySQL二進制日誌複製:它可以被設置爲忽略錯誤嗎?

這是什麼發生,每時每刻,當奴隸試圖複製一個不存在的項目,奴隸就死了。在SHOW SLAVE STATUS \ G快速檢查;

 Slave-IO-Running: Yes 
     Slave-SQL-Running: No 
     Replicate-Do-DB: 
      Last-Errno: 1062 
      Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table (FIELDS) VALUES (VALUES)' 

我及時修復(一旦我意識到,從已停止)通過執行以下操作:

STOP SLAVE; 
RESET SLAVE; 
START SLAVE; 

...最近這已越來越那種無聊,和前我吐出了一些PHP,它爲我做了這些,我想知道是否有一些my.cnf條目不會在第一個錯誤時終止從機。

乾杯,

/MP

+0

「RESET SLAVE」將重新開始複製​​。對於同一行的同一個錯誤應該遲早會在正確的路上發生......那麼,它是如何解決你的問題的。 – Uday 2012-05-10 13:50:45

回答

11

是,使用在my.cnf,其中xxx是「全部」或逗號月的錯誤代碼列表--slave-跳過錯誤= XXX。

+4

公平的警告,這樣做可以真正腐敗你的奴隸數據庫。他們是有原因的錯誤。 :) – Riedsio 2010-12-01 12:30:13

+0

my.cnf,我相信你把這個沒有領先的「 - 」。 – TheSatinKnight 2017-05-01 22:51:25

3

首先,你真的要忽略的錯誤?如果出現錯誤,則可能數據不再同步。也許你想要的是放下從屬數據庫,並在出現錯誤時重新啓動同步過程。第二,我認爲你得到的錯誤不是當你複製一個不存在的項目時(這意味着什麼?) - 它看起來像你正在複製一個已存在於從屬數據庫中的項目。

我懷疑問題主要是由於沒有從乾淨的數據拷貝開始。似乎主人已經被複制到奴隸身上;那麼複製已被關閉(或失敗);然後它又重新開始了,但沒有讓奴隸有機會趕上它錯過的東西。

如果你有當主人可以足夠長的克隆數據庫,並將其導入到從寫訪問被關閉一段時間,這可能讓問題消失。

1

現代mysqldump命令有幾個選項,以幫助建立一致的複製。退房--master-data這將會把二進制日誌文件和位置在轉儲和自動設定當加載到奴隸。另外--single-transaction將在事務內執行轉儲,以便不需要寫入鎖來執行一致的轉儲。

+0

值得注意的是--single-transaction只適用於事務表,比如InnoDB。 – 2012-05-14 21:00:04

1

如果從服務器不用於除複製以外的任何寫操作,高性能MySQL的作者建議在從服務器上添加read_only以防止用戶錯誤地更改從服務器上的數據,因爲這樣也會創建相同的服務器你遇到的錯誤。

0

我認爲你正在做不同步複製數據庫第一次同步數據庫,並嘗試複製和服務器都產生相同的唯一ID和嘗試設置自動incerment偏移

15

停止奴隸;設置全局sql_slave_skip_counter = 1;開始奴隸;

您只能忽略當前錯誤並繼續複製過程。