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數據遷移的效率、安全性和可靠性,適應不同場景的需求。