开启Binlog

本文介绍如何为PolarDB集群开启Binlog功能。

背景信息

PolarDB是一款完全兼容MySQL的云原生数据库,默认使用了更高级别的物理日志代替Binlog,但为了更好地与MySQL生态融合,PolarDB支持手动开启Binlog,开启Binlog后您就可以连接ElasticSearchAnalyticDB等数据产品,也可以搭建PolarDB到RDSRDS到PolarDBPolarDB之间的数据实时同步。

使用限制

  • PolarDB集群创建于2019年04月05日之后,您可以直接开启Binlog;若PolarDB集群创建于2019年04月05日之前,请您先将集群小版本升级至最新版本再开启Binlog,关于如何升级小版本,请参见小版本升级

收费说明

Binlog的空间属于集群存储空间的一部分,需要收取存储费用,详情请参见存储空间计费规则

注意事项

  • Binlog功能默认关闭,开启Binlog后集群会自动重启,通常情况下,重启任务会在5分钟之内完成。重启时服务闪断时间在40秒左右,具体时间与数据量和表数量相关,建议您在业务低谷期进行操作并确保应用程序具备重连机制。

  • 开启Binlog后会导致写性能下降,读性能不受影响。一般情况下,开启Binlog后对性能影响不超过10%;极端压力场景,性能影响可能达到40%。详情请参见常见问题

  • 拉取、订阅或同步Binlog(例如使用DTS等工具)时,建议使用PolarDB主地址,因为直接指向生成Binlog的主节点,具有更好的兼容性和稳定性。关于如何查看主地址,请参见查看连接地址和端口

  • 开启Binlog后,数据库提交超大事务时,会阻塞其他事务的提交,并可能会影响集群的重启和变配时长。

  • 本文介绍的loose_polar_log_bin参数为全局(Global)级别参数。若需要使用会话(Session)级别的Binlog功能,需要开启sql_log_bin参数。

    说明

    sql_log_bin参数用于控制是否开启会话级别的Binlog。默认情况下,该参数处于关闭状态。如需开启,请前往配额中心,在配额名称polardb sql_log_bin参数权限操作列,单击申请进行开启。

  • 如果使用DTS从RDS迁移到PolarDB,Binlog会自动开启。

开启Binlog

为存量集群开启Binlog

重要

开启 Binlog 后集群会自动重启,重启任务会在 5 分钟之内完成。重启时服务闪断时间在 40 秒左右,具体时间与数据量和表数量相关,建议您在业务低谷期进行操作并确保应用程序具备重连机制。

  1. 登录PolarDB控制台

  2. 在控制台左上角,选择集群所在地域。

  3. 找到目标集群,单击集群ID。

  4. 您可以通过以下两种方式中的任意一种来开启Binlog:

    • 方式一:

      1. 进入集群的Binlog管理页面。

        image

      2. 单击立即开启按钮。

      3. 开启Binlog对话框中,选择生效方式为立即生效定时生效

        若选择定时生效,请指定具体的生效时间。

        image

      4. 单击确定

    • 方式二:通过设置参数loose_polar_log_bin的值来开启Binlog。

      1. 在左侧导航栏中选择配置与管理 > 参数配置

      2. 找到目标参数loose_polar_log_bin,修改参数值。具体操作请参见修改参数值

        说明
        • 若您的PolarDB MySQL版集群版本为MySQL 5.6,当前值修改为ON_WITH_GTID

        • 若您的PolarDB MySQL版集群版本为MySQL 5.7或MySQL 8.0,当前值修改为ON

新购集群时开启Binlog

您只需要在创建集群时,选中集群配置页面上的是否开启Binlog复选框即可。详情请参见购买企业版集群购买包年包月集群

Binlog文件保存时长

保存策略

Binlog文件有如下两种保存策略:

  • 开启Binlog后,文件默认保存3天,超过3天的Binlog文件会被自动删除。

    说明
    • 在2023年11月23日前购买的PolarDB MySQL版集群,其Binlog文件默认保存两周(14天)。

    • 在2024年1月17日前购买的PolarDB MySQL版集群,其Binlog文件默认保存一周(7天)。

  • 关闭Binlog后,已有的Binlog文件会一直保留,不会自动删除。

修改保存时长

重要

修改Binlog保存时长不会造成连接闪断,也不需要重启集群。

