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


MySQL 8.0 リファレンスマニュアル  /  ...  /  NDB Cluster レプリケーションによる NDB Cluster バックアップ

23.6.9 NDB Cluster レプリケーションによる NDB Cluster バックアップ

このセクションでは、NDB Cluster レプリケーションを使用してバックアップを作成し、そこから復元する方法について説明します。 レプリケーションサーバーは、前に説明したとおりにすでに構成されたものとします (セクション23.6.5「NDB Cluster のレプリケーションの準備」およびその直後のセクションを参照してください)。 これがすでに行われている場合、バックアップを作成してそのバックアップからリストアする手順は次のとおりです。

  1. バックアップを開始するには、2 つの異なる方法があります。

    • 方法 A.  この方法では、レプリケーションプロセスを開始する前に、ソースサーバーでクラスタバックアッププロセスが有効になっている必要があります。 これを行うには、my.cnf file[mysql_cluster]セクションに次の行を含めます。ここで、management_host はソースクラスタの NDB 管理サーバーの IP アドレスまたはホスト名、port は管理サーバーのポート番号です:

      ndb-connectstring=management_host[:port]
      注記

      ポート番号は、デフォルトのポート (1186) が使用されていない場合にのみ、指定する必要があります。 NDB Cluster でのポートおよびポート割り当ての詳細は、セクション23.2.3「NDB Cluster の初期構成」 を参照してください。

      この場合、レプリケーションソースで次のステートメントを実行してバックアップを開始できます:

      shellS> ndb_mgm -e "START BACKUP"
    • 方法 B.  my.cnf ファイルで、管理ホストを検出する場所が指定されていない場合、START BACKUP コマンドの一部としてこの情報を NDB 管理クライアントに渡すことで、バックアッププロセスを起動できます。 ここで示すように、これを実行できます。ここで、management_hostport は管理サーバーのホスト名とポート番号です。

      shellS> ndb_mgm management_host:port -e "START BACKUP"

      前に述べたようなシナリオの場合 (セクション23.6.5「NDB Cluster のレプリケーションの準備」を参照してください)、これは次のように実行されます。

      shellS> ndb_mgm rep-source:1186 -e "START BACKUP"
  2. オンラインにするレプリカにクラスタバックアップファイルをコピーします。 ソースクラスタの ndbd プロセスを実行している各システムにはクラスタバックアップファイルが配置されており、これらのファイルの all をレプリカにコピーして、リストアを正常に実行する必要があります。 バックアップファイルは、レプリカ管理ホストが存在するコンピュータ上の任意のディレクトリにコピーできます (MySQL および NDB バイナリにそのディレクトリでの読み取りアクセス権がある場合)。 この場合、これらのファイルはディレクトリ/var/BACKUPS/BACKUP-1 にコピーされているものとします。

    レプリカクラスタにソースと同じ数の ndbd プロセス (データノード) がある必要はありませんが、この数は同じにすることを強くお薦めします。 レプリケーションプロセスの早期起動を防ぐには、--skip-slave-start オプションを使用してレプリカを起動する必要があります。

  3. ソースクラスタに存在し、レプリケートするレプリカクラスタにデータベースを作成します。

    重要

    レプリケートする各データベースに対応する CREATE DATABASE (または CREATE SCHEMA) ステートメントは、レプリカクラスタ内の各 SQL ノードで実行する必要があります。

  4. mysql クライアントで次のステートメントを使用して、レプリカクラスタをリセットします:

    mysqlR> RESET SLAVE;
    Or from MySQL 8.0.22:
    mysqlR> RESET REPLICA;
  5. 各バックアップファイルに対して ndb_restore コマンドを順番に使用して、レプリカでクラスタリストアプロセスを開始できるようになりました。 最初に、次に示すように、クラスタメタデータをリストアするための -m オプションを含める必要があります:

    shellR> ndb_restore -c replica_host:port -n node-id \
            -b backup-id -m -r dir

    dir は、バックアップファイルがレプリカに配置されているディレクトリへのパスです。 残りのバックアップファイルに対応する ndb_restore コマンドに、-m オプションを使用しないでください。

    バックアップファイルがディレクトリ/var/BACKUPS/BACKUP-1 にコピーされている 4 つのデータノード (セクション23.6「NDB Cluster レプリケーション」 の図を参照) を含むソースクラスタからリストアする場合、レプリカで実行されるコマンドの適切な順序は次のようになります:

    shellR> ndb_restore -c replica-host:1186 -n 2 -b 1 -m \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 3 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 4 -b 1 \
            -r ./var/BACKUPS/BACKUP-1
    shellR> ndb_restore -c replica-host:1186 -n 5 -b 1 -e \
            -r ./var/BACKUPS/BACKUP-1
    重要

    エポックがレプリカ mysql.ndb_apply_status テーブルに書き込まれるようにするには、この例で ndb_restore を最後に起動するときの -e (または --restore-epoch) オプションが必要です。 この情報がないと、レプリカはソースと適切に同期できません。 (セクション23.4.23「ndb_restore — NDB Cluster バックアップの復元」を参照してください。)

  6. ここで、レプリカの ndb_apply_status テーブルから最新のエポックを取得する必要があります (セクション23.6.8「NDB Cluster レプリケーションによるフェイルオーバーの実装」 を参照):

    mysqlR> SELECT @latest:=MAX(epoch)
            FROM mysql.ndb_apply_status;
  7. 前のステップで取得したエポック値として@latest を使用すると、次に示すクエリーを使用して、正しいバイナリログファイル@file 内の正しい開始位置@pos をソースの mysql.ndb_binlog_index テーブルから取得できます:

    mysqlS> SELECT
         ->     @file:=SUBSTRING_INDEX(File, '/', -1),
         ->     @pos:=Position
         -> FROM mysql.ndb_binlog_index
         -> WHERE epoch >= @latest
         -> ORDER BY epoch ASC LIMIT 1;

    レプリケーショントラフィックが現在存在しない場合は、ソースで SHOW MASTER STATUS を実行し、File カラムに表示されるすべてのファイルの接尾辞が最大値のファイルの出力の Position カラムに表示される値を使用して、この情報を取得できます。 この場合、これがどのファイルであるかを判断し、次のステップで手動で、またはスクリプトを使用して出力を解析して名前を指定する必要があります。

  8. 前のステップで取得した値を使用して、レプリカ mysql クライアントで適切な CHANGE REPLICATION SOURCE TO ステートメント (MySQL 8.0.23) または CHANGE MASTER TO ステートメント (MySQL 8.0.23 より前) を発行できるようになりました:

    mysqlR> CHANGE MASTER TO
         ->     MASTER_LOG_FILE='@file',
         ->     MASTER_LOG_POS=@pos;
    
    Or from MySQL 8.0.23:
    mysqlR> CHANGE REPLICATION SOURCE TO
         ->     SOURCE_LOG_FILE='@file',
         ->     SOURCE_LOG_POS=@pos;
  9. ソースからのデータの読み取りを開始するバイナリログファイルのどの時点からレプリカが認識されるようになったので、次のステートメントを使用してレプリカのレプリケーションを開始できます:

    mysqlR> START SLAVE;
    Or from MySQL 8.0.22:
    mysqlR> START REPLICA;

2 つ目のレプリケーションチャネルでバックアップおよびリストアを実行するには、必要に応じて、セカンダリソースおよびレプリカのホスト名と ID をプライマリソースおよびレプリカサーバーのホスト名と ID に置き換え、それらに対して前述のステートメントを実行して、これらのステップを繰り返す必要があります。

クラスタのバックアップの実行とバックアップからのクラスタのリストアに関する詳細は、セクション23.5.8「NDB Cluster のオンラインバックアップ」を参照してください。


関連キーワード:  NDB, テーブル, ndbinfo, ndb, バックアップ, ノード, 管理, クラスタ, ソース, 構成