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

Binlog获取策略

连接方式 Binlog获取策略
  • 主地址
  • 默认集群地址
  • 包含主节点的自定义集群地址
均从主节点获取。
说明 如何设置集群连接地址,请参见 配置数据库代理
仅包含只读节点的自定义集群地址 从任意只读节点获取。
说明 集群版本需为 PolarDB MySQL引擎8.0版本且Revision version为8.0.1.1.12或以上。否则,将返回 Only allow to dump binary log on primary instance报错。

如何查看集群版本和升级集群版本,请参见查询版本号版本升级

远程获取Binlog日志

  1. PolarDB MySQL引擎集群开启Binlog,详细操作步骤,请参见开启Binlog
    说明 您需要先为集群开启Binlog才能查看并获取Binlog日志,否则将出现 You are not using binary logging错误提示。
  2. 在本地服务器上安装MySQL。
  3. 通过MySQL客户端连接PolarDB集群,详细操作步骤,请参见使用客户端连接集群。本文以Linux系统为例。1
  4. 在已连接PolarDB集群的客户端中执行如下命令查看目标集群的Binlog文件列表:
    show binary logs;
    返回结果如下:
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000005 |      2639 |
    +------------------+-----------+
    1 row in set (0.00 sec)
  5. 在客户端执行如下命令,远程获取Binlog日志并保存至本地。
    本文中以Linux系统为例,在执行如下语句前,需先执行exit退出MySQL后,才能远程获取Binlog日志并保存至本地。 2
    mysqlbinlog -u<用户名> -p<密码> -h<连接地址> --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 MySQL引擎集群中的账号名称。如何创建账号,请参见创建数据库账号 test_api
    -p 以上账号的密码。如果此处留空,则在执行此命令后会被要求输入。 TestPwd123
    -h PolarDB MySQL引擎集群的公网连接地址。
    说明
    • 若您的PolarDB MySQL引擎集群连接地址使用的是默认的端口号3306,端口号可省略不写,否则需要在连接地址后加上端口号。
    • 当前仅支持通过主地址或集群地址(包括默认集群地址和自定义集群地址)的公网连接地址远程获取Binlog。如何申请公网连接地址,请参见申请集群地址和主地址
    test-polardb.rwlb.rds.aliyuncs.com
    --raw 表示将获取到的Binlog文件按数据原有格式打印,而不会展示解析后的数据。 --raw
    mysql-bin.****** 通过show binary logs;命令获取的目标Binlog文件的名字,即Log_name mysql-bin.000005

使用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
  • Q:从只读节点获取Binlog时,为什么出现Only allow to dump binary log on primary instance错误提示?

    A:当集群版本为PolarDB MySQL引擎8.0版本且Revision version为8.0.1.1.12或以上时,支持从只读节点获取Binlog。如何查看集群版本和升级集群版本,请参见查询版本号版本升级

  • Q:从只读节点获取的Binlog时,为什么有时候结果会与从主节点上获取的不一致?

    A:PolarDB支持在主节点和只读节点间共享Binlog,当主节点上的Binlog源信息同步到只读节点后,才能从只读节点获取Binlog。当出现同步延迟(源信息数据量很小,延迟一般不会很大)时,只读节点可能会读不到主节点上新写入的Binlog。

  • Q:为什么在超出保存时长参数(binlog_expire_logs_seconds)设置的时间后,Binlog并没有被删除?

    A:若只读节点上有线程正在获取Binlog,该Binlog不会被立即删除。当主节点写入新的Binlog后,会再次检查是否有超时的Binlog,若此时该Binlog未参与任何只读节点上的线程,即被删除。