問題の説明
プライマリApsaraDB RDS for MySQLインスタンスからセカンダリまたは読み取り専用RDSインスタンスにデータをレプリケートすると、レプリケーションが中断され、次のエラーメッセージが表示されます。
[エラー] [MY-010584] [Repl] Slave SQL for channel '': Worker 1は、マスターログmysql-bin.XXX、end_log_pos XXXでトランザクション 'XXX' の実行に失敗しました。テーブルXXX.XXXでWrite_rows_v1イベントを実行できませんでした。キー 'xxx. XXX '、Eror_code: 1062; ハンドラーエラーHA_ER_FOR_COUNDUD_PPKEYX; イベント、001062;; mysql-bin.XXX;;;;;; ハンドラーコード: マスター_コード-endpos; ログ_
原因
unique_checksパラメーターは0に設定されています。
unique_checksパラメータの有効値:
1: ApsaraDB RDS for MySQLは、InnoDBテーブル内の一意キーの一意性をチェックします。
0: DMLステートメントによって管理されたデータがバッファプールに格納されていない場合、ApsaraDB RDS for MySQLはディスクのプライマリキーまたは一意キーを読み取り、InnoDBテーブルのセカンダリインデックスの一意性をチェックしません。 この場合、重複した一意のキーを挿入できます。
プライマリRDSインスタンスのunique_checksパラメーターが0に設定され、DMLステートメントで管理されるデータがバッファプールに保存されていない場合、ApsaraDB RDS for MySQLはディスクのプライマリキーまたはユニークキーを読み取り、InnoDBテーブルのセカンダリインデックスの一意性をチェックしません。 この場合、重複する一意のキーをプライマリRDSインスタンスに挿入できます。 セカンダリRDSインスタンスのunique_checksパラメーターが0に設定され、DMLステートメントによって管理されるデータがバッファプールに格納されている場合、ApsaraDB RDS for MySQLは、DMLステートメントが実行されるセカンダリインデックスの一意性をチェックします。 この場合、重複するユニークキーを挿入することはできません。 その結果、複製は中断される。 詳細については、「MySQL bug #106121」をご参照ください。
ソリューション
挿入されたデータが一意のキーの競合を引き起こさないことを確認した場合は、unique_checksパラメーターを0に設定して、データのインポートを高速化できます。
挿入されたデータが一意のキー競合を引き起こす可能性がある場合は、unique_checksパラメーターを1に設定することを推奨します。