このトピックでは、PolarDB for MySQLクラスターのバイナリログファイルをリモートで取得し、mysqlbinlogを使用してファイルを表示および解析する方法について説明します。
バイナリログファイルを取得するポリシー
接続方法 | バイナリログファイルを取得するポリシー |
| プライマリノードからバイナリログファイルを取得します。 説明 クラスターエンドポイントの設定方法の詳細については、「PolarProxyの設定」をご参照ください。 |
読み取り専用ノードにのみ関連付けられているカスタムクラスターエンドポイント | 読み取り専用ノードの1つからバイナリログファイルを取得します。 説明 ポリシーが確実に有効になるように、クラスターが次のいずれかのデータベースエンジンバージョンを実行していることを確認します。
クラスターが要件を満たしていない場合、読み取り専用ノードからバイナリログファイルを取得しようとすると、 クラスターのデータベースエンジンバージョンを表示および更新する方法の詳細については、「マイナーバージョンの更新」をご参照ください。 |
バイナリログファイルをリモートで取得する
PolarDB for MySQLクラスターのバイナリログを有効にします。 詳細については、「バイナリログの有効化」をご参照ください。
説明PolarDB for MySQLクラスターのバイナリログファイルにアクセスして取得するには、まずクラスターのバイナリログを有効にする必要があります。 バイナリログが無効になっている場合、バイナリログ関連の操作を実行しようとすると、
[バイナリログを使用していません]エラーメッセージが表示されます。ローカルサーバーにMySQLクライアントをインストールします。
MySQLクライアントからPolarDBクラスターに接続します。 詳細については、「データベース接続」をご参照ください。 次の例では、Linuxオペレーティングシステムが使用されています。
MySQLクライアントで次のステートメントを実行して、PolarDBクラスターのバイナリログファイルを表示します。
show binary logs;サンプル結果:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec)MySQLクライアントで次のコマンドを実行して、バイナリログファイルを取得し、ファイルをサーバーに保存します。
この例では、MySQLクライアントはLinuxオペレーティングシステムで実行されます。 次のコマンドを実行してバイナリログファイルを取得し、ファイルをローカルサーバーに保存する前に、exitコマンドを実行してMySQLを終了する必要があります。
mysqlbinlog -u<Username> -p<Password> -h<Endpoint> --read-from-remote-server --raw mysql-bin.******サンプルコマンド:
mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005パラメーター
説明
例
-uPolarDB for MySQLクラスターのデータベースアカウント名。 データベースアカウントの作成方法の詳細については、「データベースアカウントの作成と管理」をご参照ください。
test_api-pデータベースアカウントのパスワードを設定します。 コマンドでパスワードを指定しない場合は、コマンドの実行後にパスワードを入力する必要があります。
TestPwd123-hPolarDB for MySQLクラスターのプライベートまたはパブリックエンドポイント。
説明クラスターのエンドポイントがデフォルトのポート番号を使用している場合、ポート番号を指定する必要はありません。 それ以外の場合は、エンドポイントの後にポート番号を指定する必要があります。
PolarDB for MySQLクラスターがサーバーと同じリージョンおよび仮想プライベートクラウド (VPC) で実行されている場合、プライベートエンドポイントを選択します。 たとえば、アクセスするサーバーとクラスターが中国 (杭州) リージョンにあり、同じVPCで実行されている場合、接続にプライベートエンドポイントを使用することを推奨します。 これにより、安全で効率的なアクセス体験が保証されます。
他のシナリオでは、パブリックエンドポイントを使用します。 パブリックエンドポイントを申請する方法の詳細については、「クラスターのエンドポイントの管理」をご参照ください。
test-polardb.rwlb.rds.aliyuncs.com-- rawバイナリログファイル内のデータを元の未処理の形式で表示することを指定します。
-- rawmysql-bin.******SHOW binary LOGS;ステートメントを実行したときに取得されるバイナリログファイルの名前。 名前はLog_nameフィールドに表示されます。mysql-bin.000005
mysqlbinlogを使用してバイナリログファイルを表示および解析する
次のコマンドを実行して、mysqlbinlogを使用してバイナリログファイルを表示します。
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more説明-vv: 実行されたSQL文およびその他の変更に関する詳細情報を表示します。-- base64-output=デコード行: バイナリログファイルを解析します。バイナリログファイルの解析の失敗などの問題を回避するために、PolarDB for MySQLクラスターのデータベースエンジンと同じMySQLバージョンを使用することを推奨します。
次の図に示す例は、バイナリーログファイルの詳細情報を示しています。

