Linux环境下MongoDB数据迁移实用技巧
根据场景选择工具是迁移成功的基础:
--oplogReplay
参数),适用于大多数迁移场景(如跨服务器、版本升级),但迁移速度较慢,需停机。/var/lib/mongodb
),速度快,适用于同构环境(版本一致、配置相同),但需停机并确保源服务器停止服务。sudo systemctl stop mongod
(或sudo service mongod stop
,取决于系统版本)。--oplog
参数记录迁移期间的操作,恢复时重放oplog保证一致性;对于关键业务,建议在低峰期迁移。mongod --version
查看版本。--oplogReplay
参数导出全量数据+oplog,恢复时重放oplog实现增量同步。命令示例:# 全量备份+oplog
mongodump --host source_host --port 27017 --username user --password pass --authenticationDatabase admin --db dbname --out /backup --oplog
# 恢复并重放oplog
mongorestore --host target_host --port 27017 --username user --password pass --authenticationDatabase admin /backup/dbname --oplogReplay
--noIndexRestore
参数跳过,手动创建索引优化性能。mongoexport
导出system.users
集合,再导入目标数据库:mongoexport --host source_host --port 27017 --db admin --collection system.users --out users.json
mongoimport --host target_host --port 27017 --db admin --collection system.users --file users.json
scp -C
或rsync -z
压缩数据,减少网络带宽占用。示例:rsync -avz --progress /var/lib/mongodb/ user@target_host:/var/lib/mongodb/
--bwlimit
参数限制rsync传输速度(单位:KB/s),避免影响其他业务。count()
命令核对集合文档数量,或使用mongodiff
工具(第三方)对比数据差异。示例:mongo target_host:27017/dbname --eval "db.collection_name.count()"
mongo source_host:27017/dbname --eval "db.collection_name.count()"
mongodump --host target_host --port 27017 --db dbname --out /rollback_backup
。#!/bin/bash
BACKUP_DIR="/backups/mongodb/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
mongodump --host localhost --port 27017 --username user --password pass --authenticationDatabase admin --out $BACKUP_DIR
tar -czvf $BACKUP_DIR.tar.gz $BACKUP_DIR
find /backups/mongodb -type d -mtime +7 -exec rm -rf {} \; # 删除7天前的备份
添加cron任务:crontab -e
→ 0 2 * * * /path/to/backup_script.sh
。pv
命令监控rsync或mongodump的进度,例如:rsync -avz --progress /var/lib/mongodb/ | pv -lep -s $(du -sb /var/lib/mongodb | awk '{print $1}') > /target/path/mongodb/
通过以上技巧,可有效提升Linux环境下MongoDB数据迁移的效率、安全性和可靠性,适应不同场景的需求。