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


17.1.2.5 データスナップショットの方法の選択

ソースデータベースに既存のデータが含まれている場合、このデータを各レプリカにコピーする必要があります。 ソースデータベースからデータをダンプするには、様々な方法があります。 次の各セクションでは、使用可能なオプションについて説明します。

データベースをダンプする適切な方法を選択するには、次のいずれかのオプションを選択します:

  • mysqldump ツールを使用して、レプリケートするすべてのデータベースのダンプを作成します。 これは、特に InnoDB を使用する場合に推奨される方法です。

  • データベースがバイナリポータブルファイルに格納されている場合は、RAW データファイルをレプリカにコピーできます。 これは、INSERT ステートメントのリプレイ時にインデックスの更新のオーバーヘッドがスキップされるため、mysqldump を使用して各レプリカにファイルをインポートするよりも効率的です。 InnoDB などのストレージエンジンでは、これはお勧めしません。

  • MySQL Server クローンプラグインを使用して、既存のレプリカからクローンにすべてのデータを転送します。 この方法の使用手順は、セクション5.6.7.6「レプリケーション用のクローニング」 を参照してください。

ヒント

MySQL の複数のインスタンスをデプロイするには、MySQL Shell で MySQL サーバーインスタンスのグループを簡単に管理できるようにする InnoDB クラスタ を使用できます。InnoDB クラスタ は MySQL Group Replication をプログラム環境でラップするため、MySQL インスタンスのクラスタを簡単にデプロイして高可用性を実現できます。 また、InnoDB クラスタ は MySQL Router とシームレスにインタフェースするため、アプリケーションは独自のフェイルオーバープロセスを記述せずにクラスタに接続できます。 ただし、高可用性を必要としない同様のユースケースでは、InnoDB ReplicaSet を使用できます。 MySQL Shell のインストール手順は、here にあります。

17.1.2.5.1 mysqldump を使用したデータスナップショットの作成

既存のソースデータベースにデータのスナップショットを作成するには、mysqldump ツールを使用します。 データダンプが完了したら、レプリケーションプロセスを開始する前に、このデータをレプリカにインポートします。

次の例では、すべてのデータベースを dbdump.db という名前のファイルにダンプし、レプリケーションプロセスを開始するためにレプリカに必要な CHANGE REPLICATION SOURCE TO|CHANGE MASTER TO ステートメントを自動的に追加する --master-data オプションを含めます:

shell> mysqldump --all-databases --master-data > dbdump.db
注記

--master-data を使用しない場合は、別のセッションですべてのテーブルを手動でロックする必要があります。 セクション17.1.2.4「レプリケーションソースのバイナリログ座標の取得」を参照してください。

mysqldump ツールを使用して、特定のデータベースをダンプから除外できます。 ダンプに含めるデータベースを選択する場合は、--all-databases を使用しないでください。 次のいずれかのオプションを選択します:

  • --ignore-table オプションを使用して、データベース内のすべてのテーブルを除外します。

  • --databases オプションを使用してダンプするデータベースのみに名前を付けます。

注記

デフォルトでは、GTID がソース (gtid_mode=ON) で使用されている場合、mysqldump はソース上の gtid_executed セットの GTID をダンプ出力に含めて、レプリカ上の gtid_purged セットに追加します。 特定のデータベースまたはテーブルのみをダンプする場合、mysqldump に含まれる値には、データベースの抑制された部分を変更したトランザクションや、部分ダンプに含まれていないサーバー上のその他のデータベースであっても、ソース上の gtid_executed セット内のすべてのトランザクションの GTID が含まれることに注意してください。 mysqldump --set-gtid-purged オプションの説明を確認して、使用している MySQL Server バージョンのデフォルト動作の結果、およびこの結果が状況に適していない場合の動作の変更方法を確認します。

詳細は、セクション4.5.4「mysqldump — データベースバックアッププログラム」を参照してください。

データをインポートするには、ダンプファイルをレプリカにコピーするか、レプリカにリモート接続するときにソースからファイルにアクセスします。

17.1.2.5.2 ローデータファイルを使用したデータスナップショットの作成

