レプリケーション プロセスは、マスタのソース
テーブルとマスタの複製テーブルが異なるエンジンを使用しているかどうかを重視しません。実際には、システム変数
storage_engine
と
table_type
は複製されません。
このレプリケーション
プロセスでの優位性を異なるエンジン
タイプでのレプリケーション
シナリオに役立てることができます。たとえば、スケール
アウトのシナリオ
(項5.3.3. 「スケールアウトのレプリケーション」 参照)
では、通常、トランザクション機能をマスタの
InnoDB
テーブルに使いますが、データがリード
オンリーということから、トランザクション
サポートを必要としないスレーブの
MyISAM
を使用できます。データ
ロギングの環境でレプリケーションの場合には、スレーブの
Archive
ストレージ
エンジンを使うことも可能です。
イニシャル レプリケーション プロセスをどのように設定するかによって、マスタとスレーブでエンジンが異なる場合の設定は異なります。
マスタのデータベース
スナップショットを作成する場合は、mysqldump
を使用して、ダンプ
テキストを操作し、それぞれのテーブルで使用しているエンジン
タイプを変更します。
mysqldump
の別の利点としては、スレーブで使いたくないエンジン
タイプを無効にすることができ、これは、スレーブでデータを起こす前にダンプします。
たとえば、InnoDB
エンジンを無効にするには、--skip-innodb
オプションをスレーブに追加します。
特定のエンジンがない場合、MySQLでは通常、MyISAM
などのデフォルトのエンジン
タイプを使います。この方法でそのほかのエンジンを無効にする場合には、そのエンジンをサポートする特別のバイナリをスレーブを使うように構成してください。
生データ
ファイルをスレーブ集団で使用している場合は、イニシャルのテーブル型を変更することはできません。
その場合は、スレーブが稼動してから、テーブル型の変更に
ALTER TABLE
を使います。
マスタにテーブルがない時点でのマスタ・スレーブ レプリケーション設定には、新たなテーブルを作成するときのエンジン タイプの指定を避けてください。
レプリケーション ソリューションをすでに実行している場合に既存のテーブルを別のエンジン タイプに変更するには、次のステップに従います。
レプリケーション アップデートの実行からスレーブを停止する。
mysql> STOP SLAVE;
これにより、中断することなく、エンジン タイプの変更が可能になります。
エンジン
タイプを変更するテーブルのそれぞれで、ALTER
TABLE ...
Engine='
を実行する。
enginetype
'
スレーブのレプリケーションを再開する。
mysql> START SLAVE;
storage_engine
と
table_type
変数は複製されませんが、エンジンの仕様を含む
CREATE TABLE
および ALTER
TABLE
ステートメントはスレーブに正確に複製されます。CSV
テーブルがある場合には次を実行します。
mysql> ALTER TABLE csvtable Engine='MyISAM';
例示のステートメントはスレーブに複製され、そのスレーブのエンジン
タイプは MyISAM
になります。CSV
のほかに、スレーブのテーブル型をエンジンにすでに変更していた場合も同様です。
マスタとスレーブでエンジンに違いを付ける場合に、新たなテーブルを作成するときは、マスタの
storage_engine
変数を扱うときには十分に注意してください。
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
次のフォーマットを使用します。
mysql> SET storage_engine=MyISAM; mysql> CREATE TABLE tablea (columna int);
複製後、storage_engine
変数は無視され、CREATE TABLE
ステートメントはスレーブのデフォルト
エンジン タイプで実行になります。