MongoDB(3)維護操作:連線 & 使用者管理 & 備份
阿新 • • 發佈:2019-01-10
MongoDB 入門專欄
啟動/關閉 mongodb 服務
啟動服務mongodb 服務的啟動方式由 2 種,直接通過指定啟動引數啟動,和通過配置檔案啟動,這兩種方式可以混合使用;# 指定啟動引數啟動 mongodb
$ mongod --dbpath=/usr/bin/mongodb-3.6.2/data --logpath=/usr/bin/mongodb-3.6.2/logs/mongo.log --appendlog
# 指定配置檔案啟動 mongodb
$ mongod -f /etc/mongod.conf
# 混合方式啟動 mongodb
$ mongod -f /etc/momgod.conf --auth配置文類似如下,類似於 properties 檔案的格式,這些配置引數和說明可以通過 mongod --help 獲取:
dbpath=/usr/bin/mongodb-3.6.2/data
journal=true
logpath=/usr/bin/mongodb-3.6.2/logs/mongod.log
logappend=true
bind_ip=127.0.0.1
port=27017
auth=true
關閉服務前臺執行關閉,如果啟動服務時沒有使用 --fork 引數,可以直接在前臺退出終端關閉;如果使用 --fork 指令是服務在後臺執行,需要向伺服器傳送 shutdownServer() 來關閉該資料庫:> use admin
> db.shutdownServer()
連線 mongodb
在終端連線 mongodb 的指令如下,使用指定使用者密碼連線指定資料庫;mongo -u user_name -p password file_name# 直接登陸 mongo
$ mongo
# 使用管理員密碼,以管理員許可權登陸本地預設埠(27017)的 mongodb
$ mongo -u assad -p mongo123 localhost/admin
# 使用使用者密碼(user=vancy,passowrd=mongo2233),登陸指定地址的 mongodb 資料庫(127.233.22.33:2233/article)
$ mongo -u vancy -p mongo2233 127.233.22.33:2233/article
退出資料庫連線終端和 mysql 一樣都是 exit 指令;mongo shell 其實使用 JavaScript 作為解釋引擎的,所以在裡面可以執行簡單的 js 程式碼,甚至可以建立方法,定義變數;
> 1 + 1
2
> var num = 2333
> num + 1000
3333
使用者管理
mongodb 預設安裝後並沒有存在管理員使用者,需要自己手動新增,mongodb 的使用者是和資料庫相關聯的,在某一個庫裡授權,就必須在某一個庫裡驗證,除了 admin 庫裡的授權可以用於任何庫之外,其他普通庫之間的授權和驗證是相互獨立的;建立使用者
使用 db.createUser() 在當前資料庫裡建立使用者,該函式含有以下鍵值對:- user:使用者名稱,值為一個 string;
- pwd:使用者密碼,值為一個 string;
- roles:使用者許可權規則,值為一個數組,每一個 陣列項含有以下鍵值對:
- role:許可權規則;
- db:指定使用許可權規則的資料庫,可以省略,預設 role 用於當前資料庫;
- 資料庫使用者角色
- read:只讀許可權;
- readWrite:讀寫許可權;
- 資料庫管理角色
- dbAdmin:資料庫管理許可權(包括執行管理函式(如索引集合建立刪除),檢視統計,訪問 system.profile)
- userAdmin:使用者管理許可權(允許讀寫 system.users 集合,建立、刪除、管理使用者);
- dbOwner:readWrite,dbAdmin,userAdmin 許可權合集;
- 所有資料庫角色
- readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabasem、dbAdminAnyDatabase
- 叢集管理角色
- clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 備份恢復角色
- backup、restore
- 超級使用者:
- root:超級許可權,擁有所有許可權;
# 連線 test 資料庫
> use test
# 在 test 庫下建立管理員賬戶,對 test 庫擁有管理許可權
> db.createUser({
... user:"admin1",
... pwd:"ad123",
... roles:[ { role:"dbAdmin", db:"test"} ] # 此處可以替換為 roles:[ "dbAdmin" ]
})
# 在 test 庫下建立普通使用者,對 test 庫只擁有讀寫許可權
> db.createUser({
... user:"user1",
... pwd:"1234",
... roles:[ { role:"readWrite", db:"test"} ] # 此處可以替換為 roles:[ "readWrite" ]
... })
想要管理非當前資料庫的使用者,只能在 admin 資料庫中才能做到,但是在 admin 庫中建立的 user 是儲存在 admin 庫的 system.users 集合中的,如下:> use admin
# 在 admin 庫中建立使用者 user3,擁有 testdb 庫的讀寫許可權,和 testdb2 庫的管理許可權
> db.createUser({
... user:"user3",
... pwd:"123",
... roles:[ { role:"readWrite", db:"testdb"},
{ role:"dbAdmin", db:"testdb2" } ]
... })
使用者驗證
在 mongodb 服務開啟了 --auth 啟動引數(使用驗證模式執行),使用者在訪問某個資料庫,在進行某些操作時需要進行驗證;登陸使用者有 2 種方式,一種是直接使用使用者身份登陸某個資料庫,一種是在使用過程中使用使用者身份驗證;# 直接使用 ueer3 的身份登陸本地資料庫 testdb
$ mongo -u user3 -p 123 localhost/testdb
> ....
# 在使用過程中進行使用者身份驗證
$ mongo
> use testdb
> show collections
2018-02-13T21:30:11.107+0800 E QUERY [thread1] Error: listDatabases failed: .... # 當前身分沒有檢視 testdb 的許可權
> db.auth('user3','123') # 驗證 user3 使用者的身份
> use testdb
> show collection
.....
檢視使用者資訊
使用db.system.users.find() 函式可以檢視的使用者資訊,注意使用該函式的使用者必須擁有使用者管理的資訊,該函式返回的使用者資訊的壓縮格式的,如果要檢視完整格式可以使用 db.system.users.find().pretty()> use test
# 檢視 test 庫的所有使用者資訊
> db.system.users.find().pretty()
....
# 檢視 test 庫中的 assad 使用者資訊
> db.system.users.find({user:'assad'}).pretty()
....
修改使用者資訊
使用者資訊的更新是用通過對 db.systems.users 集合進行 update 操作來實現的,注意使用該函式的使用者必須擁有使用者管理的資訊;# 更新 test 庫中的 user1 使用者的密碼
> use test
> db.system.users.update({user:'user1'},{$set:{'pwd':'mongo123'}})
刪除使用者
刪除使用者是用通過對 db.systems.users 集合進行 remove 操作來實現的,注意使用該函式的使用者必須擁有使用者管理的資訊;# 刪除 test 庫中的 user1 使用者
> use test
> db.system.users.remove({user:'user1'})
備份和恢復
資料備份
對於 mongodb 的資料備份可以使用自帶的 mongodump 工具進行,該和工具的呼叫原型如下:$ mongodump -h dbhost -d dbname -o dbdirectory
- -h:mongodb 所在的伺服器地址,可以指定 ip,或者 ip:port ,如:127.0.0.1或 127.0.0.1:27017;
- -d:需要備份的資料庫名稱,如:test;
- -o:儲存備份的路徑;
# 備份 test 資料庫
$ mongodump -h localhost:27017 -d /usr/local/bin/mongodb/data/test/ -o /usr/backup/mongodb/
# 備份所有資料庫
$ mongodump -h localhost:27017 -d /usr/local/bin/mongodb/data/ -o /usr/backup/mongodb/
資料恢復
對於 mongodb 的資料備份可以使用自帶的 mongorestore工具進行,該和工具的呼叫原型如下:$ mongodump -h dbhost -d dbname [--drop ] [--dir ] backpath
- -h,--host:mongodb 所在的伺服器地址,可以指定 ip,或者 ip:port ,如:127.0.0.1或 127.0.0.1:27017;
- -d, --db:需要備份的資料庫名稱,如:test,這個名稱可以和原來備份時候的命名不一樣;
- --drop:恢復的時候,先刪除當前資料,然後恢復備份的資料。
- --dir:備份資料所在位置,如:/user/share/backup/test。可以省略 --dir,不過路徑必須放在命令的最後;
# 從備份裡恢復 test 資料庫
$ mongorestore -h lcoalhsot:27017 -d /usr/local/bin/mongodb/data/test/ /usr/backup/mongodb/
# 從備份裡恢復所有資料庫
$ mongorestore -h lcoalhsot:27017 -d /usr/local/bin/mongodb/data/ /usr/backup/mongodb/