MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  異なるソースおよびレプリカのストレージエンジンでのレプリケーションの使用

17.4.4 異なるソースおよびレプリカのストレージエンジンでのレプリケーションの使用

レプリケーションプロセスでは、ソース上の元のテーブルとレプリカ上のレプリケートされたテーブルが異なるストレージエンジンタイプを使用するかどうかは関係ありません。 実際、default_storage_engine システム変数はレプリケートされません。

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

ソースとレプリカで異なるエンジンを構成するかどうかは、初期レプリケーションプロセスの設定方法によって異なります:

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

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

  • RAW データファイル (バイナリバックアップ) を使用してレプリカを設定する場合、初期テーブル形式を変更することはできません。 かわりに、レプリカの起動後に ALTER TABLE を使用してテーブルタイプを変更します。

  • 現在ソースにテーブルがない新しいソース/レプリカレプリケーション設定の場合は、新しいテーブルの作成時にエンジンタイプを指定しないでください。

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

  1. レプリカによるレプリケーション更新の実行を停止します:

    mysql> STOP SLAVE;
    Or from MySQL 8.0.22:
    mysql> STOP REPLICA;

    これにより、中断せずにエンジンタイプを変更できます。

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

  3. レプリケーションプロセスを再度開始します:

    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 ステートメントが実行されます。


関連キーワード:  エンジン, ソース, テーブル, TABLE, ステートメント, バイナリ, 変数, タイプ, ベース, トランザクション