すべてのプロダクト
Search
ドキュメントセンター

PolarDB:PolarDB for MySQLクラスターのバイナリログをリモートで取得して解析する

最終更新日:May 24, 2024

このトピックでは、PolarDB for MySQLからバイナリログレコードをリモートで取得し、mysqlbinlogを使用してバイナリログレコードを解析する方法について説明します。

バイナリログレコードを取得するポリシー

Endpoint

ポリシー

  • プライマリエンドポイント

  • デフォルトのクラスターエンドポイント

  • プライマリノードに関連付けられているカスタムクラスターエンドポイント

プライマリノードからバイナリログレコードを取得します。

説明

クラスターエンドポイントの設定方法の詳細については、「PolarProxyの設定」をご参照ください。

読み取り専用ノードにのみ関連付けられているカスタムクラスターエンドポイント

読み取り専用ノードの1つからバイナリログレコードを取得します。

説明

クラスターは、次のいずれかの要件を満たす必要があります。

  • PolarDB for MySQLのクラスターはMySQL 8.0を実行し、クラスターのリビジョンバージョンはV8.0.1.1.12以降です。

  • PolarDB for MySQLのクラスターはMySQL 5.7を実行し、クラスターのリビジョンバージョンはV5.7.1.0.12以降です。

それ以外の場合、プライマリインスタンスでのバイナリログのダンプのみ許可というエラーメッセージが返されます。

バージョンの表示とクラスターのアップグレード方法の詳細については、「マイナーバージョンの更新」をご参照ください。

バイナリログレコードをリモートで取得する

  1. PolarDB for MySQLのクラスターのバイナリログを有効にします。 詳細については、「バイナリログの有効化」をご参照ください。

    説明

    バイナリログレコードを表示および取得する前に、クラスターのバイナリログを有効にする必要があります。 それ以外の場合、[バイナリログを使用していません] エラーメッセージが返されます。

  2. ローカルサーバーにMySQLをインストールします。

  3. MySQLクライアントを使用してPolarDBクラスターに接続します。 詳細については、「クラスターへの接続」をご参照ください。 このトピックの例では、Linux OSが使用されています。 1

  4. クラスターのバイナリログレコードを表示するには、PolarDBクラスターに接続されているクライアントで次のステートメントを実行します。

    表示バイナリログ;

    次のクエリ結果が返されます。

    + ------------------ + ---------
    | Log_name | File_size |
    + ------------------ + ----------
    | mysql-bin.000005 | 2639 |
    + ------------------ + ----------
    1行セット (0.00秒) 
  5. クライアントで次のコマンドを実行して、バイナリログレコードを取得し、ログレコードをローカルサーバーに保存します。

    次の例で使用するOSはLinux OSです。 次のコマンドを実行してバイナリログレコードを取得し、ログレコードをローカルサーバーに保存する前に、exitコマンドを実行してMySQLを終了する必要があります。 2

    mysqlbinlog -u <ユーザー名> -p <パスワード> -h <エンドポイント> -- リモートサーバーからの読み取り -- 生mysql-bin ******

    例:

    mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com -- 読み取り元-リモートサーバー -- raw mysql-bin.000005

    パラメーター

    説明

    値の例

    -u

    PolarDB for MySQLのクラスターへの接続に使用されるアカウントの名前。 アカウントの作成方法の詳細については、「データベースアカウントの作成と管理」をご参照ください。

    test_api

    -p

    アカウントのパスワードを入力します。 パスワードを指定しない場合は、上記のコマンドを実行した後にパスワードを入力する必要があります。

    TestPwd123

    -h

    PolarDB for MySQLのクラスターのパブリックエンドポイント。

    説明
    • PolarDB for MySQLクラスターのエンドポイントがデフォルトのポート3306を使用している場合、ポート番号を指定する必要はありません。 それ以外の場合は、指定した値の末尾にポート番号を指定する必要があります。

    • バイナリログレコードをリモートで取得するには、パブリックプライマリエンドポイントまたはパブリッククラスターエンドポイントにのみ接続できます。 クラスターエンドポイントは、デフォルトのクラスターエンドポイントまたはカスタムクラスターエンドポイントにすることができます。 パブリックエンドポイントを申請する方法の詳細については、「クラスターのエンドポイントの管理」をご参照ください。

    test-polardb.rwlb.rds.aliyuncs.com

    -- raw

    バイナリログレコードが元の形式で出力されることを指定します。 解析されたデータは表示されません。

    -- raw

    mysql-bin.******

    show binary log records; ステートメントを実行して取得するバイナリログファイルの名前。 名前はLog_nameフィールドに表示されます。

    mysql-bin.000005

