基于k8s环境下mongodb备份恢复实战
#作者:Unstopabler
文章目录
- 1.备份恢复方案
- 1.1.备份恢复方案参考
- 1.2.备份过程示例
- 1.2.1.第一种备份mongodb数据方法
- 1.2.2.第二种备份mongodb数据方法
- 1.3.恢复mongodb数据示例:
- 1.3.1.第一种恢复mongodb数据方法
- 1.3.2.第二种恢复mongodb数据方法
1.备份恢复方案
1.1.备份恢复方案参考
以下为备份恢复方案,可作为参考,如下表格

1.2.备份过程示例
1.2.1.第一种备份mongodb数据方法
生产环境的备份方案如下:
一是备份的时候,尽量在业务减少的时候备份
二是通过mongodump工具带上参数–archive,可将数据文件备份到主机节点上。
kubectl exec -i mongo-0 -n mongodb -- \mongodump --host localhost --db testdb --archive --gzip \> ./$(date +%Y%m%d).archive.gz
执行结果生成20251015.archive.gz文件,如下图

1.2.2.第二种备份mongodb数据方法
生产环境的备份方案如下:
一是备份的时候,尽量在业务减少的时候备份
二是在容里创建指定的备份目录,
三是通过mongodump进行备份到指定的目录里
四是将备份文件从容器中拷贝到本地指定节点或者存储上
五清理掉容器里旧备份数据
六检验备份文件是否存在,主要检查.bson.gz和.json.gz文件
1.2.2.1.第一步先创建目录
先创建一个要备份数据的目录
[root@k8s-master ~]# kubectl exec -it mongo-0 -n mongodb -- mkdir -p /data/backup
1.2.2.2.第二步执行备份
[root@k8s-master ~]# kubectl exec -it mongo-0 -n mongodb -- mongodump --host localhost --gzip --out /data/backup

说明:
kubectl exec -it mongo-0 -n mongodb:进入 mongo-0 Pod
–host localhost:在 Pod 内部直接访问本地 mongod 实例
–gzip:压缩备份文件,节省空间
/data/backup:备份目录,需确保该路径存在或提前创建
1.2.2.3.第三步查看备份的文件

**1.2.2.4.**第四步,将备份文件cp到主机上,并查看备份文件是否存在
[root@k8s-master ~]# kubectl cp mongodb/mongo-0:/data/backup ./mongodb-backup-$(date +%Y%m%d)[root@k8s-master ~]# ls -R ./mongodb-backup-20251015/

看到两种.gz文件
一种是*.bson.gz为实际数据文件
一种是*.json.gz为元数据文件
注意:
mongodump 默认会生成大量小文件(每个集合一个 .bson 文件),
而这些文件必须先写入 Pod 的文件系统,无法通过标准输出到外部。
引入第二种备份方法
1.3.恢复mongodb数据示例:
1.3.1.第一种恢复mongodb数据方法
使用带 archive工具
kubectl exec -i mongo-0 -n mongodb -- \mongorestore \--host localhost:27017 \--db testdb \--archive \--gzip \
--drop
< backup.archive.gz
执行如下图:

登录验证,查看是否存在1000个数据

1.3.2.第二种恢复mongodb数据方法
以备份为.bson.gz和.json.gz的文件为主,不能以参数archive方式恢复。
第一步要将备份的文件拷贝到容器中,
第二步再执行如下命令,可以查看到finished restoring testdb.test恢复数据。

