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使用profile分析慢查询的步骤
Apr 30 MongoDB
MongoDB 常用的crud操作语句
Jun 20 MongoDB
MongoDB安装使用并实现Python操作数据库
Jun 28 MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 MongoDB
mongodb数据库迁移变更的解决方案
Sep 04 MongoDB
MongoDB连接数据库并创建数据等使用方法
Nov 27 MongoDB
SpringBoot系列之MongoDB Aggregations用法详解
Feb 12 MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
MongoDB误操作后使用oplog恢复数据
Apr 11 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相当简单的分页类
2008/10/02 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python运用于数据分析的简单教程
2015/03/27 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
Python删除n行后的其他行方法
2019/01/28 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python argparse模块使用方法解析
2020/02/20 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
保险内勤岗位职责
2014/04/05 职场文书
爱心捐书活动总结
2014/07/05 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
身份证丢失证明
2015/06/19 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
2016大学军训心得体会
2016/01/11 职场文书