安全公司报告
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 20221017046 0.3 (22)申请日 2022.02.23 (71)申请人 上海甄云信息科技有限公司 地址 201706 上海市青浦区香 花桥街道郏 一村7号3幢1层A区046室 (72)发明人 刘隆剑 陈翔 欧志伟 吴坚  (74)专利代理 机构 北京知呱 呱知识产权代理有 限公司 1 1577 专利代理师 胡乐 (51)Int.Cl. G06F 16/215(2019.01) G06F 16/22(2019.01) G06F 16/23(2019.01) G06F 16/21(2019.01) (54)发明名称 一种基于binlog的大表变更及清理方法 (57)摘要 本发明公开了一种基于binlog的大表变更 及清理方法。 该方法主要包括: 接收输入参数(数 据库连接信息、 表名、 DDL命令和where条件); 创 建日志记录表和幽灵表, 如果为DDL操作, 则先将 DDL命令应用到幽灵表; 通过insert  into的方式 从原表拷贝数据至幽灵表,如果为数据清理操 作, 则在in sert int语句中拼接wh ere条件, 只拷 贝符合where条件的数据, 同时监听binlog日志 批量解析dml事件; 监测到数据拷贝完成且没有 新的binlog事件, 进行原表和幽灵表的切换。 本 发明灵活性、 稳定性较好, 既可以用作大表变更, 也可以用作数据清理, 在实际生产环 境使用过程 中, 对数据库性能影响较小。 权利要求书1页 说明书4页 附图1页 CN 114547013 A 2022.05.27 CN 114547013 A 1.一种基于bi nlog的大表变更及清理方法, 其特 征在于, 包括以下步骤: (1)接收输入参数, 所述输入参数包括数据库连接信息、 表名、 D DL命令和where 条件; (2)校验所述输入参数; 若参数校验不通过, 则退出并打印相关日志; 若校验通过, 则根 据DDL命令内容判断具体是在线D DL操作还是 数据清理操作; (3)创建日志 记录表和幽灵表; (4)如果步骤(2)中判断为在线DDL操作, 则先将在线DDL操作语句应用到幽灵表, 然后 通过insert  into的方式从原表拷贝数据至幽灵表; 如果步骤(2)中判断为数据清理操作, 则将where条件拼接到insert  into的语句中, 只拷贝符合where条件的数据, 同时监听 binlog日志批量 解析dml事 件; (5)监测到数据拷贝完成且没有新的bi nlog事件, 进行原 表和幽灵表的切换。 2.根据权利要求1所述的基于binlog的大表变更及清理方法, 其特征在于, 步骤(2)中 校验所述输入参数, 具体包括: 对数据库联通 性、 账号权限和D DL命令语法的检查。 3.根据权利要求1所述的基于binlog的大表变更及清理方法, 其特征在于, 步骤(4)中 所述从原 表拷贝数据至幽灵表, 其中根据输入的所述 where条件, 控制表数据复制的起 点。 4.根据权利要求1所述的基于binlog的大表变更及清理方法, 其特征在于, 步骤(1)中 所述输入参数还包括运行时参数, 步骤(5)中所述进 行原表和幽灵表的切换的过程中, 使用 socket监听请求, 实现根据负载情况动态调整所述 运行时参数。 5.根据权利 要求4所述的基于binlog的大表变更及清理方法, 其特征在于, 所述运行时 参数包括单次拷贝的行 数。 6.根据权利要求1所述的基于binlog的大表变更及清理方法, 其特征在于, 步骤(2)中 所述打印相关日志, 是通过命令行输出报错。 7.根据权利要求1所述的基于binlog的大表变更及清理方法, 其特征在于, 在步骤(4) 执行过程中, 还定期打印进度日志, 通过命令行输出进度信息 。 8.一种计算机设备, 包括存储器和处理器, 所述存储器存储有计算机程序, 其特征在 于, 所述处理器执行所述计算机程序时实现权利要求 1至7中任一项 所述的基于binlog的大 表变更及清理方法。 9.一种计算机可读存储介质, 其上存储有计算机程序, 其特征在于, 所述计算机程序被 处理器执行时实现权利要求1至7中任一项所述的基于bi nlog的大表变更及清理方法。权 利 要 求 书 1/1 页 2 CN 114547013 A 2一种基于 binlog的大表变更及清理 方法 技术领域 [0001]本申请涉及涉及计算机技 术领域, 特别是 涉及一种大表变更及清理方法。 背景技术 [0002]和传统企业级开发不同, 互联 网迭代变更比较频繁, 数据库表数据量比较庞大, 基 本每周甚至每天都有上线、 一月一次大 的上线是很常见 的事, 对应着表结构变更和数据清 理也是经常发生的, 比如给表添加字段、 加索引等。 当数据量小的情况下, 直接修改表结构 都很快, 然而, 在数据量大的场景下, 特别是千万级、 亿级的大表, 如果处理不当, 这些操作 往往会引发锁表的巨大隐患, 特别是在生产 环境中, 一旦在变更表结构过程中, 出现了长时 间锁表, 会导致用户产生的数据长时间无法正常变更到表中, 进而导致服务功能异常, 结果 将是灾难性的。 [0003]Mysql执行表过程为根据原表创建临时表, 对原表加排它锁, 将变更应用到临时表 然后复制数据到临时表, 最后释放写锁并rename表。 后面衍生出了一种基于触发器的变更 方案pt‑osc, 利用触发器处 理变更期间的dml操作, 只需在数据拷贝完后才 会对表加锁。 [0004]通过加锁的方式实现表结构的变更, 虽然能保证数据的一致性, 但也有被其它锁 阻塞的风险, 而且这种方式如果应用的大表, 容易造成大的主从时延 。 而利用触发器机制的 pt‑osc, 虽然能减少加锁的时间, 但由于触发器本身的缺陷, 对主库的性能影响比较大。 发明内容 [0005]本发明提供一种基于binlog的大表变更及清理方法, 旨在解决线上大表DDL变更 锁表时间长、 数据负载高等问题, 有效保证业 务连续性。 [0006]第一方面, 一种基于bi nlog的大表变更及清理方法, 包括以下步骤: [0007](1)接收输入参数, 所述输入参数包括数据库连接信息、 表名、 DDL命令和 where条 件; [0008](2)校验所述输入参数; 若参数校验不通过, 则退出 并打印相关日志; 若校验通过, 则根据DDL命令内容判断具体是在线D DL操作还是 数据清理操作; [0009](3)创建日志 记录表和幽灵表; [0010](4)如果步骤(2)中判断为在线DDL操作, 则先将在线DDL操作语句 应用到幽灵表, 然后通过insert  into的方式从原表拷贝数据至幽灵表; 如果步骤(2)中判断为数据清理操 作, 则将where条件拼接到insert  into的语句中, 只拷贝符合where条件的数据, 同时监听 binlog日志批量 解析dml事 件; [0011](5)监测到数据拷贝完成且没有新的bi nlog事件, 进行原 表和幽灵表的切换。 [0012]进一步地, 步骤(2)中校验所述输入参数, 具体包括: 对数据库联通性、 账号权限和 DDL命令语法的检查。 [0013]进一步地, 步骤(4)中所述从原表拷贝数据至幽灵表, 其中根据输入的所述where 条件, 控制表数据复制的起 点。说 明 书 1/4 页 3 CN 114547013 A 3

.PDF文档 专利 一种基于binlog的大表变更及清理方法

文档预览
中文文档 7 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共7页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于binlog的大表变更及清理方法 第 1 页 专利 一种基于binlog的大表变更及清理方法 第 2 页 专利 一种基于binlog的大表变更及清理方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 11:13:31上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。