binlog_format=ROW
のときは次の段落の説明は適用されません。なぜなら、その場合は一時テーブルは複製されないためです。これは、スレーブによる計画外シャットダウンの場合、スレーブ上の一時テーブルが失われることがないことを意味します。このセクションの残りは、ステートメントベースまたは混合形式レプリケーションを使用するときにのみ適用されます。ステートメントベース形式を使用して安全にログを記録できる一時テーブルを使用するステートメントでは、binlog_format
が STATEMENT
または MIXED
のときは常に、スレーブ上で複製された一時テーブルを失うことが問題となる可能性があります。行ベースレプリケーションと一時テーブルの詳細は、一時テーブルの行ベースロギングを参照してください。
一時テーブルを使用するときの安全なスレーブシャットダウン スレーブサーバーを停止する場合 (スレーブスレッドだけではなく)、およびスレーブ上でまだ実行されていない更新で使用するために開いている一時テーブルを複製した場合を除いて、一時テーブルは複製されます。スレーブサーバーを停止した場合、これらの更新が必要とする一時テーブルは、スレーブが再起動されたときに使用できなくなっています。この問題を回避するために、一時テーブルが開いている間はスレーブをシャットダウンしないでください。代わりに、次の手順を使用してください。
STOP SLAVE SQL_THREAD
ステートメントを発行します。SHOW STATUS
を使用してSlave_open_temp_tables
変数の値を確認します。値が 0 でない場合は、スレーブ SQL スレッドを
START SLAVE SQL_THREAD
で再起動してから、あとで手順を繰り返します。値が 0 のときは、mysqladmin shutdown コマンドを発行してスレーブを停止します。
一時テーブルとレプリケーションオプション
デフォルトでは、すべての一時テーブルが複製されます。これは、対応する --replicate-do-db
、--replicate-do-table
、または --replicate-wild-do-table
オプションが有効かどうかに関係なく発生します。ただし、--replicate-ignore-table
および --replicate-wild-ignore-table
オプションは一時テーブルで受け付けられます。
ステートメントベースまたは混合形式レプリケーションを使用するときに推奨される操作は、複製したくない一時テーブルに名前を付けるためだけに使用するプリフィクスを指定してから、そのプリフィクスを照合するために --replicate-wild-ignore-table
オプションを使用することです。たとえば、このようなすべてのテーブルに norep
で始まる名前を付けてから (たとえば、norepmytable
、norepyourtable
など)、テーブルが複製されることを回避するために --replicate-wild-ignore-table=norep%
を使用します。