MongoDB 2.6不支持--gzip的集合归档及安全恢复方案咨询
MongoDB 2.6版本无--gzip参数的备份压缩解决方案
MongoDB 2.6的mongodump本身不支持内置gzip压缩,你可以直接调用系统原生的gzip工具实现归档,完全兼容后续mongorestore的恢复逻辑。
修改后的备份脚本
以下脚本直接通过管道把mongodump输出的内容传递给gzip压缩,不需要额外存储未压缩的临时文件,节省磁盘空间:
# 补充你要备份的数据库名,原脚本缺失该变量定义 db="你的实际数据库名" # 指定要备份的集合 collection_list="students loans.lib help.archive" # 数据库连接参数 host="127.0.0.1" port="27208" # 如果数据库不需要认证,可删掉下面两个变量和对应命令参数 username="你的数据库用户名" password="你的数据库密码" # 备份文件存储根目录 out_prefix="/apps/mongodb/uni/backup/mongodump" # 统一日期变量,避免跨天执行时日期后缀不一致 backup_date=$(date +%Y.%m.%d) for collection in $collection_list; do echo "正在备份集合:$collection" out_dir="${out_prefix}/${db}_${collection}.${backup_date}/" mkdir -p ${out_dir} # 备份集合数据并直接压缩 /apps/mongodb/server/2.6.2/bin/mongodump -u $username -p $password --host $host --port $port -d $db --collection $collection --out - | gzip > "${out_dir}/${collection}.bson.gz" # 备份集合元数据并直接压缩 /apps/mongodb/server/2.6.2/bin/mongodump -u $username -p $password --host $host --port $port -d $db --collection $collection --out - --metadataOut - | gzip > "${out_dir}/${collection}.metadata.json.gz" done
对应恢复方法
不需要升级mongorestore版本,两种恢复方式可选:
# 方式1:先解压再恢复 gzip -d /备份路径/students.bson.gz gzip -d /备份路径/students.metadata.json.gz /apps/mongodb/server/2.6.2/bin/mongorestore -u 用户名 -p 密码 --host $host --port $port -d 目标数据库名 --collection 目标集合名 /备份路径/students.bson --metadataFile /备份路径/students.metadata.json # 方式2:直接管道解压恢复,无需生成临时解压文件 gzip -c -d /备份路径/students.bson.gz | /apps/mongodb/server/2.6.2/bin/mongorestore -u 用户名 -p 密码 --host $host --port $port -d 目标数据库名 --collection 目标集合名 --metadataFile <(gzip -c -d /备份路径/students.metadata.json) -
补充说明
- 如果不想调整原有备份逻辑,也可以在原脚本的mongodump执行完成后,新增一行
gzip ${out_dir}/*.bson ${out_dir}/*.json直接压缩生成的未压缩文件,恢复前先解压即可,兼容性完全一致 - 对压缩率要求高的话,可以把命令中的
gzip替换为gzip -9,仅会小幅降低压缩速度 - 备份完成后建议随机抽取1-2个备份文件做恢复测试,验证数据完整性
- 如果数据库未开启认证,直接删除命令中
-u和-p对应的参数即可
内容的提问来源于stack exchange,提问作者Julia Rudnitckaia
相关产品推荐
相关产品推荐

