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

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスのバイナリログファイルをリモートで取得して解析する方法を教えてください。

最終更新日:Dec 18, 2024

このトピックでは、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: バイナリログファイルをリモートで取得

  1. クライアントをRDSインスタンスに接続します。 詳細については、「データベースクライアントまたはCLIを使用したApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。

  2. 次のSQL文を実行して、Log_nameの値を表示し、logsテーブルに記録します。 値は、mysql-bin.xxxなどのバイナリログファイルの名前です。

    show binary logs;

    出力のサンプルを次に示します。

    mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000022 |    406039 |
    | mysql-bin.000023 |     71497 |
    +------------------+-----------+
    2 rows in set (0.01 sec)

  3. 前の手順で取得したバイナリログファイルの名前に基づいて、CLIで次のコマンドを実行して、バイナリログファイルをリモートで取得し、オンプレミスデバイスにファイルを保存します。

    mysqlbinlog -u<$User> -p<$Password> -h<$Host> --read-from-remote-server --raw <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]

    リモートで取得され、オンプレミスデバイスに保存されるバイナリログファイルの名前。

  4. 次のコマンドを実行して、バイナリログファイルが取得されているかどうかを確認します。

    more [$File_Name]

mysqlbinlogを使用したバイナリログファイルの表示

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

mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> | more

下表に、各パラメーターを説明します。

パラメーター

説明

-vv

解析から取得したイベントに関する詳細を含む、出力の詳細。

-- base64-output=デコード行

Base64エンコーディングを使用してバイナリログエントリを記録することを指定します。

<mysql-bin.XXX>

解析する必要があるバイナリログファイルの名前。 XXXを実際のファイル名に置き換えます。

| もっと見る

パイプラインを使用して出力をmoreコマンドに送信し、出力をページ単位で表示することを指定します。

説明

バイナリログ解析の詳細については、「MySQLドキュメント」をご参照ください。

同様の出力が返されます。

[root@iZbp****** ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000022 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230911  9:27:28 server id 26718053  end_log_pos 123 CRC32 0xa231cb44   Start: binlog v 4, server v 5.7.42-log created 230911  9:27:28
# at 123
#230911  9:27:28 server id 26718053  end_log_pos 194 CRC32 0x078b6dc1   Previous-GTIDs
# a63b4ed1-4c86-11ee-9029-00163e157053:1-27339
# at 194
#230911  9:27:32 server 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 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# 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 server id 26718053  end_log_pos 327 CRC32 0xc0dddaec   Query   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

よくある質問

このセクションでは、mysqlbinlogを使用するときに発生する一般的なエラーについて説明します。

  • 次のエラーが発生した場合は、mysqlbinlogのバージョンを確認してください。 たとえば、mysqlbinlog 3.3を使用して次のエラーが発生した場合、このエラーはmysqlbinlog 3.4で解決されるため、mysqlbinlog 3.4を使用してバイナリログファイルの内容を表示できます。 このエラーが発生した場合は、それ以降のmysqlbinlogバージョンを使用して、バイナリログファイルの内容を表示できます。

    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.
  • バイナリログファイルの内容を表示するためにmysqlbinlogを使用しているが、-- base64-output=decode-rowsパラメーターが使用されていない場合、出力は解析されていない内容になります。

    image.png

  • 次のエラーが発生した場合は、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] unknown variable 'default-character-set=utf8mb4'
  • mysqlbinlogコマンドによって解決されるバイナリログの時刻が実際の時刻と異なる場合は、mysqlbinlogコマンドが実行される環境のタイムゾーンがApsaraDB RDS for MySQLデータベースのタイムゾーンと同じかどうかを確認します。

    MySQLでは、バイナリログの時刻情報は、タイムゾーン情報を含まないUNIXタイムスタンプとして保存されます。 そのため, mysqlbinlogコマンドで解決される時刻は, コマンドを実行する環境のローカルタイムゾーンに基づいて変換されます。 環境のタイムゾーンがRDS for MySQLインスタンスのタイムゾーンと異なる場合、解決された時間は実際の時間と一致しません。

適用範囲

ApsaraDB RDS for MySQL