スレーブの非トランザクションのテーブルを使用して、マスタにトランザクション
テーブルを複製することが可能です。たとえば、InnoDB
マスタ テーブルを MyISAM
スレーブ
テーブルとして複製できます。しかし、これを行う場合、スレーブが
BEGIN
あるいは COMMIT
セグメントの最中に停止した場合は問題が生じます。これは、スレーブが
BEGIN
セグメントの開始時点で再開することに起因します。
トランザクションと非トランザクションのテーブルへ混在した更新が行われる場合には、バイナリ
ログのクエリ順序が正確になり、必要とされるすべてのクエリがバイナリ
ログに書き込まれます。ROLLBACK
の場合でも同様です。しかし、最初のトランザクションが完了する前に
2 番目の接続が非トランザクション
テーブルの更新をすると、ステートメントは順番が乱れた状態での記録になります。これは、最初の接続でのトランザクションの状況に関わらず、2
番目の接続の更新実行と書き込みが同時に発生することに起因します。
MyISAM
テーブルの非トランザクション性により、部分的にテーブルを更新しエラー
コードを返すコマンドを保持することがあります。これは、挿入する複数行にキー制約に違反してる、または長文の更新クエリで数行を更新したあとに落とされた場合に起こります。これがマスタで発生した場合、スレーブ
スレッドは終了し、データベース
アドミニストレータの指示を待機します。エラー
コードが正当で、クエリを実行したときに同一のエラー
コードがスレーブに返る場合はこの限りではありません。このエラー
コード検証の動作が望まれるものではない場合、--slave-skip-errors
オプションで固有化またはすべてのエラーをマークアウト
(無視) できます。
トランザクションと非トランザクションの両テーブルを更新するレプリケーション環境では、このトランザクションは行わないでください。