mongodb数据库迁移变更的解决方案(mongodb数据迁移其他主机)奔走相告

随心笔谈9个月前发布 admin
209 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了使用开源工具 `migrate` 来记录数据库变更记录的方案。其核心内容包括: 1. **解决背景**: - 在数据库版本迭代过程中,缺乏变更历史记录,导致升级不同版本环境时需要大量时间查找记录。 - 提供了一种自动记录数据库变更的方式。 2. **工具介绍**: - 使用开源库 `migrate`,支持多种数据库类型(如 MongoDB)。 - 通过命令行方式操作,无需开发人员参与。 3. **操作流程**: - 通过 `GitHub` 下载 `migrate` 最新二进制文件包。 - 使用命令行工具 `migrate` 创建变更记录文件,分为 `up`(升级)和 `down`(降级)两种情况。 - 每个变更记录文件包含 `version`、`title` 和 `extension` 等字段。 4. **示例操作**: - 创建 migrations 文件夹并使用命令 `migrate create` 生成文件。 - 在 MongoDB 中进行初始化操作,并验证数据是否插入成功。 5. **维护意义**: - 通过变更记录,无需开发人员维护数据库,简化部署流程。 - 支持自动检测数据库版本,Force 修改版本号等功能。 总结:文章重点介绍了如何利用 `migrate` 工具自动记录数据库变更,简化版本迭代和升级管理过程。



目录前言使用
安装
简单使用
后续

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

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

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

​ 使用到开源库: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”: [
]
$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中oplog介绍和格式详析利用MongoDB中oplog机制实现准实时数据的操作监控剖析后OpLog订阅MongoDB的数据变更就没那么难了

© 版权声明

相关文章