mongodump 默认不导出 admin.system.users 和 admin.system.roles 等系统集合,需显式指定 --dumpDbUsersAndRoles 参数且配合 --db=admin(不可用 --uri),导入时须对应使用 --restoreDbUsersAndRoles。

为什么不能直接用 mongodump 导出 admin 库的用户数据
因为 mongodump 默认不导出 admin.system.users 和 admin.system.roles 这类系统集合——即使你显式指定 --db=admin,它也会跳过这些受保护的集合。这不是权限问题,而是工具设计限制。你执行后看到 admin/ 目录下空空如也或只有空的 .bson 文件,就是这个原因。
必须用 mongodump 加 --dumpDbUsersAndRoles 参数
这个参数是专为导出账号设计的开关,但它有硬性前提:必须配合 --db 指定单个数据库(即 --db=admin),且不能用 --uri 形式连接字符串。否则会报错 error parsing command line options: --dumpDbUsersAndRoles requires --db to be specified。
mongodump --host=dds-uf66dd9c38f2a41756-pub.mongodb.rds.aliyuncs.com --port=3717 --username=root --password=Dsy%40123 --authenticationDatabase=admin --db=admin --dumpDbUsersAndRoles --out=/backup/admin_users- 导出结果不是
.bson,而是一个admin/子目录,里面包含system.users.bson、system.roles.bson和对应的.metadata.json - 注意:密码中含特殊字符(如
@)必须 URL 编码,否则连接失败;%40是@的编码,别写成@或\@
mongorestore 导入时必须加 --restoreDbUsersAndRoles
和导出对称,导入也不能靠常规方式。直接把 admin/ 目录扔给 mongorestore,它会忽略那两个系统集合文件。必须显式启用恢复账号的开关,并确保目标集群的 admin 库可写(即你登录的账号有 userAdminAnyDatabase 角色)。
mongorestore --host=143.223.43.130 --port=217 --username=admin --password=Xdsdsu%40123 --authenticationDatabase=admin --restoreDbUsersAndRoles /backup/admin_users- 路径必须指向
/backup/admin_users(即包含admin/子目录的父目录),不能写成/backup/admin_users/admin - 如果目标集群已有同名用户,新导入会覆盖其密码和角色,但不会删除原用户——除非你额外加
--drop,但这个选项对系统集合无效,慎用
跨集群同步账号前必须检查三件事
账号同步失败,八成卡在这三个地方:
- 源集群和目标集群 MongoDB 版本差不能超过一个主版本(如 6.0 → 7.0 不行,6.0 → 6.3 可以),否则
system.roles的字段结构可能不兼容 - 目标集群的认证库(
--authenticationDatabase)必须是admin,且你用于登录的账号在该库中拥有userAdminAnyDatabase+readWriteAnyDatabase角色 - 阿里云 MongoDB 等托管服务默认禁用
system.*集合直连操作,需在控制台开启「高级权限」或联系技术支持白名单放开,否则命令会静默失败或报not authorized on admin to execute command
@、/、: 时,不编码就根本连不上源库;而版本不匹配会导致导入后用户能列出来,但登录时报 Authentication failed。


















