nstarter-mongo-migrator
nstarter Mongodb 数据库结构迁移框架
本项目通过工程化的方式管理不同应用服务所使用数据库的结构定义,实现对数据库初始化以及结构迁移的自动化管理能力。
主要功能
- 指定目标 schema 版本进行数据库结构迁移
- 执行 mongosh 脚本
- dump mongodb 数据库/表
使用说明
命令行使用
nstarter-migrator
Migrate mongodb to target schema.
Commands:
nstarter-migrator migrate Migrate mongodb to target schema.
[default]
nstarter-migrator run <script> Run mongo shell script.
nstarter-migrator dump [collection] Dump mongodb collection.
Options:
--help Show help [boolean]
--version Show version number [boolean]
-
migrate- 执行数据库 schema 迁移,迁移工具默认行为当未指定 schema 版本时,使用
schemas目录下提供的最新版本。 当通过SCHEMA_VERSION环境变量指定了目标版本时,则最高升级至目标版本 -
run <script>- 执行 mongosh 脚本 -
dump [collection]- dump 指定数据库/表- 当不指定
collection参数时,则 dump 整个数据库。 - 配置文件中可以通过
dump.query参数配置 dump 过程中的查询条件 (JSON)
参考 https://www.mongodb.com/docs/database-tools/mongodump/#syntax
- 当不指定
容器化使用
本工具建议通过容器化环境使用,使用过程中,只需要在挂载必要的配置/输入输出目录挂载点后,传递命令参数,即可执行对应的动作。
示例:
docker run -it -v $(shell pwd)/conf.d:/var/opt/migration/conf.d \
nstarter-mongodb-migrator:latest \
run ./tasks/migrate.js
环境变量
APP_NAME- 应用服务名称,可以作为配置文件中配置参数的替代SCHEMA_VERSION- 目标 schema 版本(可选)NODE_OPTIONS- 可用于控制 node.js & mongosh 运行时的环境参数
配置文件 conf.d/config.yml:
# 数据库连接配置
databases:
- name: app-db
servers:
- host: localhost
port: 27017
db: database
username: db-user
password: pa5sw0rd
- name: log-db
servers:
- host: localhost
db: log
srv: true # 使用 srv 协议连接
authSource: admin # 指定鉴权库,例如 Mongodb Atlas 账号通常都由 admin 库管理
username: db-user
password: pa5sw0rd
# 数据结构迁移任务配置
migrations:
- name: app-db
enabled: true # 迁移任务启用开关
db: app-db # 迁移任务上下文默认的 db
dbRefMappings: # 数据库引用映射
- name: log-db
as: logDb # (可选配置) 重映射规则,需满足 js 变量命名要求
schemaVersion: '20221201_001' # 目标 schema 版本,需指定字符串类型,避免 yaml 自动转换
# 脚本执行配置
runner:
db: app-db
dbRefMappings:
- name: log-db
as: logDb
# 数据导出配置
dump:
db: app-db
readPreference: primary
gzip: true
oplog: false
output: ./output/dump.gz
query: ./conf.d/dump_query.json
dryRun: false
system:
log: # 日志输出配置
console:
enabled: true
level: info
colorize: true
file:
enabled: true
level: info
dir: ./log/
⚠️ 注意:
- MongoDB Atlas 服务提供的实例连接,通常使用 SRV 协议连接,需要在配置中指定
srv: true参数。- 对于 MongoDB Atlas 服务,需要指定
authSource: admin,用于指定鉴权库。
实验性功能
- 在 dump 任务执行过程中,允许通过 pipe 指定管道命令,直接将 dump 结果进行管道输出。当指定管道输出时,文件输出配置不再起作用。
目录结构
.
├── conf.d # 配置文件
│ └── config.example.yml # 示例配置文件
├── env # 运行时环境配置定义
│ ├── mongosh.conf # mongosh 配置文件
│ ├── mongoshrc.js # mongosh 初始化配置
│ └── package.json # 运行时环境工具包依赖配置
├── log # 日志输出目录
├── output # 默认的结果输出目录
├── resources # 资源文件
├── schemas # 示例 schema 结构定义,实际应用场景下会被替换为实际数据库机构定义
├── scripts # 脚本目录
│ ├── hooks # 钩子目录
│ │ ├── pre_hook.sh # 执行前钩子脚本
│ │ └── post_hook.sh # 执行后钩子脚本
│ └── entrypoint.sh # 容器入口脚本
├── tasks # mongosh 任务脚本目录 (js)
├── src # 工程源码