MongoDB数据备份与迁移

MongoDB数据备份与迁移

参考链接:

  • https://www.cnblogs.com/you-men/p/14675290.html#_label2
  • https://docs.mongoing.com/guan-li/mongodb-backup-methods#shi-yong-mongodump-bei-fen
  • https://www.cnblogs.com/dbabd/p/13259147.html

MongoDB备份工具简介

  • mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式
  • mongodump/mongorestore 导入/导出的是BSON格式
  • JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性
  • JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引(后边版本支持恢复时保留索引信息了,但是目前网络上主流的博客都说不支持,有点NT),账户等其他基础信息。使用时应该注意
  • mongodump uses Extended JSON v2.0 (Canonical) format for the metadata files. To parse these files for restore, use mongorestore, which supports Extended JSON v2.0 (Canonical or Relaxed mode) format

MongoDB数据备份/还原(mongodump/mongorestore)

  • MongoDB环境: 6.0.3
  • 如果你的数据库比较小(<100GB),并想完全控制你的备份文件。那么 MongoDump 和 MongoRestore 就是最佳搭档。通过这两个 mongo 脚本命令你可以手动备份数据库或集合(collections)。Mongodump 会将将所有数据以 Binary JSON(BSON)格式转储到指定位置。 Mongorestore 可以将这些 BSON 文件来还原到你的数据库
  • 默认情况下 mongodump 不获取 local 数据库里面的内容
全库备份还原(针对副本集)
# 1.随便进入mongodb容器,一般情况下是-0为主节点
root@tcs-x-1 ~]# kubectl exec -it pdos-mongodb-0 -n pdos  /bin/bash

# 2. 查询当前哪个节点为主节点(二个方式都可以), .primary为返回Json的字段
I have no name!@pdos-mongodb-0:/$ mongosh --port 27017 -u root -p rootPassword --authenticationDatabase admin --eval "rs.isMaster().primary"
pdos-mongodb-0.pdos-mongodb.pdos.svc.cluster.local:27017

I have no name!@pdos-mongodb-0:/$ mongosh --port 27017 -u root -p rootPassword --authenticationDatabase admin --eval "rs.isMaster().ismaster"
true

# 3. 进入主节点容器进行数据备份,这里可以看出pdos-mongodb-0为主节点,
# 3.1  -o 执行备份路径
# 3.2 --authenticationDatabase 指定认证库
# 3.3 --gzip 备份的时候同时压缩一下,备份的bson全部为压缩格式
mongodump --port 27017 -u root -p rootPassword --authenticationDatabase admin -o /tmp/mongodb-backup --gzip

# 4. 将容器内的备份文件拷贝到新mongodb库下面(需要在主节点进行操作)
[root@tcs-x-1 ~]# kubectl cp pdos-mongodb-0:/tmp/mongodb-backup ./mongodb-backup -n pdos
tar: Removing leading `/' from member names

[root@tcs-x-2 ~]# kubectl cp mongodb-backup pdos-mongodb-0:/tmp/mongodb-backup -n pdos

# 5. 还原数据库(会还原所有库)
mongorestore --port 27017 -u root -p rootPassword --authenticationDatabase admin --gzip /tmp/mongodb-backup
单个库备份还原(针对副本集)
  • 针对pdos业务数据库迁移,这个待迁移的库用户账号什么的已使用bitnami chart部署时初始化好了
# 1.随便进入mongodb容器,一般情况下是-0为主节点
root@tcs-x-1 ~]# kubectl exec -it pdos-mongodb-0 -n pdos  /bin/bash

# 2. 查询当前哪个节点为主节点(二个方式都可以), .primary为返回Json的字段
I have no name!@pdos-mongodb-0:/$ mongosh --port 27017 -u root -p rootPassword --authenticationDatabase admin --eval "rs.isMaster().primary"
pdos-mongodb-0.pdos-mongodb.pdos.svc.cluster.local:27017

I have no name!@pdos-mongodb-0:/$ mongosh --port 27017 -u root -p rootPassword --authenticationDatabase admin --eval "rs.isMaster().ismaster"
true

# 3. 查询主节点目前有哪些库
I have no name!@pdos-mongodb-0:/tmp$ ·
admin     140.00 KiB
config    360.00 KiB
local     207.60 MiB
tud_pdos  814.39 MiB

# 4. 进入主节点容器进行数据备份,这里可以看出pdos-mongodb-0为主节点,
# 4.1  -o 执行备份路径
# 4.2 --authenticationDatabase 指定认证库
# 4.3 --gzip 备份的时候同时压缩一下,备份的bson全部为压缩格式
# 4.4 -d 备份哪个数据库
mongodump --port 27017 -u root -p rootPassword --authenticationDatabase admin -d tud_pdos -o /tmp/mongodb-backup --gzip

# 4. 将容器内的备份文件拷贝到新mongodb库下面(需要在主节点进行操作)
[root@tcs-x-1 ~]# kubectl cp pdos-mongodb-0:/tmp/mongodb-backup ./mongodb-backup -n pdos
tar: Removing leading `/' from member names

[root@tcs-x-2 ~]# kubectl cp mongodb-backup pdos-mongodb-0:/tmp/mongodb-backup -n pdos

# 移除pdos生成db
mongosh --port 27017 -u root -p rootPassword --authenticationDatabase admin --eval "db.getSiblingDB('tud_pdos').dropDatabase()"
{ ok: 1, dropped: 'tud_pdos' }

# 5. 还原数据库,还原tud_pdos数据库下所有的collection
# 5.1 --nsInclude 还原tud_pod数据库下面所有的collection
# 5.2 --drop 在导入前,删除每个collection,不是迁移场景请勿使用该参数
# 5.3 --keepIndexVersion 阻止mongorestore还原时升级已存在的索引版本
# 5.4 --maintainInsertionOrder 维持插入的顺序,保证_id索引是一致的(理论上),选项从版本4.2开始引入,如果指定该选项,mongorestore在还原导入文档时以实际导出时的插入顺序一致,这其中包括批量写文档的顺序以及在批量中文档的插入顺序,在早期版本中只能保证批量写文档的顺序。如果指定该选项同时也指定了选项--stopOnError和设置选项
# 5.5 --stopOnError 遇到错误时终止
# 5.6 --preserveUUID 保留collection的UUID
mongorestore --port 27017 -u root -p rootPassword --authenticationDatabase admin  --nsInclude 'tud_pdos.*' --keepIndexVersion --maintainInsertionOrder --stopOnError --preserveUUID --drop --gzip /tmp/mongodb-backup


# 6. 验证_ID是否一致

MongoDB迁移后数据校验

# 数据校验,目前数据校验主要分三个部分
	判断两个数据库的表数量是否一致
	判断两个数据库每个表中的数据量是否一致
	判断两个数据库每个表的索引是否一致
	判断两个数据库中每个表的前 10 条数据是否一致
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺仔_牛奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值