レプリケーションプロセスでは、ソース上の元のテーブルとレプリカ上のレプリケートされたテーブルが異なるストレージエンジンタイプを使用するかどうかは関係ありません。 実際、default_storage_engine
システム変数はレプリケートされません。
これは、異なるレプリケーションシナリオに異なるエンジンタイプを利用できるという点で、レプリケーションプロセスにいくつかの利点を提供します。 たとえば、典型的なスケールアウトシナリオ (セクション17.4.5「スケールアウトのためにレプリケーションを使用する」 を参照) では、トランザクション機能を利用するためにソースで InnoDB
テーブルを使用しますが、データの読取りのみであるためトランザクションサポートが不要なレプリカでは MyISAM
を使用します。 データロギング環境でレプリケーションを使用する場合は、レプリカで Archive
ストレージエンジンを使用できます。
ソースとレプリカで異なるエンジンを構成するかどうかは、初期レプリケーションプロセスの設定方法によって異なります:
-
mysqldump を使用してソースにデータベーススナップショットを作成した場合は、ダンプファイルのテキストを編集して、各テーブルで使用されるエンジンタイプを変更できます。
mysqldump の別の方法は、ダンプを使用してレプリカにデータを構築する前に、レプリカで使用しないエンジンタイプを無効にすることです。 たとえば、レプリカに
--skip-federated
オプションを追加して、FEDERATED
エンジンを無効にできます。 作成するテーブルに特定のエンジンが存在しない場合、MySQL はデフォルトのエンジンタイプ (通常はInnoDB
) を使用します。 (これには、NO_ENGINE_SUBSTITUTION
SQL モードが有効でないことが必要です。) この方法で追加のエンジンを無効にする場合は、必要なエンジンのみをサポートするレプリカで使用する特別なバイナリを構築することを検討してください。 RAW データファイル (バイナリバックアップ) を使用してレプリカを設定する場合、初期テーブル形式を変更することはできません。 かわりに、レプリカの起動後に
ALTER TABLE
を使用してテーブルタイプを変更します。現在ソースにテーブルがない新しいソース/レプリカレプリケーション設定の場合は、新しいテーブルの作成時にエンジンタイプを指定しないでください。
レプリケーションソリューションをすでに実行していて、既存のテーブルを別のエンジンタイプに変更する場合は、これらの手順に従ってください。
-
レプリカによるレプリケーション更新の実行を停止します:
mysql> STOP SLAVE; Or from MySQL 8.0.22: mysql> STOP REPLICA;
これにより、中断せずにエンジンタイプを変更できます。
変更するテーブルごとに
ALTER TABLE ... ENGINE='
を実行します。engine_type
'-
レプリケーションプロセスを再度開始します:
mysql> START SLAVE;
または、MySQL 8.0.22 以降では次のようになります:
mysql> START REPLICA;
default_storage_engine
変数はレプリケートされませんが、エンジン仕様を含む CREATE TABLE
および ALTER TABLE
ステートメントはレプリカに正しくレプリケートされることに注意してください。 CSV
テーブルの場合は、次のステートメントを実行します:
mysql> ALTER TABLE csvtable ENGINE='MyISAM';
このステートメントはレプリケートされます。レプリカのテーブルエンジンタイプを以前に CSV
以外のエンジンに変更した場合でも、レプリカのテーブルエンジンタイプは InnoDB
に変換されます。 ソースとレプリカでエンジンの差異を保持する場合は、新しいテーブルの作成時にソースで 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
ステートメントが実行されます。