在 AWS RDS 中使用 binlog 复制服务时的特殊事项
RDS 是 AWS 提供的托管的数据库服务, 其中也提供 MySQL 数据库. 解析 binlog 已经成为了很多公司的标配服务, 可惜的是 AWS RDS 并没有提供相应的功能, 因此如果需要通过解析 binlog, 需要自己实现.
不解的是, 同样是 AWS 的数据库服务, Dynamodb 确通过 Dynamodb streams 提供了类似 MySQL binlog 解析的服务, 而 RDS 确没有对应的 feature. 对 dynamodb streams 感兴趣的可以参见 官方文档
在 RDS 中解析 binlog 有几个需要注意的地方.
0x00 binlog 参数的指定
RDS 也支持定制参数, 但是通过 Parameter Group 的方式实现, 在 AWS Console 或者 AWS cli 中可以修改. 同样, 将 binlog_format
设置成 ROW
模式
0x01 binlog 保存的最长时间
如果是非常繁忙的 MySQL, 数据写入非常多的话, 很容易产生很多的 binlog 文件. 自己搭建的 MySQL 一般通过 expire_logs_days 参数控制 binlog 保存的最大时长, 或者 DBA 负责清理 binlog .
在 RDS 中, 我们是无法登陆 RDS 实例所在的 server 的, binlog 保存时间的设置也非常 tricky: 依靠调用一个 RDS 特有的存储过程 call mysql.rds_set_configuration('binlog retention hours', 24);
实现, 具体参见官方文档 MySQL Database Log Files.
0x02 奇怪的表: mysql.rds_heartbeat2
默认情况下, binlog 里面会出现 mysql.rds_heartbeat2
这个特殊的表, 在自己搭建的 MySQL 中不会出现这个表. 暂时不知道是否可以 ignore 掉这个表的复制. 暂时我们是通过赋予复制用户 SELECT
权限, 在 binlog 数据中过滤掉了这个表.
总结
除了上面几个不同, RDS 中解析 MySQL binlog 没有其他不同.
-- EOF --