最近在迁移测试环境数据,DBA大佬麻利地搭了新的MongoDB环境,程序都妥妥地部署到了新的测试环境,就剩下旧测试环境的数据没有迁移了。DBA大佬太忙,只能把这活儿摊派给我们了,没事,接下来咱们几招就能快速实现数据搬家。
如果你想迁移的数据就几条,那执行个insertMany
语句一把梭哈就可以了,如果要迁移的数据比较多,就需要用到MongoDB的mongodump
和mongorestore
工具了。
1. 导入少量数据
如果你想迁移的数据少得可怜?一条命令解决:
1 | # 选择数据库,如果不存在将自动创建 |
这种方式适用于不太大的数据批量,因为它需要将所有文档一次性加载到内存中。对于更大的数据量,可能需要考虑分批处理或使用如 mongoimport
等工具。
2. 将数据从一个MongoDB实例迁移到另一个
2.1 安装MongoDB工具
这里帅旋用的是Mac电脑,所以以mac为例。
确保Mac 上已安装 MongoDB,并且 mongodump
和 mongorestore
命令可用。如果未安装,可以通过 Homebrew 安装:
1 | brew tap mongodb/brew |
2.2 使用 mongodump 导出数据
首先,从源数据库 mongo1.itzhai.com
的 testDb
数据库中导出 user
集合的数据:
1 | mongodump --uri="mongodb://username:password@mongo1.itzhai.com:port/dbname?authSource=admin" --db=testDb --collection=user --out=itzhai-user |
注意事项:
- MongoDB 可能不是在尝试连接的数据库上进行身份验证,通常认证是在
admin
数据库进行。为此需要明确指定认证数据库。可以通过在连接字符串中添加authSource
参数来指定认证数据库,也可以使用参数--authenticationDatabase admin
来指定。 - 在这里,将
username
,password
,mongo1.itzhai.com
,testDb
替换为实际的值。 - 如果希望导出某个集合的数据,可以加上
--collection=collectionName
,collectionName为你希望导出数据的集合,否则导出整个库的数据。也可以使用参数--authenticationDatabase admin
来指定。 - 在上述命令中,
--out=itzhai-user
替换为希望保存导出文件的本地目录路径。
2.3 使用 mongorestore 导入数据
确保在执行这些操作前备份了所有重要数据。
然后,使用 mongorestore
将数据导入目标数据库 mongo2.itzhai.com
中的 targetDBName
数据库的 user
集合。使用 --drop
选项确保在导入前删除目标集合的现有数据:
1 | # 导入单个集合的数据 |
完成以上步骤后,你应该能够成功地将数据从一个 MongoDB 数据库迁移到另一个数据库,并覆盖目标数据库中的现有数据。
注意事项
-
确保在执行这些操作前备份了所有重要数据。
-
需要再uri中指定认证数据库,如上面的
authSource=admin
,也可以使用参数--authenticationDatabase admin
来指定。 -
如果希望在导入数据前,清空原来的数据,则需要在执行导入命令的时候添加**–drop参数**。
-
以上命令中使用的是 MongoDB 的连接字符串(URI)。根据你的配置,可能需要添加用户名和密码。例如,如果数据库需要身份验证,URI 应该如下:
1
mongodb://username:password@host:port
如何删除原集合数据
- 删除部分集合
- 如果想删除某些集合的数据,重新导入,可以在执行导入命令前,先删除集合数据:
- db.collectionName.deleteMany({})
- 这里的
collectionName
是想要清空数据的集合名。{}
是一个空的查询对象,集合示没有任何筛选条件,因此会匹配并删除所有文档。- 删除集合和数据
- 如果不仅想删除所有数据,而且想删除集合本身(包括其索引和其他相关属性),可以使用
drop()
方法。这个方法将完全删除集合。
- db.collectionName.drop()
- 同样,
collectionName
是想要删除的集合名。