root 无法对数据库执行 listCollections 命令

Dar*_*nik 5 authentication mongodb

我有root用户的凭据,我正在使用这些凭据来自动执行 db 备份。主要目的是为自动数据库备份创建原型,为简单起见,我使用root。脚本(我从文章中借用)如下所示:

#!/bin/bash

#Force file syncronization and lock writes
mongo admin -u "root" -p "root" --eval "printjson(db.fsyncLock())"

MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_DATABASE="mydb" #replace with your database name

TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="mydb" #replace with your bucket name on Amazon S3
S3_BUCKET_PATH="backup/mongo"

# Create backup
$MONGODUMP_PATH -d $MONGO_DATABASE

# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP

# Upload to S3
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.tar

#Unlock database writes
mongo admin -u "root" -p "root" --eval "printjson(db.fsyncUnlock())"
#Delete local files
#rm -rf mongodb-*
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

失败:获取数据库集合时出错mydb:运行时出错 listCollections。数据库:mydb错误:无权mydb执行命令 { listCollections: 1, cursor: {} }

不是root拥有对所有数据库的所有访问权限吗?我有点害怕我可能会遇到我想用 root 取代某些东西但它没有权限的情况。这是发布问题的根本原因。我想避免以后出现这样的意外。

Dar*_*nik 5

上面提到的错误对我有误导性。但是我的脚本是错误的或不完整的。

如果您查看我的脚本中的以下行:

$MONGODUMP_PATH -d $MONGO_DATABASE
Run Code Online (Sandbox Code Playgroud)

我没有在 Mongodump 命令中提供任何用户,因此没有提供错误消息。如果我重写该行,如下所示:

$MONGODUMP_PATH -d $MONGO_DATABASE --authenticationDatabase "admin" -u "dbowner" -p "pwd"
Run Code Online (Sandbox Code Playgroud)

然后错误消失。