Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  MySQL Cluster レプリケーションを使用したフェイルオーバーの実装

18.6.8 MySQL Cluster レプリケーションを使用したフェイルオーバーの実装

プライマリクラスタのレプリケーションプロセスが失敗した場合、セカンダリレプリケーションチャネルに切り替えることができます。次に、この実現に必要なステップについて説明します。

  1. 最新のグローバルチェックポイント (GCP) の時間を取得します。すなわち、スレーブクラスタの ndb_apply_status テーブルから最新のエポックを指定する必要があり、これは次のクエリーを使用して特定できます。

    mysqlS'> SELECT @latest:=MAX(epoch)
          ->        FROM mysql.ndb_apply_status;
  2. ステップ 1 で示したクエリーから得た情報を使用して、マスタークラスタの ndb_binlog_index テーブルから対応するレコードを取得します。

    MySQL Cluster NDB 7.3 では、次のクエリーを使用すると、マスターの ndb_binlog_index テーブルから必要なレコードを取得できます。

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

    これらは、プライマリレプリケーションチャネルでの障害発生後に、マスターに保存されたレコードです。ここでは、ユーザー変数 @latest を使用して、ステップ 1 で取得した値を表します。もちろん、ある mysqld インスタンスが、ほかのサーバーインスタンスに設定されたユーザー変数には直接アクセスできません。これらの値は、手動で 2 番目のクエリーに、またはアプリケーションコードにプラグインする必要があります。

    重要

    START SLAVE を実行する前に、スレーブ mysqld--slave-skip-errors=ddl_exist_errorsで起動されていることを確認します。そうしないと、レプリケーションが重複 DDL エラーで停止する可能性があります。

  3. これで、セカンダリスレーブサーバーで次のクエリーを実行して、セカンダリチャネルの同期を取ることができるようになります。

    mysqlS'> CHANGE MASTER TO
          ->     MASTER_LOG_FILE='@file',
          ->     MASTER_LOG_POS=@pos;

    再度ユーザー変数 (この場合は @file@pos) を使用して、ステップ 2 で取得され、ステップ 3 で適用される値を表します。実際には、これらの値を手動で挿入するか、関与する両方のサーバーにアクセスできるアプリケーションコードを使用して挿入する必要があります。

    注記

    @file'/var/log/mysql/replication-master-bin.00001' などの文字列値であるため、SQL またはアプリケーションコードで使用するときは、引用符で囲む必要があります。ただし、@pos で表される値は引用符で囲む必要はありません。通常、MySQL は文字列を数字に変換しようとしますが、この場合は例外です。

  4. これで、セカンダリスレーブの mysqld で適切なコマンドを発行して、セカンダリチャネルでレプリケーションを開始できるようになりました。

    mysqlS'> START SLAVE;

セカンダリレプリケーションチャネルがアクティブになったら、プライマリの不具合を調べて、修復できます。これを行うために必要な的確なアクションは、プライマリチャネルで失敗した原因によって異なります。

警告

セカンダリレプリケーションチャネルは、プライマリレプリケーションチャネルの停止時や停止した場合にのみ、起動されます。複数のレプリケーションチャネルを同時に実行すると、不要な重複レコードがレプリケーションスレーブで作成される可能性があります。

障害が 1 台のサーバーに限定される場合、M から S' に、または M' から S に、(論理的には) 複製できますが、まだ検証されていません。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.