背景:
开发好的应用,要发布到生产环境,生产环境要求分应用部署,并且数据库也是垂直分库的。比如生产环境部署了财务、供应链,还需要部署一个二开的应用,开发环境这几个库都是在一起的,生产环境要求是互相独立,并且二开的应用不能是默认的扩展开发库(secd)。
分析:
新建的应用平台默认的分库是扩展开发库,标识是secd。导出来的补丁包中元数据会携带分库标识,然后根据分库标识找到数据库,执行建表语句等。
所以我们改掉补丁包中元数据的分库标识,让他建表语句执行到新的分库中即可。
那我们这里用一个环境来演示一个应用修改分库的过程,两个环境的也是同样的操作,区分开是在哪个环境做即可。
步骤:
第一阶段:在两个环境中新建分库。
在生产环境的mc中新建分库标识。我们这里新建了一个test的分库标识。
2.在生产环境的mc中选择你需要的数据中心,关闭启用按钮,并点击保存,方便后续修改数据中心。
3.在生产环境的mc中新建你的应用的分库信息,我们这里新建了测试库的实例为next_gjtest。然后提交建库并保存。(这里有一个很重要的经验点,提交建库的时候,后面的状态标识只有你新增的分库才能是黄色感叹号,其他的应该是绿色的,如果其他的也是黄色的,千万不要点击提交建库,否则你所有的数据库都可能被重新初始化!!!)
4.在生产环境的mc中启用该数据中心,并保存
5.在生产环境的mc中发布集群。
6.以上步骤在测试环境的mc中也执行一遍,保证两个环境现在有相同的分库信息。
第二阶段:导出补丁包,修改数据库路由信息。
7.在测试环境中修改应用的分库信息。
8.导出应用的补丁,以补丁方式导出。
9.解压导出补丁包的元数据,把里面的所有ip包都解压。然后修改源分库标识为目标分库标识。这里案例把secd改成test。建议通过文本编辑工具全局替换,notepad++或其他文本编辑器都有指定目录替换所有文件的功能。(注意,如果有些脚本文件,确实是要在secd库执行的话,那么还不能替换,这个操作需要对补丁包中的文件有一些认知)
10.修改完补丁包之后保存,并重新按照原来的目录结构压缩。
第三阶段:上传补丁包,并验证。
11.如果是目标环境没有部署过,本步骤可以忽略。如果是目标环境有应用,或者是同一个环境中操作的话,需要先删除之前的应用,删除之后元数据会同步删除,否则上传补丁包的时候不会修改原来的元数据。(记得一定要备份以防万一!)我们案例在一个环境中演示,所以需要把这个应用删除,之前导出了应用包,所以也是有备份的。
这是删除之后的界面。
12.在生产环境的mc中上传修改过后的补丁包,并选择需要升级的数据中心。
13.选中刚上传的补丁包,点击升级。
14.升级过程中有什么异常可以查看日志定位问题,这里就不过多赘述。正常情况下就升级成功了。
15.我们可以看到开发平台里面,刚删除的应用又已经出现了。如果是两个环境的话,那就是生产环境中已经有了该应用。并且应用的分库信息也是到了新的测试库。
16.最后我们验证下数据库中表是否有创建,并且界面上新增的数据是否会进入到新的库表里。这里能看到,我们的test分库对应的数据库实例next_gjtest已经有了很多表,并且界面新增数据也会新增到对应的表中。
如果需要做数据迁移可自行通过sql脚本来迁移。
总结:
这里以同一个环境做的演示,不同的环境也是同样的方式。
目标环境已经有该应用的话需要先删除该应用,删除需要管理员权限的账号。
做这些操作之前记得备份数据。元数据备份就是导出补丁包,业务数据备份表或者库。
如果需要做数据迁移可自行通过sql脚本来迁移。
如果发现文章有什么问题欢迎大家指出,我将积极验证修改。如果有帮到你,还请来一波三连:关注,点赞,收藏【emoji】【emoji】。觉得有用也可以分享到公司群,惠及其他同事,感谢您的耐心观看~~~