程序跨版本自动升级,自动同步数据库的两种方案

执行 文件 sql 自动 更新 程序 数据库 方案 如果 版本 编程技术
发布日期 2022-11-14 更新日期 2022-11-14 阅读次数 96 文章字数 835

一个程序或多或少会涉及到数据库,跨版本自动升级时如果只是文件则覆盖即可,数据库则不那么容易,曾被这问题困扰,现在说一下思路。

首先,指定一个文件夹作为更新数据库的sql。

每次更新数据库进行修改后,把需要执行的sql保存到一个新的sql文件里。

sql文件提交的注意事项

客户端拉取到更新的sql文件,要执行sql文件里的内容,因为不可重复执行,也不知道客户端什么时候拉取什么时候执行。

如果sql里的脚本发生变更,则无法分割提取出变更后的sql,也就意味着不知道要执行的sql是什么。

如果每次提交都是新sql文件,提交就不可修改其内容,这能保证不出错误。

多种拉取执行的方法

程序的更新,可以有多种方式,下面简单的介绍3种

基于 zip 的更新。

这是最简单的一种更新,全量更新,适合体积较小的程序,解压zip,文件全部覆盖。【先解压到临时目录,再全部覆盖】

根据前面指定的sql文件夹,检测zip解压出来的文件,逐个对比是否新增了sql文件,如果存在新文件,则立刻执行,或不执行【3】

基于 GIT 等版本管理器

可以使用 GIT 或 SVN 进行代码同步,这时,依然是同理的。

根据 GIT 的新增文件钩子进行脚本编码,检测如果新增的文件,刚好是指定sql文件夹下的sql,则立刻执行,或不执行【3】

基于 Saas 的单文件更新

原理和前面差不多,也就是自己部署一个服务器,这是一个定制的服务器。

这时,服务器上始终有最新的程序文件。客户端点击更新, 逐个遍历所有文件,找出所有新增、修改文件【执行校验文件的哈希值判断文件是否相同】,再拉取新文件,如果拉取到指定sql文件夹下的sql,则立刻执行,或不执行【3】

执行更新sql的两种方案

这里解释前面标记的 【3】

自动执行方案:这里是指不需要手动点击执行,只要拉取到了符合的sql文件,则立刻执行执行。

手动执行方案:拉取到新文件时,不会自动执行,人工校验内容后,手动点击执行。

说一下两者的优缺点

自动执行正常来说更方便,但也更依赖于服务器端的正确推送,如果推送异常则客户端炸裂。

如果手动执行,则在修改系统核心表时,因为更新时没有自动执行,整个程序直接瘫痪【这也意味着必须开发独立于系统的组件,专门做sql的更新】。


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-197.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

执行 文件 sql 自动 更新 程序 数据库 方案 如果 版本

发表评论

相关推荐
朱丰华   |   1周前   |   sql · mysql · 字节 · 字符

mysql常用字段类型详解

44    评论    点赞
朱丰华   |   8个月前   |   git

git从缓存中移除数据git rm --cached

436    评论    点赞
朱丰华   |   1年前   |   linux · upx

Linux下安装UPX

450    评论    点赞
朱丰华   |   1年前   |   git · hub · 仓库

go克隆并引用github仓库

162    评论    点赞
朱丰华   |   1年前   |   sql · mysql

mysql Timestamp或dateTime格式筛选

138    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

196    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

223    评论    点赞
朱丰华   |   1年前   |   js · 重复

js如何避免重复监听addEventListener事件?

147    评论    点赞
朱丰华   |   1年前   |   go · gopath

Go自定义包并安装(GOPATH)

131    评论    点赞
朱丰华   |   1年前   |   编译 · linux · 平台

Go 交叉编译 (跨平台编译)

182    评论    点赞
朱丰华   |   1年前   |   mysql · 变量 · sql

MySQL实现行号-自定义变量

123    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

111    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

131    评论    点赞
朱丰华   |   1年前   |   sed · 文件

Shell 指定行处理head、tail、sed

167    评论    点赞
朱丰华   |   1年前   |   linux · 内容

linux环境下,对于一个大文件,如何查看其中某行的内容

80    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 行数

linux 取得文件行数

60    评论    点赞
朱丰华   |   1年前   |   下载 · 请求

idm、浏览器下载发送两次下载请求

155    评论    点赞
朱丰华   |   1年前   |   sql · mysql

mysql GROUP_CONCAT 顺序排序

95    评论    点赞
朱丰华   |   1年前   |   文件 · linux · 修改

linux文件的三个时间atime,mtime,ctime分别表示什么?

292    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 统计

linux递归统计文件夹下的文件数量

181    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