このトピックでは、ApsaraDB RDS for MySQLインスタンスのバイナリログファイルをリモートで取得し、mysqlbinlogを使用してファイルを解析する方法について説明します。
以下の点にご注意ください。
インスタンスの設定やデータの変更などのリスクの高い操作を実行する前に、データのセキュリティを確保するために、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認することを推奨します。
ECS (Elastic Compute Service) インスタンスやApsaraDB RDSインスタンスなどのインスタンスの設定またはデータを変更する前に、インスタンスのスナップショットを作成するか、バックアップを有効にすることを推奨します。 たとえば、ApsaraDB RDSインスタンスのログバックアップを有効にできます。
Alibaba Cloud管理コンソールで機密情報に対する権限を付与した場合、または機密情報を送信した場合は、できるだけ早い機会に機密情報を変更することを推奨します。 機密情報には、ユーザー名とパスワードが含まれます。
手順
次の手順を実行して、バイナリログファイルをリモートで取得して解析できます。
バイナリログファイルの取得
ビジネス要件に基づいて、バイナリログファイルを取得する方法を選択する必要があります。
方法1: (推奨) ApsaraDB RDSコンソールからのログファイルのダウンロード
ApsaraDB RDSコンソールからログファイルをダウンロードします。 詳細については、「ApsaraDB RDS For MySQLインスタンスのバックアップファイルのダウンロード」をご参照ください。
方法2: バイナリログファイルをリモートで取得
クライアントをRDSインスタンスに接続します。 詳細については、「データベースクライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。
次のSQL文を実行して、
Log_name
の値を表示し、logs
テーブルに記録します。 値は、mysql-bin.xxx
などのバイナリログファイルの名前です。表示バイナリログ;
出力のサンプルを次に示します。
mysql> バイナリログを表示します。+ ------------------ + ---------- | Log_name | File_size | + ------------------ + ---------- | mysql-bin.000022 | 406039 | | mysql-bin.000023 | 71497 | + ------------------ + ---------- セットの2列 (0.01秒)
前の手順で取得したバイナリログファイルの名前に基づいて、CLIで次のコマンドを実行して、バイナリログファイルをリモートで取得し、オンプレミスデバイスにファイルを保存します。
mysqlbinlog -u<$ユーザー> -p<$パスワード> -h<$ホスト> -- 読み取りからリモートサーバー -- 生 <mysql-bin.XXX> > [$File_Name]
下表に、各パラメーターを説明します。
パラメーター
説明
-u<$ユーザー>
MySQLサーバーへの接続に使用されるユーザー名。
-p<$パスワード>
MySQLサーバーへの接続に使用されるパスワード。
-h<$ホスト>
RDSインスタンスへのリモート接続に使用されるエンドポイント。 詳細については、「インスタンスエンドポイントとポートの表示と管理」をご参照ください。
-- read-from-remote-server
バイナリログファイルの内容を取得するために
mysqlbinlog
が接続されているリモートMySQLサーバー。-- raw
解析後に
mysqlbinlog
コマンドの出力にバイナリログファイルの内容を表示するために使用される生の形式。<mysql-bin.XXX>
解析する必要があるバイナリログファイルの名前。 このパラメーターは、ステップ2の結果に基づいて設定する必要があります。
> [$File_Name]
リモートで取得され、オンプレミスデバイスに保存されるバイナリログファイルの名前。
次のコマンドを実行して、バイナリログファイルが取得されているかどうかを確認します。
more [$File_Name]
mysqlbinlogを使用したバイナリログファイルの表示
CLIで次のコマンドを実行し、mysqlbinlogを使用してバイナリログファイルの内容を表示します。
mysqlbinlog -vv -- base64-output=decode-rows <mysql-bin.XXX> | もっと見る
下表に、各パラメーターを説明します。
パラメーター | 説明 |
| 解析から取得したイベントに関する詳細を含む、出力の詳細。 |
| Base64エンコーディングを使用してバイナリログエントリを記録することを指定します。 |
| 解析する必要があるバイナリログファイルの名前。 |
| パイプラインを使用して出力を |
バイナリログ解析の詳細については、「MySQLドキュメント」をご参照ください。
出力のサンプルを次に示します。
[root @ iZbp ****** ~]# mysqlbinlog -vv -- base64-output=decode-rows mysql-bin.000022 | もっと見る
# 適切な用語はpseudo_replica_modeですが、この互換性エイリアスを使用します
#8.0.24以上のサーバーバージョンでステートメントを使用できるようにします。
/*!50530 SET @ @ SESSION.PSEUDO_SLAVE_MODE=1 */;
/*! SET @ OLD_COMPLETION_TYPE=@ @ COMPLETION_TYPE、COMPLETION_TYPE=0 */;
DELIMITER /*!*/;
# at 4
#230911 9:27:28サーバーid 26718053 end_log_pos 123 CRC32 0xa231cb44開始: binlog v 4、サーバーv 5.7.42-ログ作成230911 9:27:28
# at 123
#230911 9:27:28サーバーid 26718053 end_log_pos 194 CRC32 0x078b6dc1 Previous-GTIDs
# a63b4ed1-4c86-11ee-9029-00163e157053:1-27339
# at 194
#230911 9:27:32サーバーid 26718053 end_log_pos 259 CRC32 0x59b848c3 GTID last_committed=0 sequence_number=1 rbr_only=yes original_committed_ti
mestamp=0 immediate_commit_timestamp=0 transaction_length=0
/*!50718セットトランザクション分離レベル読み取りコミット * // *!*/;
# original_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
# immediate_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
/*!80001 SET @ @ session.original_commit_timestamp=0 * // *!*/;
/*!80014 SET @ @ session.original_server_version=0 * // *!*/;
/*!80014 SET @ @ session.immediate_server_version=0 * // *!*/;
SET @ @ SESSION.GTID_NEXT= 'a63b4ed1-4c86-11ee-9029-00163e157053:27340 '/*!*/;
# at 259
#230911 9:27:32サーバーid 26718053 end_log_pos 327 CRC32 0xc0dddaecクエリthread_id=16849 exec_time=0 error_code=0
SET TIMESTAMP=1694395652/*!*/;
SET @ @ session。pseudo_thread_id=16849/*!*/;
SET @ @ session.foreign_key_checks=1、@ @ session.sql_auto_is_null=0、@ @ session.unique_checks=1、@ @ session.autocommit=1/*!*/;
SET @ @ session.sql_mode=2097152/*!*/;
SET @ @ session.auto_increment_increment=1, @ @ session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 * // *!*/;
SET @ @ session.character_set_client=33,@ @ session.collation_connection=33,@ @ session.collation_server=33/*!*/;
SET @ @ session.lc_time_names=0/*!*/;
SET @ @ session.collation_database=DEFAULT/*!*/;
BEGIN
FAQ
このセクションでは、mysqlbinlogを使用するときに発生する一般的なエラーについて説明します。
次のエラーが発生した場合は、mysqlbinlogのバージョンを確認してください。 たとえば、mysqlbinlog 3.3を使用して次のエラーが発生した場合、このエラーはmysqlbinlog 3.4で解決されるため、mysqlbinlog 3.4を使用してバイナリログファイルの内容を表示できます。 このエラーが発生した場合は、それ以降のmysqlbinlogバージョンを使用して、バイナリログファイルの内容を表示できます。
エラー: Log_eventのエラー::read_log_event(): 'Sanity check failed '、data_len: 151、event_type: 35 エラー: オフセット120でエントリを読み取れませんでした: ログ形式のエラーまたは読み取りエラー。
バイナリログファイルの内容を表示するためにmysqlbinlogを使用しているが、
-- base64-output=decode-rows
パラメーターが使用されていない場合、出力は解析されていない内容になります。次のエラーが発生した場合は、
my.cn f
設定ファイルにdefault-character-set=utf8mb4
パラメーターが存在するかどうかを確認してください。 パラメーターが存在する場合は、このエラーを防ぐために-- no-defaults
パラメーターを追加します。 例:mysqlbinlog -- no-defaults -u[$User] -p[$Password] -h[$Host] -- リモートサーバーmysql-bin.XXXの読み取り> [$File_Name]
mysqlbinlog: [ERROR] 不明変数 'default-character-set=utf8mb4'
適用範囲
ApsaraDB RDS for MySQL