このセクションでは、データベースを構成する RAW ファイルを使用してデータスナップショットを作成する方法について説明します。 複雑なキャッシュまたはロギングアルゴリズムを持つストレージエンジンを使用するテーブルでこの方法を使用するには、完全な「ポイントインタイム」スナップショットを生成するための追加のステップが必要です: 最初のコピーコマンドでは、グローバル読取りロックを取得した場合でも、キャッシュ情報およびロギング更新を除外できます。 ストレージエンジンがこれにどのように反応するかは、そのクラッシュリカバリ能力によります。

InnoDB テーブルを使用する場合、MySQL Enterprise Backup コンポーネントから mysqlbackup コマンドを使用して、一貫性のあるスナップショットを作成できます。 このコマンドは、レプリカで使用されるスナップショットに対応するログ名とオフセットを記録します。 MySQL Enterprise Backup は MySQL Enterprise サブスクリプションの一部として同梱される製品です。 詳細は、セクション30.2「MySQL Enterprise Backup の概要」を参照してください。

この方法は、ソースとレプリカの値が ft_stopword_fileft_min_word_len または ft_max_word_len で異なり、全文インデックスを持つテーブルをコピーしている場合にも確実に機能しません。

前述の例外がデータベースに適用されない場合は、cold backup 手法を使用して、InnoDB テーブルの信頼性のあるバイナリスナップショットを取得: MySQL Server の slow shutdown を実行してから、データファイルを手動でコピーします。

MySQL データファイルが単一のファイルシステムに存在する場合に MyISAM テーブルの RAW データスナップショットを作成するには、cpcopy などのアーカイブツール、scprsync などのリモートコピーツール、または zip または tar、または dump のようなファイルシステムスナップショットツールを使用できます。 特定のデータベースだけを複製する場合、それらのテーブルに関係するファイルだけをコピーします。 InnoDB の場合、innodb_file_per_table オプションを有効にしないかぎり、すべてのデータベースのすべてのテーブルが system tablespace ファイルに格納されます。

次のファイルはレプリケーションには必要ありません:

  • mysql データベースに関連するファイル。

  • レプリカ接続メタデータリポジトリファイル master.info が使用されている場合、このファイルの使用は非推奨になりました (セクション17.2.4「リレーログおよびレプリケーションメタデータリポジトリ」 を参照)。

  • これを使用してレプリカのソースバイナリログ座標を検索する場合は、バイナリログインデックスファイルを除き、ソースリグファイル。

  • リレーログファイル。

InnoDB テーブルを使用しているかどうかに応じて、次のいずれかを選択します:

InnoDB テーブルを使用していて、RAW データスナップショットと最も一貫性のある結果を得るには、プロセス中に次のようにソースサーバーを停止します:

  1. 読取りロックを取得し、ソースステータスを取得します。 セクション17.1.2.4「レプリケーションソースのバイナリログ座標の取得」を参照してください。

  2. 別のセッションで、ソースサーバーを停止します:

    shell> mysqladmin shutdown
  3. MySQL データファイルのコピーを作成します。 次の例では、これを行うための一般的な方法を示します。 この中の 1 つだけを選択する必要があります。

    shell> tar cf /tmp/db.tar ./data
    shell> zip -r /tmp/db.zip ./data
    shell> rsync --recursive ./data /tmp/dbdata
  4. ソースサーバーを再起動します。

InnoDB テーブルを使用していない場合は、次の手順で説明するように、サーバーをシャットダウンせずにソースからシステムのスナップショットを取得できます:

  1. 読取りロックを取得し、ソースステータスを取得します。 セクション17.1.2.4「レプリケーションソースのバイナリログ座標の取得」を参照してください。

  2. MySQL データファイルのコピーを作成します。 次の例では、これを行うための一般的な方法を示します。 この中の 1 つだけを選択する必要があります。

    shell> tar cf /tmp/db.tar ./data
    shell> zip -r /tmp/db.zip ./data
    shell> rsync --recursive ./data /tmp/dbdata
  3. 読み取りロックを獲得したクライアントでは、ロックを解除します。

    mysql> UNLOCK TABLES;

データベースのアーカイブまたはコピーを作成したら、レプリケーションプロセスを開始する前に各レプリカにファイルをコピーします。


関連キーワード:  ソース, データベース, データ, テーブル, スナップショット, InnoDB, バイナリ, 方法, 作成, GTID