如何从Google Cloud Compute Engine>Storage>Disk导出MongoDB数据
GKE遗留Persistent Disk提取MongoDB数据操作步骤
步骤1:创建临时GCE实例并挂载遗留Mongo磁盘
- 确认原Mongo磁盘所在的区域/可用区,必须创建同可用区的临时GCE实例,操作系统推荐选Debian 11/12或者Ubuntu 22.04,配置2核4G即可满足需求
- 实例创建完成后进入实例详情页,点击「编辑」,在「额外磁盘」板块选择「附加现有磁盘」,选中你找到的原MongoDB对应PD,挂载模式选只读(防止误操作损坏原数据),记录你填写的设备名,比如
/dev/sdb - 实例启动后通过SSH连接到实例内部
步骤2:挂载磁盘到实例文件系统
- 创建挂载目录,执行命令:
sudo mkdir -p /mnt/mongo-data - 检测磁盘的文件系统类型,执行:
sudo blkid /dev/sdb(替换为你之前填写的设备名),GKE的PD默认多为ext4格式 - 只读挂载磁盘避免修改原数据:
sudo mount -o ro,noload /dev/sdb1 /mnt/mongo-data(如果blkid查到的分区名不同,替换sdb1为实际分区名即可) - 确认挂载成功:
ls /mnt/mongo-data,正常可看到MongoDB的数据目录,GKE部署的官方Mongo镜像默认数据路径多为/mnt/mongo-data/data/db,如果是自定义PV路径对应调整即可
步骤3:导出MongoDB数据
- 在临时实例上安装MongoDB工具包,Debian/Ubuntu下执行:
sudo apt update && sudo apt install -y mongodb-clients mongodb-database-tools - 从原磁盘的配置文件中找到MongoDB的账号密码(如果开启了认证),之后临时启动指向该数据目录的Mongo实例,执行:
mongod --dbpath /mnt/mongo-data/data/db --port 27017 --bind_ip 127.0.0.1
如果因只读挂载启动报错,可追加--nojournal参数 - 执行mongodump导出全量数据:
mongodump --uri "mongodb://127.0.0.1:27017" -o /tmp/mongo-backup,如果有认证则替换uri为带账号密码的格式:mongodb://用户名:密码@127.0.0.1:27017/ - 导出完成后
/tmp/mongo-backup目录下就是全量备份文件,可通过scp等工具把备份文件下载到本地,再导入到其他云服务商的新Mongo数据库即可
后续清理
- 数据导出完成后先卸载磁盘:
sudo umount /mnt/mongo-data - 回到GCE控制台将PD从临时实例上卸载,确认新库数据完全正常后,再决定是否删除临时实例和原PD,建议至少保留原PD一周作为冗余备份
内容的提问来源于stack exchange,提问作者AlexAcc
相关产品推荐
相关产品推荐

