本文介绍如何远程获取PolarDB MySQL Binlog日志,并通过mysqlbinlog工具查看并解析Binlog日志。

前提条件

远程获取Binlog日志

  1. 在已连接PolarDB集群的客户端中执行如下命令查看目标集群的Binlog日志名称:
    show binary logs;
    返回结果如下:1
  2. 在客户端执行如下命令,远程获取Binlog日志并保存至本地。
    mysqlbinlog -u[$User] -p[$Password] -h[$Host] --read-from-remote-server --raw mysql-bin.******
    示例:
    mysqlbinlog -utest_acc -pTestPwd123 -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000494
    参数 说明 示例值
    -u PolarDB MySQL集群中的账号名称。如何创建账号,请参见创建数据库账号 test_acc
    -p 以上账号的密码。 TestPwd123
    -h PolarDB MySQL集群的公网连接地址。
    说明
    • 若您的PolarDB MySQL集群连接地址使用的是默认的端口号3306,端口号可省略不写,否则需要在连接地址后加上端口号。
    • 当前仅支持通过主地址或集群地址的公网连接地址远程获取Binlog,暂不支持通过自定义地址获取Binlog。如何申请公网连接地址,请参见申请连接地址
    test-polardb.rwlb.rds.aliyuncs.com
    --raw 通过指定--raw参数将获取到的Binlog文件按数据原有格式打印,而不会展示解析后的数据。 --raw
    mysql-bin.****** 通过show binary logs;命令获取的目标Binlog文件的名字,即Log_name mysql-bin.000494

使用mysqlbinlog工具查看、解析Binlog日志

  • 执行如下命令,通过mysqlbinlog工具查看Binlog日志文件内容:
    mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more
    说明
    • -vv:查看具体SQL语句及备注。
    • --base64-output=decode-rows:解析Binlog日志文件。

    具体的Binlog日志内容如下图中红框所示部分:

    3
  • 解析Binlog日志

    关于如何解析Binlog日志,请参见解析Binlong日志

常见问题

  • Q:执行show binary logs;后,为什么会提示You are not using binary logging错误信息?

    A:PolarDB集群默认关闭Binlog参数,请确保您已开启Binlog

    说明 开启或关闭Binlog后,集群会自动重启使参数新配置生效。建议您在业务低谷期进行操作并确保应用程序具备重连机制。
  • Q:为什么远程读取Binlog日志失败,并出现如下错误提示?
    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: Got error reading packet from server: 'Slave can not handle replication events with the checksum that master is configured to log; 

    A:当您使用的mysqlbinlog工具版本过低时,可能会出现以上错误提示中的任意一种。请检查您使用的mysqlbinlog工具版本,建议您升级到较高版本的mysqlbinlog工具再尝试远程读取Binlog日志。例如使用Ver 3.3版本出现如上错误提示,您可以将mysqlbinlog工具升级至Ver 3.4版本进行查看。

  • Q:为什么我看到的Binlog日志内容未经过解析?

    A:若在查看Binlog日志时,未使用--base64-output=decode-rows参数,导出的Binlog日志将会显示未经解析的日志(如下图所示)。请确保在使用mysqlbinlog工具查看Binlog日志时,已使用--base64-output=decode-rows参数。

    3