web-dev-qa-db-ja.com

MySQL Innodbで `slave_skip_errors`に対して安全なエラーコード

レプリケーション中に無視しても安全なエラーコードを知っている人はいますか?つまり、スレーブはマスターと一貫性を保ちます。

例えば

[mysqld]
slave-skip-errors=1007,1008,1050,1051,1054,1060,1061,1068,1094,1146

省略した例は 121Deadlock found when trying to get lock; try restarting transaction, Error_code: 1213; handler error HA_ERR_LOCK_DEADLOCK)、私には安全に思えますか?

私はこの問題についてほとんどアドバイスを見つけなかったので、stackoverflowには良いアドバイスのようです...

2
KCD

ボールを転がすために、マニュアルから始めましょう

option_mysqld_slave-skip-errors

MySQL 5.7は、エラーコードリスト1007、1008、1050、1051、1054、1060、1061、1068、1094、1146に相当する追加の省略値ddl_exist_errorsをサポートします。

含まれるもの:

  1. エラー:1007 SQLSTATE:HY000(ER_DB_CREATE_EXISTS)

    メッセージ:データベース '%s'を作成できません。データベースが存在しますデータベースがすでに存在するため、データベースの作成に失敗しました。既存のデータベースを本当に置き換えたい場合は、最初にデータベースを削除します。ステートメントでエラーが発生しないで既存のデータベースを保持する場合は、CREATE DATABASEステートメントにIF NOT EXISTS句を追加します。

  2. エラー:1008 SQLSTATE:HY000(ER_DB_DROP_EXISTS)

    メッセージ:データベース '%s'を削除できません;データベースが存在しません

  3. エラー:1050 SQLSTATE:42S01(ER_TABLE_EXISTS_ERROR)

    メッセージ:テーブル '%s'はすでに存在します

  4. エラー:1051 SQLSTATE:42S02(ER_BAD_TABLE_ERROR)

    メッセージ:不明なテーブル '%s'

  5. エラー:1054 SQLSTATE:42S22(ER_BAD_FIELD_ERROR)

    メッセージ: '%s'の不明な列 '%s'

  6. エラー:1060 SQLSTATE:42S21(ER_DUP_FIELDNAME)

    メッセージ:列名 '%s'が重複しています

  7. エラー:1061 SQLSTATE:42000(ER_DUP_KEYNAME)

    メッセージ:キー名 '%s'が重複しています

  8. エラー:1068 SQLSTATE:42000(ER_MULTIPLE_PRI_KEY)

    メッセージ:複数の主キーが定義されています

  9. エラー:1094 SQLSTATE:HY000(ER_NO_SUCH_THREAD)

    メッセージ:不明なスレッドID:%lu

  10. エラー:1146 SQLSTATE:42S02(ER_NO_SUCH_TABLE)

    メッセージ:テーブル '%s。%s'は存在しません

しかし、デイブのコメントを支持して:

通常、スレーブでエラーが発生するとレプリケーションが停止します。これにより、データの不整合を手動で解決できます。このオプションにより、ステートメントがオプション値にリストされているエラーのいずれかを返す場合、スレーブSQLスレッドはレプリケーションを続行します。

エラーが発生する理由を完全に理解していない場合は、このオプションを使用しないでください。レプリケーションセットアップとクライアントプログラムにバグがなく、MySQL自体にもバグがない場合、レプリケーションを停止するエラーは発生しません。このオプションを無差別に使用すると、スレーブがマスターと同期できなくなり、なぜこれが発生したのか理解できなくなります。

1
KCD