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