MySQL 複製は、MyISAM
に対して機能するのと同じように
InnoDB
テーブルに機能します。スレーブ上のストレージ
エンジンがマスタ上の元のストレージ
エンジンと同じではない場合での方法で複製を利用する事も可能です。例えば、スレーブ上の
MyISAM
テーブルに、マスタ上の
InnoDB
テーブルへの修正を複製する事ができます。
マスタに新しいスレーブを設定するには、InnoDB
テーブルの .frm
ファイルと同様に、InnoDB
テーブル スペースのコピーとログ
ファイルのコピーを作成し、そのコピーをスレーブに移動させなければいけません。もし
innodb_file_per_table
変数が有効であれば、.ibd
ファイルもコピーする必要があります。これを行う為の正しい手順については
項13.5.8. 「InnoDB
データベースのバックアップと復旧」 を参照して下さい。
もしマスタか既存スレーブを閉じる事ができるのであれば、InnoDB
テーブル スペースとログ
ファイルの完全なバックアップを取り、それをスレーブの設定の為に利用する事ができます。サーバを停止させずに新しいスレーブを作成するには、非フリー(商業用)
InnoDB
Hot Backup
ツール
を利用する事もできます。
MyISAM
テーブルに対してだけ機能する LOAD TABLE
FROM MASTER
ステートメントを利用して
InnoDB
に複製を設定する事はできません。2つ可能な回避方法があります:
マスタ上のテーブルをダンプし、ダンプ ファイルをスレーブ内にインポートしてください。
LOAD TABLE
を利用して複製を設定する前に、tbl_name
FROM
MASTERALTER
TABLE
をマスタ上で利用し、そして後でマスタ
テーブルを tbl_name
ENGINE=MyISAMInnoDB
に変換する為にALTER TABLE
を利用してください。しかし、定義が損失するのでこれは外部キー制約があるテーブルには利用しないで下さい。
マスタ上で失敗するトランザクションは複製に全く影響を与えません。MySQL
複製は、MySQL がデータを変更する SQL
ステートメントを書き込むバイナリ
ログに基づいています。失敗するトランザクション(例えば、外部キー違反の為、またはロールバックされる為)はバイナリ
ログに書き込まないので、スレーブに送られません。
詳しくは 項12.4.1. 「START
TRANSACTION
、COMMIT
、そして
ROLLBACK
構文」
を参照してください。