本文提出一种基于MySQL Binlog提取系统配置数据变更脚本的方法的工作原理如图所示:
1、获取:同步任务启动时,与任务中指定的MySQL建立连接,并模拟MySQL复制,向MySQL发送Binlog Dump命令。Dump命令中包含了Binlog Filename和Binlog Position两个参数,分别表示Binlog 文件名和Binlog文件中偏移位置,这两个参数确定了复制的位置。MySQL收到Dump命令后,会通过Binlog Dump线程,将Binlog Filename和Binlog Position确定的位置之后的所有记录在Binlog 文件中的Binlog事件推送过来。当发生新的变更时,MySQL再将该变更以Binlog事件的形式写入Binlog文件的同时,还会通过Binlog Dump线程将Binlog事件发送出来。在接收到Binlog事件时,对这些事件进行解析,从而获取完整的数据变更。
2、存储:在获取到数据变更后,将数据变更发布到分布式消息中间件,由消息中间件负责存储变更。
3、解析:从消息中间件订阅这些变更,解析生成sql语句。
4、清洗:对sql语句进行筛选,只关注指定的数据库表变更记录,排除无关数据,每张表维护一个变更队列;
5、改写:针对每个表提供可拓展的改写接口,如去掉自增字段,补全序列值等操作;
6、生成:当版本升级或者数据库迁移时,可根据序列生成适用于不同数据库的类型(如MySQL、PostgreSQL等)的变更脚本;
7、执行:版本升级时,在目标数据库执行变更脚本;
8、归档:每一次生成提取的Binlog记录进行归档。