2017-10-10 31 views
2

我有憑據root用戶,我正在使用這些憑證來自動執行數據庫備份。主要目的是爲自動數據庫備份創建原型,爲簡單起見,我使用。該腳本(我從文章借用)看起來像如下:root cant執行db上的listCollections命令

#!/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-* 

我收到以下錯誤:

Failed: error getting collections for database mydb : error running listCollections . Database: mydb Err: not authorized on mydb to execute command { listCollections: 1, cursor: {} }

心不是擁有遍及所有數據庫訪問?我有點害怕我可能遇到這種情況,我想用超級用戶取代某些東西,但它沒有權限。這是發佈問題的根本原因。我想在未來避免這樣的驚喜。

回答

2

上面提到的錯誤對我來說是誤導。但是我的腳本錯誤或不完整。

如果你看看下面的我的腳本行:

$MONGODUMP_PATH -d $MONGO_DATABASE 

我不是在提供指揮Mongodump,因此錯誤消息的任何用戶。如果我重寫該行如下:

$MONGODUMP_PATH -d $MONGO_DATABASE --authenticationDatabase "admin" -u "dbowner" -p "pwd" 

然後錯誤消失。

+0

很高興看到您找到了解決方案。另外,你應該考慮[automongobackup腳本](https://github.com/micahwedemeyer/automongobackup),它也是這樣做的。當你必須處理複製品或分片時,它非常有效。但是你仍然需要管理s3的上傳方面。 –