服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - mongodb数据库迁移变更的解决方案

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

2021-09-27 16:20TangLyan MongoDB

众所周知mongodb数据库是一个非关系类型的数据,有着非常灵活和高性能的特点得到了开发者的喜爱,这篇文章主要给大家介绍了关于mongodb数据库迁移变更的相关资料,需要的朋友可以参考下

前言

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

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

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

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

使用

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

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

安装

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

​ 直接解压则可以使用;

简单使用

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

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

?
1
2
{version}_{title}.up.{extension}
{version}_{title}.down.{extension}

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

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

extension: 表示文件扩展名;

举例如mongodb数据库:

?
1
2
0001_init_database.down.json 
0001_init_database.up.json

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

?
1
2
3
4
# 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集合,进行初始化操作;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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 降级)

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

?
1
2
3
4
5
6
7
8
9
10
11
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命令,修改当前数据库迁移的版本号;

?
1
2
3
4
5
6
$ 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迁移变更内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7002486115995222046

延伸 · 阅读

精彩推荐
  • MongoDB分布式文档存储数据库之MongoDB分片集群的问题

    分布式文档存储数据库之MongoDB分片集群的问题

    这篇文章主要介绍了分布式文档存储数据库之MongoDB分片集群的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB 内存使用情况分析

    MongoDB 内存使用情况分析

    都说 MongoDB 是个内存大户,但是怎么知道它到底用了多少内存呢...

    MongoDB教程网10002020-09-29
  • MongoDBmongodb基本命令实例小结

    mongodb基本命令实例小结

    这篇文章主要介绍了mongodb基本命令,结合实例形式总结分析了MongoDB数据库切换、查看、删除、查询等基本命令用法与操作注意事项,需要的朋友可以参考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB凭什么跻身数据库排行前五

    MongoDB凭什么跻身数据库排行前五

    MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4月份的6.10分的增长也是仅次于微软SQL Server排名...

    孙浩峰3892020-05-22
  • MongoDBMongoDB安装图文教程

    MongoDB安装图文教程

    这篇文章主要为大家详细介绍了MongoDB安装图文教程,分为两大部分为大家介绍下载MongoDB和安装MongoDB的方法,感兴趣的小伙伴们可以参考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongodb实现定时备份与恢复的方法教程

    Mongodb实现定时备份与恢复的方法教程

    这篇文章主要给大家介绍了Mongodb实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    chenjsh364522020-05-13
  • MongoDB迁移sqlserver数据到MongoDb的方法

    迁移sqlserver数据到MongoDb的方法

    这篇文章主要介绍了迁移sqlserver数据到MongoDb的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    听枫xl9682021-01-03
  • MongoDBMongoDB中javascript脚本编程简介和入门实例

    MongoDB中javascript脚本编程简介和入门实例

    作为一个数据库,MongoDB有一个很大的优势——它使用js管理数据库,所以也能够使用js脚本进行复杂的管理——这种方法非常灵活 ...

    MongoDB教程网6982020-04-24