mongodb数据库迁移变更的解决方案


Posted in MongoDB onSeptember 04, 2021

前言

在版本迭代过程中,存在数据库变更的几率,如增加某张表某个字段,删除某个字段等;​

 缺乏变更历史的记录,要么在升级多套不同版本环境时,需要耗费大量时间去寻找数据库变更记录以及执行脚本;

​ 该方案提供一种数据库变更记录方式;

​ 使用到开源库:migrate, 目前已经支持多种不同类型数据库(可视化目前使用的为mongodb,已经支持);

使用

​ migrate提供两种方式进行变更操作:1. 命令行方式  2. SDK方式(使用Go)

​ 在本方案中使用的为命令行方式(官方文档)。

安装

​ 通过GitHub下载最新二进制文件包: github.com/golang-migr

​ 直接解压则可以使用;

简单使用

​ 每一次数据库的变更都分为两种情况:up(升级版本)和down(降级版本);

​ 所以每一次变更记录的编写都需要两个文件,

{version}_{title}.up.{extension}
{version}_{title}.down.{extension}

version为当前的版本号,可使用顺序序号或者时间戳进行表示,程序会对第一个'_'前的字符当成版本号;

title用于记录当前的变更的主题,主要是对用户有较好的提示作用;

extension: 表示文件扩展名;

举例如mongodb数据库:

0001_init_database.down.json  
0001_init_database.up.json

在创建迁移文件时,可以使用migrate create 命令进行创建,如

# migrate create [-ext E] [-dir D] [-seq] [-digits N] [-format] NAME
$ migrate create -ext json -dir migrations -seq init_database
~/migrations/000001_init_database.up.json
~/migrations/000001_init_database.down.json

参数介绍:

  • ext: 文件扩展名;
  • dir:  创建的目录;
  • seq: 是否以序号模式进行创建;
  • digits: 序号长度(默认为6);
  • format:时间格式。

使用该文件对mirations数据库中的test集合,进行初始化操作;

$ cat migrations/000001_init_database.up.json
[
    {
       "insert": "test",
       "documents": [{"name": "aaa"}]
    }
]
$migrate -verbose -source file://migrations --database mongodb://root:pwd@<数据库IP>:27017/migrations?authSource=admin  up
2021/08/31 14:26:06 Start buffering 1/u init_database
2021/08/31 14:26:08 Read and execute 1/u init_database
2021/08/31 14:26:08 Finished 1/u init_database (read 1.516025172s, ran 75.143261ms)
2021/08/31 14:26:08 Finished after 1.654028624s
2021/08/31 14:26:08 Closing source and database

参数解释:

  • verbose: 打印当前变更日志
  • source: 变更文件存放目录,最好进入本项目的migrations目录下执行, 使用ls可查看当前所有数据库
  • database: 为monogdb连接uri
  • up: 升级  (使用 down 降级)

查看数据库,发现数据已经插入到了数据库中:

mongos> use migrations;
switched to db migrations
mongos> show collections;
migrate_advisory_lock
schema_migrations
test
mongos> db.test.find()
{ "_id" : ObjectId("612e3f5febb6de55cdeec1de"), "name" : "aaa" }
# 多生成了两张表,其中schema_migrations为迁移数据记录;
mongos> db.schema_migrations.find();
{ "_id" : ObjectId("612dcb8023fbb5b85368b874"), "version" : 1, "dirty" : false }

修改version能够控制migrate的升级版本;当本身数据库的版本已经高于最新版本时,可以使用force命令,修改当前数据库迁移的版本号;

$ migrate -verbose -source file://migrations --database mongodb://root:pwd@<数据库IP>:27017/migrations?authSource=admin force 000004
2021/08/31 14:34:52 Finished after 89.470244ms
2021/08/31 14:34:52 Closing source and database
# 查看数据库版本已经修改到了4版本,再次进行up操作则会被告知no change;
mongos> db.schema_migrations.find();
{ "_id" : ObjectId("612dcd8c1e88c95afcb426fe"), "version" : 4, "dirty" : false }

后续

​ 在项目中维护一个数据库/配置文件变更历史,将项目重新部署时,能够通过变更历史,完成所有改动的变更;无需耗费人力去找相关开发;

到此这篇关于mongodb数据库迁移变更的文章就介绍到这了,更多相关mongodb迁移变更内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MongoDB 相关文章推荐
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
浅析MongoDB之安全认证
Jun 26 MongoDB
MongoDB安装使用并实现Python操作数据库
Jun 28 MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 MongoDB
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
Nov 01 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
Feb 24 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 #MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 #MongoDB
Mongo服务重启异常问题的处理方法
Jul 01 #MongoDB
MongoDB安装使用并实现Python操作数据库
浅析MongoDB之安全认证
Jun 26 #MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 #MongoDB
详解MongoDB的条件查询和排序
Jun 23 #MongoDB
You might like
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
offsetParent 算法分析
2010/04/05 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
js创建对象的方式总结
2015/01/10 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
pandas通过索引进行排序的示例
2018/11/16 Python
Django REST framework 分页的实现代码
2019/06/19 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
详解python的变量缓存机制
2021/01/24 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
简历自我评价模版
2014/01/31 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书