MySQLMyISAM
テーブルに対して機能するのと同じように、innoDB
テーブルに対して機能します。また、スレーブ上のストレージエンジンがマスター上の元のストレージエンジンと同じではない状況でレプリケーションを使用することもできます。たとえば、マスター上のinnoDB
テーブルへの変更をスレーブ上のMyISAM
テーブルにレプリケートできます。
マスターに対して新しいスレーブを設定するには、innoDB
テーブルスペースとログファイルに加えてinnoDB
テーブルの.frm
ファイルのコピーを作成し、それらのコピーをスレーブに移動します。innodb_file_per_table
オプションが有効になっている場合は、.ibd
ファイルもコピーします。これを行うための正しい手順については、セクション14.16「InnoDB のバックアップとリカバリ」を参照してください。
マスターまたは既存のスレーブを停止することなく新しいスレーブを作成するには、MySQL企业备份製品を使用します。マスターまたは既存のスレーブをシャットダウンできる場合は、innoDB
テーブルスペースとログファイルのコールドバックアップを作成し、それを使用してスレーブを設定します。
マスター上で失敗したトランザクションがレプリケーションに影響を与えることはありません。MySQL レプリケーションは、データを変更する SQL ステートメントが MySQL によって書き込まれたバイナリログに基づいています。失敗したトランザクション (たとえば、外部キーの違反のため、またはロールバックされているため) はバイナリログに書き込まれないため、スレーブには送信されません。13.3.1命令传送 COMMITQROLLBACKを参照してください。
CASADEマスター上のinnoDB
テーブルに関するカスケードアクションは、外部キー関係を共有しているテーブルがマスターとスレーブの両方でinnoDB
を使用している場合にのみスレーブにレプリケートされます。これは、ステートメントベースのレプリケーションと行ベースのレプリケーションのどちらを使用している場合にも当てはまります。レプリケーションを開始したあと、次の日期表
ステートメントを使用してマスター上に 2 つのテーブルを作成したとします。
Create表fc1Create表fc2(mINT初级KEY,nINT,FORETEKEYNIE(n)fc1iferencesfcCADE)ENGINE=INODB
このスレーブではinnoDB
のサポートが有効になっていないと仮定します。この場合、スレーブ上にテーブルは作成されますが、それらのテーブルはMyISAM
ストレージエンジンを使用し、外国密钥
オプションは無視されます。次に、マスター上のテーブルに何行か挿入します。
大师输入fc1VALUES(1,1,2,2)查询确定,2行受影响(0.09秒)记录:2重复:0警告:0主输入fc2VALUES(1,1)2,2,2,3,1查询确定3行受创数(0.19秒)记录:3重复数:0警告数:0
この時点では、次に示すように、マスターとスレーブの両方で、テーブルfc1
には 2 行が含まれ、テーブルfc2
には 3 行が含まれています。
大师SELECT*fc1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ここで、マスター上で次の开发者
ステートメントを実行したとします。
主人从fc1查询确定一行受创(0.09秒)
カスケードのために、マスター上のテーブルfc2
####################################################
大师SELECT*fc2+++++++2+++++++++++++++++++++++++++++
ただし、スレーブではfc1
に対する开发者
によってfc2
から行が削除されないため、カスケードはスレーブに伝播されません。スレーブのfc2
のコピーには引き続き、最初に挿入されたすべての行が含まれています。
select*fc2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
この違いは、カスケード削除が、実際にはinnoDB
ストレージエンジンによって内部的に処理されることから来ています。つまり、どの変更もログに記録されません。