但如果修改保存时长导致大量Binlog文件需要被清除(如10 TB),则在清除时可能会造成短时间的数据库写入异常。因此,在Binlog文件较大的情况下,建议在业务低峰期进行操作,并分多次缩短Binlog的保存时长,每次清除一部分Binlog数据。

  • 若您的集群已开启Binlog,您可以通过如下两种方式修改Binlog文件保存时长:

    • 若集群版本为PolarDB MySQL版5.6,您可以通过修改loose_expire_logs_hours(取值范围为0~2376,单位为小时,默认值为72)的参数值来设置Binlog的保存时长。0表示不自动删除Binlog文件。

    • 若集群版本为PolarDB MySQL版5.7或8.0,您可以通过修改binlog_expire_logs_seconds(取值范围为0~4294967295,单位为秒,默认值为259200)的参数值来设置Binlog的保存时长。0表示不自动删除Binlog文件。

      说明

      通过修改这两个参数的参数值来设置Binlog的保存时长后,集群中历史Binlog文件不会被立即自动清除。此时若您需要清除历史Binlog文件,可以通过如下三种方法之一:

      • 当集群中最后一个Binlog文件达到max_binlog_size,切换到新的Binlog文件后,这些历史Binlog文件将会被自动清除。

      • 使用高权限账号执行flush binary logs命令可以立即触发Binlog文件切换并清除过期的Binlog文件。

      • 您也可重启集群。集群重启后将自动清除历史Binlog文件。

  • 若您的集群未开启Binlog,此时如需删除Binlog文件,您可以重新打开Binlog,将上述Binlog的保存时长参数(loose_expire_logs_hoursbinlog_expire_logs_seconds)设置为一个较小的值,等文件超过保存时长自动删除后再关闭Binlog。

获取并查看Binlog日志

您可以通过mysqlbinlog工具查看并解析Binlog日志,详情请参见远程获取并解析PolarDB MySQL版Binlog日志

常见问题

  • Q:Binlog文件能保存多久?

    A:

    • 若您的集群开启了Binlog,Binlog文件默认保存3天,超过3天的Binlog文件会被自动删除。

      说明
      • 在2023年11月23日前购买的PolarDB MySQL版集群,其Binlog文件默认保存两周(14天)。

      • 在2024年1月17日前购买的PolarDB MySQL版集群,其Binlog文件默认保存一周(7天)。

    • 若您的集群关闭了Binlog,已有的Binlog文件会一直保留,不会自动删除。

    说明

    您可以通过修改参数的方式修改开启Binlog集群的Binlog文件保存时长。具体请参见Binlog文件保存时长

  • Q:开启Binlog后可以关闭吗?

    A:将参数loose_polar_log_bin修改为OFF并提交即可关闭。

    说明

    Binlog关闭后,已有的Binlog文件会一直保留。您可以先缩短Binlog文件的保存时长,等待不需要的文件自动删除后,再关闭Binlog。

  • Q:如何减少Binlog占用的存储空间?

    A:您可以将Binlog的保存时长参数(loose_expire_logs_hoursbinlog_expire_logs_seconds)设置为一个较小的值,来减少Binlog文件对存储空间的占用。

  • Q:开启Binlog对性能影响有多大?

    A:开启Binlog不会影响查询(SELECT)性能,只会影响写入更新(如INSERT、UPDATE、DELETE等)性能。一般情况下,开启Binlog后对性能影响不超过10%。极端压力场景,性能影响可能达到40%。

  • Q:开启Binlog后集群会自动重启,重启任务多久才能完成?

    A:一般来说,重启任务会在5分钟之内完成,重启时服务闪断时间在40秒左右。具体时间与数据量和表数量相关,建议您在业务低谷期进行操作并确保应用程序具备重连机制。

  • Q:如何远程获取并查看Binlog日志内容?

    A:详情请参见远程获取并解析PolarDB MySQL版Binlog日志

  • Q:为什么无法使用DMS的通过无锁变更工单实现无锁结构变更功能对PolarDB MySQL版集群进行添加索引等表结构变更操作?

    A:PolarDB MySQL版集群Binlog默认关闭,因此若需要使用DMS的无锁结构变更功能,请先开启PolarDB MySQL版集群的Binlog功能。若不想开启Binlog,您也可以使用online DDL命令来变更表结构。

  • Q:开启Binlog后支持使用canal实现对MySQL的变动进行采集吗?

    A:可以实现使用canal对MySQL的变动进行采集。

  • Q:执行SHOW BINARY LOGS语句用于查询Binlog文件大小是否会影响集群性能?

    A:不会,SHOW BINARY LOGS语句属于管理类操作,对集群性能几乎无影响。它不会像数据写入操作(如INSERT、UPDATE、DELETE)那样直接影响数据库的读写性能。因此,您可以放心使用此命令进行查询。