MongoDB在Ubuntu上的数据迁移流程及注意事项
在Ubuntu系统上迁移MongoDB数据,核心是通过官方工具链(mongodump/mongorestore、mongoexport/mongoimport)实现数据的高效转移,同时需关注环境准备、数据一致性及权限配置等关键环节。以下是具体操作指南:
环境检查
确保Ubuntu系统已安装MongoDB(可通过mongod --version验证服务端,mongo --version验证客户端)。若未安装,使用以下命令安装最新稳定版:
sudo apt update
sudo apt install -y mongodb
工具安装
若需使用mongodump/mongorestore(二进制备份工具)或mongoexport/mongoimport(JSON/CSV格式工具),需额外安装mongodb-org-tools包:
sudo apt install -y mongodb-org-tools
权限确认
确保源数据库与目标数据库的用户具备**读(source)和写(target)**权限。例如,源数据库用户需有read角色,目标数据库用户需有readWrite角色。
适用场景:全量/增量迁移、需要保留索引结构、迁移大量数据。
步骤1:备份源数据库
使用mongodump导出源数据库(如mydb)到指定目录(如/tmp/mongodump):
mongodump --uri="mongodb://source_host:27017" --db=mydb --out=/tmp/mongodump
若源数据库需要认证,添加--username、--password参数:
mongodump --uri="mongodb://username:password@source_host:27017/admin" --db=mydb --out=/tmp/mongodump
步骤2:传输备份文件到目标Ubuntu
若源数据库在远程服务器,使用scp将备份目录复制到目标机器:
scp -r /tmp/mongodump username@target_ubuntu_ip:/tmp/
步骤3:恢复数据到目标数据库
使用mongorestore将备份数据导入目标数据库(如mydb_target),--drop参数可先删除目标数据库(避免重复数据):
mongorestore --uri="mongodb://target_host:27017" --db=mydb_target --drop /tmp/mongodump/mydb
适用场景:导出为JSON/CSV格式、跨数据库系统迁移(如MongoDB→MySQL)、小批量数据迁移。
步骤1:导出单集合(JSON格式)
使用mongoexport导出源数据库的mycollection集合到mycollection.json:
mongoexport --uri="mongodb://source_host:27017" --db=mydb --collection=mycollection --out=mycollection.json
步骤2:传输JSON文件到目标Ubuntu
scp mycollection.json username@target_ubuntu_ip:/tmp/
步骤3:导入单集合到目标数据库
使用mongoimport将JSON文件导入目标数据库的mycollection集合:
mongoimport --uri="mongodb://target_host:27017" --db=mydb_target --collection=mycollection --file=/tmp/mycollection.json
适用场景:无需命令行、快速迁移少量数据。
数据量核对
对比源数据库与目标数据库的集合数量、文档数量是否一致:
# 源数据库文档数
mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.countDocuments()"
# 目标数据库文档数
mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.countDocuments()"
数据内容抽样
随机抽取部分文档,对比源与目标数据库的字段值是否一致:
# 源数据库抽样
mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.findOne()"
# 目标数据库抽样
mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.findOne()"
索引检查
确认目标数据库的索引是否与源数据库一致:
# 源数据库索引
mongo --uri="mongodb://source_host:27017" --eval "db.mydb.mycollection.getIndexes()"
# 目标数据库索引
mongo --uri="mongodb://target_host:27017" --eval "db.mydb_target.mycollection.getIndexes()"
数据一致性
迁移前停止源数据库的写入操作(或使用--oplog参数进行增量同步),避免迁移过程中数据变更导致不一致。
权限配置
若目标数据库启用了认证,需在命令中添加--authenticationDatabase=admin参数(如mongorestore --uri="mongodb://username:password@target_host:27017/admin")。
网络带宽
大批量数据迁移时,建议使用高速网络(如千兆以太网)或压缩备份文件(mongodump --gzip),减少迁移时间。
错误处理
若迁移过程中出现E11000 duplicate key error(重复键),可使用--drop参数删除目标数据库中的重复数据;若出现认证失败,检查用户名、密码及认证数据库是否正确。
通过以上步骤,可实现MongoDB在Ubuntu系统上的高效、安全迁移。根据数据量、格式需求选择合适的工具,能有效提升迁移效率并保证数据完整性。