レプリケーションプロセスでは、マスター上のソーステーブルとスレーブ上の複製先テーブルが異なるエンジンタイプを使用しているかどうかは重要ではありません。実際、default_storage_engine
および storage_engine
システム変数は複製されません。
これは、異なるレプリケーションシナリオに異なるエンジンタイプを利用できるという点で、レプリケーションプロセスにいくつかの利点を提供します。たとえば、典型的なスケールアウトシナリオでは (セクション17.3.3「スケールアウトのためにレプリケーションを使用する」を参照してください)、マスター上ではトランザクション機能を利用するために InnoDB
テーブルを使用し、スレーブ上ではデータが読み取られるだけでトランザクションサポートが必要ないので MyISAM
を使用します。データロギング環境でレプリケーションを使用するときは、スレーブ上で Archive
ストレージエンジンを使用することをお勧めします。
マスターおよびスレーブ上で異なるエンジンを構成するかどうかは、最初のレプリケーションプロセスをどのようにセットアップするかに依存します。
-
mysqldump を使用してマスター上のデータベーススナップショットを作成した場合は、ダンプファイルテキストを編集して各テーブルで使用されるエンジンタイプを変更できます。
mysqldump の別の使用方法は、スレーブ上で使用したくないエンジンタイプを無効にしてから、このダンプを使用してスレーブ上にデータを構築することです。たとえば、
FEDERATED
エンジンを無効にするために、--skip-federated
オプションをスレーブ上に追加できます。作成するテーブル用に特定のエンジンが存在しない場合、MySQL はデフォルトエンジンタイプ (通常はMyISAM
) を使用します。(これには、NO_ENGINE_SUBSTITUTION
SQL モードが有効でないことが必要です。)この方法でほかのエンジンを無効にする場合は、必要なエンジンだけをサポートする特別なバイナリを構築してスレーブで使用することを検討することをお勧めします。 ローデータファイル (バイナリバックアップ) を使用してスレーブをセットアップしている場合、最初のテーブル形式を変更できなくなります。代わりに、スレーブが起動したあとに
ALTER TABLE
を使用してテーブルタイプを変更してください。新しいマスター/スレーブレプリケーションセットアップで、マスター上に現在テーブルがない場合は、新しいテーブルを作成するときにエンジンタイプを指定することは避けてください。
レプリケーションソリューションをすでに実行していて、既存のテーブルを別のエンジンタイプに変更する場合は、これらの手順に従ってください。
-
スレーブがレプリケーション更新を実行するのを停止します。
mysql> STOP SLAVE;
これにより、中断なしにエンジンタイプを変更できるようになります。
変更するテーブルごとに
ALTER TABLE ... ENGINE='
を実行します。engine_type
'-
スレーブレプリケーションプロセスを再開します。
mysql> START SLAVE;
default_storage_engine
変数は複製されませんが、エンジン指定を含む CREATE TABLE
および ALTER TABLE
ステートメントはスレーブに正しく複製されます。たとえば、CSV テーブルがある場合はこれを実行します。
mysql> ALTER TABLE csvtable Engine='MyISAM';
上記のステートメントはスレーブに複製され、スレーブ上のエンジンタイプが MyISAM
に変換されます (以前にスレーブ上のエンジンタイプを CSV 以外のエンジンに変更した場合でも)。マスターとスレーブでのエンジンの違いを保持する場合は、新しいテーブルを作成するときに default_storage_engine
変数を慎重に使用してください。たとえば、次の代わりに:
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
この形式を使用してください。
mysql> SET default_storage_engine=MyISAM;
mysql> CREATE TABLE tablea (columna int);
複製されるときに、default_storage_engine
変数は無視され、CREATE TABLE
ステートメントはスレーブ上のデフォルトエンジンを使用してスレーブ上で実行されます。