MySQL 5.6 リファレンスマニュアル  /  ...  /  異なるマスターおよびスレーブストレージエンジンでレプリケーションを使用する

17.3.2 異なるマスターおよびスレーブストレージエンジンでレプリケーションを使用する

レプリケーションプロセスでは、マスター上のソーステーブルとスレーブ上の複製先テーブルが異なるエンジンタイプを使用しているかどうかは重要ではありません。実際、default_storage_engine および storage_engine システム変数は複製されません。

これは、異なるレプリケーションシナリオに異なるエンジンタイプを利用できるという点で、レプリケーションプロセスにいくつかの利点を提供します。たとえば、典型的なスケールアウトシナリオでは (セクション17.3.3「スケールアウトのためにレプリケーションを使用する」を参照してください)、マスター上ではトランザクション機能を利用するために InnoDB テーブルを使用し、スレーブ上ではデータが読み取られるだけでトランザクションサポートが必要ないので MyISAM を使用します。データロギング環境でレプリケーションを使用するときは、スレーブ上で Archive ストレージエンジンを使用することをお勧めします。

マスターおよびスレーブ上で異なるエンジンを構成するかどうかは、最初のレプリケーションプロセスをどのようにセットアップするかに依存します。

  • mysqldump を使用してマスター上のデータベーススナップショットを作成した場合は、ダンプファイルテキストを編集して各テーブルで使用されるエンジンタイプを変更できます。

    mysqldump の別の使用方法は、スレーブ上で使用したくないエンジンタイプを無効にしてから、このダンプを使用してスレーブ上にデータを構築することです。たとえば、FEDERATED エンジンを無効にするために、--skip-federated オプションをスレーブ上に追加できます。作成するテーブル用に特定のエンジンが存在しない場合、MySQL はデフォルトエンジンタイプ (通常は MyISAM) を使用します。(これには、NO_ENGINE_SUBSTITUTION SQL モードが有効でないことが必要です。)この方法でほかのエンジンを無効にする場合は、必要なエンジンだけをサポートする特別なバイナリを構築してスレーブで使用することを検討することをお勧めします。

  • ローデータファイル (バイナリバックアップ) を使用してスレーブをセットアップしている場合、最初のテーブル形式を変更できなくなります。代わりに、スレーブが起動したあとに ALTER TABLE を使用してテーブルタイプを変更してください。

  • 新しいマスター/スレーブレプリケーションセットアップで、マスター上に現在テーブルがない場合は、新しいテーブルを作成するときにエンジンタイプを指定することは避けてください。

レプリケーションソリューションをすでに実行していて、既存のテーブルを別のエンジンタイプに変更する場合は、これらの手順に従ってください。

  1. スレーブがレプリケーション更新を実行するのを停止します。

    mysql> STOP SLAVE;
    

    これにより、中断なしにエンジンタイプを変更できるようになります。

  2. 変更するテーブルごとに ALTER TABLE ... ENGINE='engine_type' を実行します。

  3. スレーブレプリケーションプロセスを再開します。

    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 ステートメントはスレーブ上のデフォルトエンジンを使用してスレーブ上で実行されます。


User Comments
Sign Up Login You must be logged in to post a comment.