mysqlbinlogを使用したバイナリログレコードの表示と解析

  • 次のコマンドを実行して、mysqlbinlogを使用してバイナリログファイル内のログレコードを表示します。

    mysqlbinlog -vv -- base64-output=decode-rows mysql-bin.****** | もっと見る
    説明
    • -vv: SQL文と注釈を照会します。

    • -- base64-output=decode-rows: バイナリログファイルのログレコードを解析します。

    次の図に示す例は、バイナリログレコードの詳細を示しています。

    3

  • バイナリログレコードの解析

    バイナリログレコードの解析方法の詳細については、「バイナリログレコードの解析」をご参照ください。

よくある質問

  • show binary log records; ステートメントを実行した後に、エラーメッセージYou are not using binary loggingが返されるのはなぜですか。

    バイナリログ機能が有効になっていない場合、エラーメッセージが返されます。 デフォルトでは、PolarDBクラスターのバイナリログ機能は無効になっています。 この問題を解決するには、必ずバイナリログを有効にしてください。 詳細については、「バイナリログの有効化」をご参照ください。

    説明

    バイナリログを有効または無効にすると、クラスターが自動的に再起動します。 その後、新しいパラメーター設定が有効になります。 オフピーク時にバイナリログを有効または無効にし、アプリケーションがクラスターに自動的に再接続できるようにすることをお勧めします。

  • バイナリログレコードをリモートで取得すると、次のいずれかのエラーメッセージが返されるのはなぜですか。

    エラー: Log_eventのエラー::read_log_event(): 'Sanity check failed '、data_len: 151、event_type: 35
    エラー: オフセット120でエントリを読み取れませんでした: ログ形式のエラーまたは読み取りエラー。
    エラー: Goterrorreadingpacketfromserver: 'スレーブは、マスターがログに設定されているチェックサムでレプリケーションイベントを処理できません。

    mysqlbinlogのバージョンが必要なバージョンより前の場合、上記のいずれかのエラーメッセージが返される可能性があります。 mysqlbinlogのバージョンを確認してください。 バイナリログレコードをリモートで取得する前に、mysqlbinlogを新しいバージョンに更新することを推奨します。 たとえば、V3.3を使用しているときに上記のエラーメッセージが返された場合は、mysqlbinlogをV3.4にアップグレードできます。

  • 取得したバイナリログレコードが解析されないのはなぜですか?

    バイナリログレコードを照会するときに -- base64-output=decode-rowsパラメーターを指定しないと、返されたバイナリログレコードは解析されません。 mysqlbinlogを使用してバイナリログレコードをクエリする場合は、-- base64-output=decode-rowsパラメーターが指定されていることを確認してください。

    3

  • 読み取り専用ノードからバイナリログレコードをクエリすると、プライマリインスタンスにバイナリログをダンプするだけというエラーメッセージが返されるのはなぜですか。

    クラスターが次のいずれかの要件を満たしていることを確認します。

    • PolarDB for MySQLのクラスターはMySQL 8.0を実行し、クラスターのリビジョンバージョンはV8.0.1.1.12以降です。

    • PolarDB for MySQLのクラスターはMySQL 5.7を実行し、クラスターのリビジョンバージョンはV5.7.1.0.12以降です。

    そうしないと、読み取り専用ノードからバイナリログレコードを取得できません。 バージョンの表示とクラスターのアップグレード方法の詳細については、「マイナーバージョンの更新」をご参照ください。

  • 読み取り専用ノードからバイナリログレコードをクエリすると、プライマリノードから取得した結果と結果が異なるのはなぜですか。

    PolarDBでは、プライマリノードと読み取り専用ノードでバイナリログレコードを共有できます。 プライマリノードのバイナリログレコードが読み取り専用ノードに同期された後、読み取り専用ノードから同じバイナリログレコードを取得できます。 同期レイテンシが発生した場合、読み取り専用ノードは、プライマリノードに新しく書き込まれたバイナリログレコードを読み取ることができない可能性があります。 ほとんどの場合、ソースデータのサイズが小さい場合、同期レイテンシは低くなります。

  • binlog_expire_logs_secondsパラメーターで指定された保持期間が満了した後、バイナリログレコードが削除されないのはなぜですか。

    バイナリログレコードがスレッドによって読み取り専用ノードから読み取られているときに、そのバイナリログレコードが期限切れになった場合、そのバイナリログレコードはすぐには削除されません。 新しいバイナリログレコードがプライマリノードに書き込まれた後、システムは期限切れのバイナリログレコードが存在するかどうかをチェックします。 期限切れのバイナリログレコードは、読み取り専用ノードのスレッドからアクセスされていない場合、削除されます。