バイナリログファイルの解析
バイナリログファイルの解析方法については、「バイナリログファイルの解析」をご参照ください。
よくある質問
SHOW binary LOGS;ステートメントを実行した後にYou are not using BINARY loggingエラーメッセージが表示されるのはなぜですか。デフォルトでは、PolarDBクラスターのバイナリログは無効になっています。 クラスターのバイナリログを有効にしてください。
説明バイナリログを有効または無効にすると、クラスターが自動的に再起動し、設定が有効になります。 オフピーク時にバイナリログを有効または無効にし、アプリケーションがクラスターに自動的に再接続できるようにすることをお勧めします。
バイナリログファイルをリモートで取得できないのはなぜですか? 次のいずれかのエラーメッセージが表示されるのはなぜですか?
ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 151, event_type: 35 ERROR: Could not read entry at offset 120: Error in log format or read error. ERROR: Goterrorreadingpacketfromserver: 'Slave can not handle replication events with the checksum that master is configured to log;mysqlbinlogのバージョンが必要なバージョンより前の場合は、上記のいずれかのエラーメッセージが表示されることがあります。 mysqlbinlogのバージョンを確認してください。 バイナリログファイルをリモートで取得する前に、mysqlbinlogを新しいバージョンに更新することを推奨します。 たとえば、V3.3を使用しているときに上記のいずれかのエラーメッセージが返された場合、mysqlbinlogをV3.4にアップグレードできます。
バイナリログファイルをリモートで取得できないのはなぜですか? 次のエラーメッセージが表示されるのはなぜですか?
ERROR: Failed on connect: Lost connection to MySQL server at 'reading initial communication packet', system error: 104このエラーメッセージは通常、MySQLサーバーへの接続が確立できないことを示します。 次の側面から問題をトラブルシューティングできます。
ネットワーク接続。 ネットワーク接続が正常かどうかを確認し、PolarDBクラスターにアクセスできることを確認することを推奨します。
クラスターホワイトリストの設定。 ローカルIPアドレスがクラスターのホワイトリストに追加されているかどうかを確認することを推奨します。 ローカルIPアドレスがクラスターのホワイトリストに追加されているかどうかを確認する方法の詳細については、「IPホワイトリストの設定」をご参照ください。
データベース設定。 ローカルMySQLサーバーがデータベースに接続できるかどうかを確認し、データベースに正常にアクセスできることを確認することを推奨します。
取得したバイナリログファイルが解析されないのはなぜですか?
mysqlbinlogを使用してバイナリログファイルを表示するときに
-- base64-output=decode-rowsパラメーターを設定しないと、返されたバイナリログファイルは解析されません。 mysqlbinlogを使用してバイナリログファイルを表示する場合は、必ず-- base64-output=decode-rowsパラメーターを設定してください。
読み取り専用ノードからバイナリログファイルを取得しようとすると、
プライマリインスタンスにバイナリログファイルをダンプするのを許可するというエラーメッセージが表示されるのはなぜですか。バイナリログファイルは、クラスターが次のいずれかのデータベースエンジンバージョンを実行している場合にのみ、読み取り専用ノードから取得できます。
リビジョンバージョンが8.0.1.1.12以降のPolarDB for MySQL 8.0。
リビジョンバージョンが5.7.1.0.12以降のPolarDB for MySQL 5.7。
それ以外の場合は、読み取り専用ノードからバイナリログファイルを取得できません。 クラスターのデータベースエンジンバージョンを表示および更新する方法の詳細については、「マイナーバージョンの更新」をご参照ください。
読み取り専用ノードから取得したバイナリログが、プライマリノードから取得したバイナリログと矛盾することがあるのはなぜですか。
プライマリノードと読み取り専用ノードで構成されるPolarDBクラスターでは、プライマリノードはバイナリログファイルを読み取り専用ノードに同期して、データの一貫性を確保します。 同期レイテンシが発生した場合、読み取り専用ノードは、プライマリノードに新しく書き込まれたバイナリログファイルを読み取ることができない場合があります。 ほとんどの場合、ソースデータのサイズが小さい場合、同期レイテンシは低くなります。
binlog_expire_logs_secondsパラメーターで指定したファイルの保存期間が経過してもバイナリログファイルが削除されないのはなぜですか。
バイナリログファイルがスレッドによって読み取り専用ノードから読み取られている間に期限切れになった場合、バイナリログファイルはすぐには削除されません。 新しいバイナリログファイルがプライマリノードに書き込まれた後、システムは期限切れのバイナリログファイルが存在するかどうかを確認します。 期限切れのバイナリログファイルが読み取り専用ノードのスレッドからアクセスされていない場合、期限切れのバイナリログファイルは削除されます。