このトピックでは、PolarDB for MySQLからバイナリログレコードをリモートで取得し、mysqlbinlogを使用してバイナリログレコードを解析する方法について説明します。
バイナリログレコードを取得するポリシー
Endpoint | ポリシー |
| プライマリノードからバイナリログレコードを取得します。 説明 クラスターエンドポイントの設定方法の詳細については、「PolarProxyの設定」をご参照ください。 |
読み取り専用ノードにのみ関連付けられているカスタムクラスターエンドポイント | 読み取り専用ノードの1つからバイナリログレコードを取得します。 説明 クラスターは、次のいずれかの要件を満たす必要があります。
それ以外の場合、 バージョンの表示とクラスターのアップグレード方法の詳細については、「マイナーバージョンの更新」をご参照ください。 |
バイナリログレコードをリモートで取得する
PolarDB for MySQLのクラスターのバイナリログを有効にします。 詳細については、「バイナリログの有効化」をご参照ください。
説明バイナリログレコードを表示および取得する前に、クラスターのバイナリログを有効にする必要があります。 それ以外の場合、
[バイナリログを使用していません]
エラーメッセージが返されます。ローカルサーバーにMySQLをインストールします。
MySQLクライアントを使用してPolarDBクラスターに接続します。 詳細については、「クラスターへの接続」をご参照ください。 このトピックの例では、Linux OSが使用されています。
クラスターのバイナリログレコードを表示するには、PolarDBクラスターに接続されているクライアントで次のステートメントを実行します。
表示バイナリログ;
次のクエリ結果が返されます。
+ ------------------ + --------- | Log_name | File_size | + ------------------ + ---------- | mysql-bin.000005 | 2639 | + ------------------ + ---------- 1行セット (0.00秒)
クライアントで次のコマンドを実行して、バイナリログレコードを取得し、ログレコードをローカルサーバーに保存します。
次の例で使用するOSはLinux OSです。 次のコマンドを実行してバイナリログレコードを取得し、ログレコードをローカルサーバーに保存する前に、exitコマンドを実行してMySQLを終了する必要があります。
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
: バイナリログファイルのログレコードを解析します。
次の図に示す例は、バイナリログレコードの詳細を示しています。
バイナリログレコードの解析
バイナリログレコードの解析方法の詳細については、「バイナリログレコードの解析」をご参照ください。
よくある質問
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
パラメーターが指定されていることを確認してください。読み取り専用ノードからバイナリログレコードをクエリすると、
プライマリインスタンスにバイナリログをダンプするだけ
というエラーメッセージが返されるのはなぜですか。クラスターが次のいずれかの要件を満たしていることを確認します。
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パラメーターで指定された保持期間が満了した後、バイナリログレコードが削除されないのはなぜですか。
バイナリログレコードがスレッドによって読み取り専用ノードから読み取られているときに、そのバイナリログレコードが期限切れになった場合、そのバイナリログレコードはすぐには削除されません。 新しいバイナリログレコードがプライマリノードに書き込まれた後、システムは期限切れのバイナリログレコードが存在するかどうかをチェックします。 期限切れのバイナリログレコードは、読み取り専用ノードのスレッドからアクセスされていない場合、削除されます。