[发明专利]一种在线修改数据库表结构的方法在审
申请号: | 201810701116.6 | 申请日: | 2018-06-29 |
公开(公告)号: | CN109189778A | 公开(公告)日: | 2019-01-11 |
发明(设计)人: | 郭安俊 | 申请(专利权)人: | 武汉掌游科技有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23;G06F16/27 |
代理公司: | 北京慕达星云知识产权代理事务所(特殊普通合伙) 11465 | 代理人: | 李冉 |
地址: | 430000 湖北省武汉市*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 新表 在线修改 主库 数据库表结构 表结构 触发器 子表 删除 关联 拷贝数据 库服务器 数据阻塞 同步更新 自动修改 目标表 日志 映射 创建 检查 | ||
本发明提供一种在线修改数据库表结构的方法,包括:检查所述源数据表是否存在外键,若存在外键则根据主库的源数据表在主库创建一个新表,对新表按照目标表结构进行修改;在主库创建触发器,用于将源数据表中的操作映射到新表;开启binlog日志,按照新表自动修改从库的表结构;从源数据表中拷贝数据到新表;根据修改后的新表,修改与外键相关联的子表;重命名新表,并删除源数据表;删除触发器。本发明考虑外键关联的子表以及从库实例的同步更新,在线修改速度快,且不会造成云库服务器数据阻塞,具有较高的稳定性,能够有效应对具有多实例从库及云库的表结构在线修改需求。
技术领域
本发明涉及数据库技术领域,特别涉及一种在线修改数据库表结构的方法。
背景技术
目前对于数据库中的实体数据表都是存储在数据库中的。根据项目发展的需要,在数据库运维过程中会增减各种功能,这就需要对数据表频繁进行修改,在一些情况下,甚至需要对表结构进行修改,然而在对数据库表结构进行相应的修改时,往往需要暂停目前线上运行的项目,修改后重新发布应用。
目前开源在线修改MySql表结构的工具,如Percona的pt-online-schema-change、Facebook的OSC和LHM等,但这些只能对单实例进行修改,无法对多实例从库及云库进行在线修改。
因此,提供一种能够不影响线上业务且能够对多实例从库及云库表结构进行修改的方法及系统是本领域技术人员亟待解决的技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种在线修改数据库表结构的方法,可以实现多实例从库及主库的在线修改,不会影响数据库线上的正常运行,修改速度快且能够有效保证数据的完整性。为实现上述目的其具体方案如下:
一种在线修改数据库表结构的方法,主库中包括源数据表,包括如下步骤:
步骤1,检查所述源数据表是否存在外键,若不存在外键则终止执行,若存在外键则进入步骤2;
步骤2,根据主库的源数据表在所述主库创建一个新表,所述新表具有和所述源数据表相同的表结构,对所述新表按照目标表结构进行修改;
步骤3,在所述主库创建触发器,用于将所述源数据表中的操作映射到所述新表;
步骤4,开启binlog日志,按照新表自动修改从库的表结构;
步骤5,从所述源数据表中拷贝数据到所述新表;
步骤6,根据修改后的所述新表,修改与外键相关联的子表;
步骤7,重命名所述新表,并删除所述源数据表;
步骤8,删除所述触发器。
优选的,所述触发器记录从所述源数据表向所述新表拷贝数据过程中对源数据表进行数据修改的操作,并且在数据拷贝结束后,在所述新表执行所述操作。
优选的,所述步骤3中在所述主库创建三个触发器,分别是INSERT触发器、UPDATE触发器和DELETE触发器。
优选的,所述步骤4中,采用行模式记录binlog日志,具体方法为:
所述主库更新数据后,接收binlog日志数据并写入本地日志;
读取本地日志,检查源数据表是否存在主键或唯一索引,若存在主键或唯一索引,则用主键或唯一索引匹配binlog日志数据;若不存在主键或唯一索引,则全表扫描匹配binlog日志数据;
更新所述从库的表结构。
优选的,所述步骤6中,修改与外键相关联的子表的方法包括以下两种:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉掌游科技有限公司,未经武汉掌游科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810701116.6/2.html,转载请声明来源钻瓜专利网。