• MySQLのslaveでDuplicate entryエラーが出た時の対処

    こんにちは。小宮です。
    このまえ出たエラーの記録です。

    ・エラーログ

    >show slave status\G
    
                       Last_Error: Error 'Duplicate entry '1133523-2013-08-18 05:03:01' for key 'PRIMARY'' on query. Default database: '*****'. Query: 'INSERT INTO `event_****_logs` ...
    

    時刻がプライマリキーになってるから重複してる感じのエラーなような。
    ログとかセッションとか重複しやすい感じがします。

    念のためmysqldumpのオプションをみたものの、
    --skip-optは入ってないのでoptが勝手について–add-drop-tableは有効なはず。

    MYDUMP_PAR='--single-transaction --dump-slave=2 --routines --include-master-host-port --all-databases'
    

    http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

    データ投入後にreset slaveしてログファイルとポジション合わせてstart slaveするなど手順には問題がないように見えました。

    お客さまに重複エントリは全部skipしていいか確認いただいたところ
    Insertでプライマリキーが被ってるのは大丈夫なのかは別途開発側で確認でとりあえずskipという話に。
    (対象がサービスで使用していないいので復旧優先ということだったと思います。不整合が気になるならマスタからdump撮り直すのが良いです。)

    ・エラーのクエリをskipする方法
    1つだけなら、

     SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    

    ですがいっぱいでてくる場合は
    Last_SQL_Errno: 1062
    こちらのエラー番号を指定してスキップ。重複エントリを全部スキップするということです。

    ...