一种云原生的数据库变更回退及版本管理方法与流程

文档序号:33037905发布日期:2023-01-24 20:32阅读:27来源:国知局
一种云原生的数据库变更回退及版本管理方法与流程

1.本发明涉及数据库维护技术领域,更具体地说,它涉及一种云原生的数据库变更回退及版本管理方法。


背景技术:

2.新版本的应用需要使用到新的数据库schema,当部署新版本应用时,就需要更新数据库的schema,通常我们称之为数据库schema变更(database migrations)。目前数据库变更的方式主要通过开发人员在各自的应用程序中或者通过sql脚本的方式定义数据库变更,在应用程序升级时自动或手动执行数据库变更。随着版本的迭代,需要进行频繁的,复杂的数据库版本迭代更新甚至回退,还涉及到相关的异常处理。不同的开发人员维护相同的代码程序没有统一的处理逻辑,导致数据库变更变得混乱、臃肿,增加人力时间成本。


技术实现要素:

3.本发明要解决的技术问题是针对现有技术的上述不足,本发明的目的是提供一种云原生的数据库变更回退及版本管理方法。
4.本发明的技术方案是:一种云原生的数据库变更回退及版本管理方法,包括:
5.将基于k8s平台的应用程序及数据库管理程序migration-job封装在容器中,并部署在k8s集群中;
6.在正常运行数据库迁移时,数据库管理程序migration-job以非并行任务类型job的方式运行,构建一个承担job任务的容器任务pod,用于执行相应的数据库版本迁移任务;
7.在封装数据库管理程序migration-job的容器内挂载指定数据库最新版本的数据库schema变更及回退sql文件;
8.通过主机路径或持久性存储卷的方式挂载指定数据库最新版本的数据库schema变更及回退sql文件。
9.作为进一步地改进,所述job任务的资源配置信息包括迁移数据库管理程序镜像、迁移执行指令、迁移文件路径的挂载卷信息。
10.进一步地,所述迁移执行指令的参数包括子命令、版本信息、连接数据库的url、用户名及密码、迁移文件路径,所述迁移执行指令的参数通过命令行参数进行指定或通过环境变量进行指定;所述用户名及密码的信息通过secret挂载。
11.进一步地,所述迁移文件路径中包含有以db名称命名的文件夹,每个db文件夹的路径下包含至少一个版本的sql文件,每个版本的sql文件包含up文件和down文件,up文件对应升级sql schema,down文件对应回退sqlschema,迁移文件的名称包含版本序号及版本名;所述版本序号为从1开始递增,所述版本名为唯一的。
12.进一步地,所述job任务的对象资源配置需要指定迁移执行指令:sql-migrate up/down《版本名》;
13.连接数据库后,根据数据库表migrate_version可以查看当前版本序号和版本名,
得到当前版本信息;
14.根据迁移文件路径可以获取最新版本信息;
15.migrate_version表中的当前版本包含在迁移文件路径中;
16.通过比对版本序号来判断当前版本与目标版本的大小;
17.升级时只会执行当前版本到目标版本的schema迁移;回退时只会执行当前版本到目标版本的schema回退;
18.当子命令为up时,目标版本必须大于当前版本;当子命令为down时,目标版本必须小于当前版本。
19.进一步地,根据所述job任务的控制器资源配置信息创建job,通过job的资源对象创建pod实例,pod实例会立即运行一个短暂的迁移任务进行数据库迁移;当迁移任务执行成功时,pod的状态为succeeded,job执行完成;当数据库迁移失败时,pod状态为failed,job执行失败,记录执行失败的版本,并标记失败的版本为dirty,执行异常处理。
20.进一步地,执行异常处理包括:检查被标记的dirty版本,确认修复节点版本,然后构建一个新的数据库迁移修复job,通过修复job将数据库迁移指令改为修复指令;
21.修复指令处理是先将当前版本强制置为指定的修复节点版本,然后从修复节点版本开始向后升级到目标版本。
22.进一步地,第一次执行schema迁移时,在指定的dburl中创建相关数据库db,并在数据库db中添加migrate_version表,用于记录迁移版本序号、版本名和dirty标记;
23.每执行完成一个sqlschema,更新版本名,dirty置为空,当执行失败时,标记当前执行的sql版本序号、版本名并将dirty标志为true;
24.当dirty已被置为true时,不允许执行up子命令或down子命令,只允许执行fix子命令;
25.如果执行子命令为up子命令或down子命令时,则需校验当前环境是否干净,是否需要处理dirty的修复。
26.进一步地,job执行失败的信息直接通过标准日志输出错误报告,并输出当前版本信息及dirty标记。
27.进一步地,执行数据库版本迁移任务时,使用数据库锁来防止多migrate_job实例同时执行数据库版本迁移。
28.有益效果
29.本发明与现有技术相比,具有的优点为:
30.本发明的方法可以支持多数据库、多版本管理;实现自动化执行数据库变更,避免手动执行的繁琐步骤;支持跨版本更新及回退及异常处理;版本校验,防止误操作,且可以重复执行。
附图说明
31.图1为本发明的流程图。
具体实施方式
32.下面结合附图中的具体实施例对本发明做进一步的说明。
33.参阅图1,一种云原生的数据库变更回退及版本管理方法,包括:
34.将基于k8s平台的应用程序及数据库管理程序migration-job封装在容器中,并部署在k8s集群中;
35.数据库管理程序migration-job被封装在容器中,在正常运行数据库迁移时,数据库管理程序migration-job以非并行任务类型job的方式运行,构建一个承担job任务的容器任务pod,用于执行相应的数据库版本迁移任务;
36.在封装数据库管理程序migration-job的容器内挂载指定数据库最新版本的数据库schema变更及回退sql文件;
37.可以通过主机路径或持久性存储卷的方式挂载指定数据库最新版本的数据库schema变更及回退sql文件。
38.job任务的资源配置信息包括迁移数据库管理程序镜像、迁移执行指令、迁移文件路径的挂载卷信息。为防止数据库版本迁移任务执行阻塞或长时间超时,指定job存活时间activedeadlineseconds,并指定pod的重启策略restartpolicy为never,失败重试次数backofflimit为0,job的最小完成数completions和并行数parallelism设置为1,设置ttlsecondsafterfinished时间用于清理已完成的job及pod。
39.迁移执行指令的参数包括子命令、版本信息、连接数据库的url、用户名及密码、迁移文件路径,迁移执行指令的参数通过命令行参数进行指定或通过环境变量进行指定;用户名及密码的信息通过secret挂载。结构形式如下:
40.//更新指令
41.sql-migrate up《x》
‑‑
path=《path》
‑‑
dburl=《dburl》
42.//回退指令:
43.sql-migrate down《x》/all
44.//修复指令:
45.sql-migrate fix
‑‑
from《x》
‑‑
to《y》
46.迁移文件路径中包含有以db名称命名的文件夹,每个db文件夹的路径下包含至少一个版本的sql文件,每个版本的sql文件包含up文件和down文件,up文件对应升级sql schema,down文件对应回退sqlschema,迁移文件的名称包含版本序号及版本名;如:[版本序号]-[版本名].up.sql及[版本序号]-[版本名].down.sql,其中版本序号为从1开始递增,版本名为唯一的。形式如下:
[0047][0048][0049]
job任务的对象资源配置需要指定迁移执行指令:sql-migrate up/down《版本名》;
[0050]
连接数据库后,根据数据库表migrate_version可以查看当前版本序号和版本名,得到当前版本信息;
[0051]
根据迁移文件路径可以获取最新版本信息;
[0052]
migrate_version表中的当前版本包含在迁移文件路径中;
[0053]
通过比对版本序号来判断当前版本与目标版本的大小;
[0054]
升级时只会执行当前版本到目标版本的schema迁移;回退时只会执行当前版本到
目标版本的schema回退;
[0055]
当子命令为up时,目标版本必须大于当前版本;当子命令为down时,目标版本必须小于当前版本。
[0056]
根据job任务的控制器资源配置信息创建job,通过job的资源对象创建pod实例,pod实例会立即运行一个短暂的迁移任务进行数据库迁移;当迁移任务执行成功时,pod的状态为succeeded,job执行完成;当数据库迁移失败时,pod状态为failed,job执行失败,记录执行失败的版本,并标记失败的版本为dirty(版本异常),此时必须执行异常处理。
[0057]
执行异常处理包括:检查被标记的dirty版本,确认修复节点版本(此时版本可能是dirty版本的上一个版本或下一个版本或当前dirty版本),然后构建一个新的数据库迁移修复job,通过修复job将数据库迁移指令改为修复指令;如:sql-migrate fix
‑‑
from《修复节点版本》
‑‑
to《目标版本》,如果修复失败,排除相关问题后,重新执行修复即可。
[0058]
修复指令处理是先将当前版本强制置为指定的修复节点版本,然后从修复节点版本开始向后升级到目标版本。对于第一个版本的处理,回退指令为:sql-migrate down all,修复指令为:sql-migrate fix
‑‑
from null
‑‑
to《目标版本》。
[0059]
第一次执行schema迁移时,在指定的dburl中创建相关数据库db,并在数据库db中添加migrate_version表,用于记录迁移版本序号、版本名和dirty标记;
[0060]
每执行完成一个sqlschema,更新版本名,dirty置为空,当执行失败时,标记当前执行的sql版本序号、版本名并将dirty标志为true;
[0061]
当dirty已被置为true时,不允许执行up子命令或down子命令,只允许执行fix子命令;
[0062]
如果执行子命令为up子命令或down子命令时,则需校验当前环境是否干净,是否需要处理dirty的修复。
[0063]
为了便于问题排查及任务执行结果的判断,job执行失败的信息直接通过标准日志输出错误报告,并输出当前版本信息及dirty标记。如:
[0064]
如:
[0065][0066][0067]
执行数据库版本迁移任务时,使用数据库锁来防止多migrate_job实例同时执行数据库版本迁移,防止数据库操作异常。
[0068]
以上仅是本发明的优选实施方式,应当指出对于本领域的技术人员来说,在不脱
离本发明结构的前提下,还可以作出若干变形和改进,这些都不会影响本发明实施的效果和专利的实用性。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1