当我在 MongoDB(版本 3)中创建所有数据库的备份时:
mongodump --username bacUser --password 12345
没关系。但是当我尝试创建选定数据库的备份时:
mongodump --username bacUser --password 12345 --db test
它给了我这个错误:
失败:连接到数据库服务器时出错:服务器在 SASL 身份验证步骤中返回错误:身份验证失败。
当我在 MongoDB(版本 3)中创建所有数据库的备份时:
mongodump --username bacUser --password 12345
没关系。但是当我尝试创建选定数据库的备份时:
mongodump --username bacUser --password 12345 --db test
它给了我这个错误:
失败:连接到数据库服务器时出错:服务器在 SASL 身份验证步骤中返回错误:身份验证失败。
使用这个:
--authenticationDatabase admin
mongodump 和 mongorestore 命令需要存储 mongodb 用户凭据的数据库名称。(感谢@Zubair Alam)
这应该有效。
mongodump -h SERVER_NAME:PORT -d DATABASE_NAME -u DATABASE_USER -p PASSWORD
如果用户名或密码错误,也会弹出此错误。
mongodump --host <host-ip> --port 27017 --db <database> --authenticationDatabase admin --username <username> --password <password> --out ./Documents/
在所有的线索之后,我发现上面的工作命令可以从 mongdb 转储。
mongodump --collection coll_name --db DBname -u UName -p ***
--authenticationDatabase <admin/privileged> --host ip
--port portNo --out foldName
mongodump --authenticationDatabase admin -uroot -pyourpassword
这里 root 是用户名,yourpassword 是您的密码。
此命令将备份/转储当前目录中的所有数据库备份。
如果使用 --authenticationDatabase admin 仍然出现相同的错误,则可能是您的用户名和密码不正确。尝试添加具有适当角色的用户 db.createUser() (我也授予了写权限)
比运行以下命令:(如果您在本地运行,请忽略 -h)
mongodump -h <ip>:<port_number> -d db_name -u newUser -p newPassword -o /home/mongodump/
希望这可以帮助...
用于转储和恢复
mongodump --db nameDatabase --username userName --password password --authenticationDatabase admin --out mongodb\
mongorestore --db nameDatabase --username userName --password password --authenticationDatabase admin <path backup> --drop
以下步骤在 MongoDB 3.2 上对我有用:
蒙哥
使用管理员 db.auth("admin", "yourpassword")
如果返回 1,则密码正确。
然后将角色“备份”添加到您的管理员(或确保已添加此角色)。db.grantRolesToUser("admin", [{ role: "backup", db: "admin" }])
最后是 mongodump 命令。当我尝试将密码作为参数传递时,它对我不起作用。而是这样做:
mongodump --username admin --authenticationDatabase admin --db yourmongodatabase
然后在提示时添加您的密码。
这对我有用...
就我而言,mongodump
没有正确处理密码。解决方案是转义密码文字。
这不起作用:
mongodump -p my$password -o <output directory>
这确实有效:
mongodump -p 'my$password' -o <output directory>
在密码周围使用signle 引号。如果您在密码中使用任何特殊字符。这将解决您的问题。使用以下命令。
mongodump -d 数据库名 -u 用户名 -p '密码' --out 目录名
userAdminAnyDatabase 不足以在所有数据库上执行 mongodump,这就是您收到此错误的原因。您将需要一个具有以下特性的超级用户:
userAdminAnyDatabase
readWriteAnyDatabase
clusterAdmin
在所有数据库上运行 mongodump 的权限。
或者您只需要“备份”权限
db.grantRolesToUser('username', [{
role: 'backup',
db: 'name of ur authentication db'
}])
如果您使用该--uri
选项,则需要将authSource=admin
作为参数添加到连接字符串(假设您的用户在 admin 数据库中)
mongodump --uri="mongodb://user:pass@host1:27017,host2:27017,host3:27017/?replicaSet=rs0"
变成:
mongodump --db=test --uri="mongodb://user:pass@host1:27017,host2:27017,host3:27017/?replicaSet=rs0&authSource=admin"
尝试从 mLab 转储我的数据库信息时,我遇到了同样的问题。发生这种情况是因为我在2.x
本地和3.x
mLab 中有 mongo。将我的本地 mongo 升级到与 mLab 相同的主要版本允许我进行转储,从而解决了问题。
如果您使用的是 mLab,则可能是您本地 mongo 中的版本与 mLab 不匹配。默认情况下,Ubuntu 将安装 mongov2.x
而 mLab 是v3.x
. 您可以使用以下命令进行检查:
mongo --version
安装新的 mongo 版本:
sudo apt remove mongo-clients mongodb
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv D68FA50FEA312927
为 MongoDB 创建一个列表文件。
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get install -y mongodb-org
参考:https ://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/
现在您可以使用以下命令转储数据库:
mongodump -h <host>:<port> -d <database-name> -u <user> -p <password> -o <output directory>