mongodb架設筆記
作業環境是linux...windows的話應該只差在預設檔案的路徑吧?一些預設值:
service script路徑: /etc/init.d/mongod
config file預設路徑: /etc/init/mongodb.conf
手動操作流程:
- 安裝mongodb
- 以無認證模式啟動 「mongod --dbpath <自行指定資料庫路徑> --bind_ip=127.0.0.1 --logpath <logpath>」
(「--bind_ip=127.0.0.1」:只允許自機連線,比較安全) - 進入mongo db終端 「mongo --host localhost --port 27017」
- 進入admin database : mongodb指令「use admin」
- 在admin db裡面新增可以管理user的較高權限帳號。(沒有的話,之後要管理db就得把mongo切回無認證模式,比較麻煩)(指令請參考下面的「mongo基本操作指令」)
- 在admin db裡面新增其他一般權限的帳號,記得要指定db名稱。(指令請參考下面的「mongo基本操作指令」)
- optional:進入特定db,新增其他一般權限的帳號。(此時的roles不需指定db名稱,指定了似乎也沒有影響)
- 修改預設的config檔: /etc/init/mongodb.conf
全手動裝的話可以到這裡取檔案 - 登出mongo終端,以認證模式重啟mongodb(加上參數--auth) 「mongod --auth --config /etc/init/mongodb.conf」
注意事項:
- mongodb有3個預設db: admin / local / config。 其中local跟config是不能建立帳號的。三個都不能拿來做一般的資料存取使用。
- mongodb的帳號權限設計,是以每個db為分別。admin裡面建立的帳號的權限可以橫跨不同db。但是admin的帳號要分別對db指定權限的話,需要指定db名稱。
- admin跟其他db裡面同時存在同一個帳號,不同密碼的話? 就看登入的時候指定的db是哪個。密碼也要用那一組才會登入成功。也就是說想要跨db存取,必須登入admin db。
- 要是在其他db裡面建立的帳號的權限設定錯誤(role所指定的db不是當前的db)? 登入會成功,但是在做讀寫的時候會出錯。
- 若是以admin db的帳號做mongodump / mongorestore, 必須加上參數「--authenticationDatabase admin」
mongod啟動之後過約7秒就會回到shell, 直接執行mongod的話不需用「&」強制回shell。
可以在發現不會回到shell之後再加「&」。
mongo基本操作指令
- mongo終端啟動:mongo --host localhost --port 27017
- list database : db.adminCommand( { listDatabases: 1 } ) (只有admin帳號可以list database)
- use database: use <database name>
不存在的db也可以切換。mongodb會在有資料更動(像是新增一個table的一筆資料,或是新增使用者)的時候,開始建立新db的資料。 - list collections: db.getCollectionInfos()
- 建立/更新 user: 一定要使用use <dbname> 切換到某一個db裡面(一開始只有admin)才能建立和更新user,要不然會出錯。在admin裡面的話可以操作某位user在各個db裡面的權限。
db.runCommand(
{
createUser: "username",
pwd: "password",
roles: [{role:"userAdmin",db:"admin"}]
})
更新user的指令:
db.runCommand(
{
updateUser: "username",
pwd: "password",
roles: [{role:"userAdmin",db:"admin"}]
})
- 進入mongo 終端之後的登入指令:
db.auth("username","password")
- 一般db使用者的權限,給到dbAdmin即可。給到userAdmin的話,帳號就可以自我加大權限,比較不建議。
- admin使用者的特殊權限:
readAnyDatabase > 讀取所有資料庫
readWriteAnyDatabase > 讀寫所有資料庫
userAdminAnyDatabase > 管理所有資料庫使用者
dbAdminAnyDatabase > 所有資料庫的管理者
root > 最高權限
Troubleshooting:
- mongod啟動遇到 ERROR: child process failed, exited with error number 1
原因:log path檔案或是pid path檔案權限不足。像是預設的mongod.conf是寫到/var/log,pid是寫到/var/run,不會自動建立目錄,要手動建好並設定好存取權限。
- ERROR: child process failed, exited with error number 14:
原因:這時應該可以看log了(強烈建議一定要在mongod.conf或是執行的參數裡面指定log的暫存檔)。請注意log。
例如此狀況:
2019-10-01T23:35:20.298+0800 E NETWORK [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
所以把 /tmp/mongodb-27017.sock 檔案刪除之後即可
mongo db備份
/usr/bin/mongodump -h 127.0.0.1 -u <username> -p <password> -o <自訂的備份目錄>- 可以加參數 「-d <database name>」 限制只備份一個db。
- 備份目錄下面會自動產生各個db的目錄,不用擔心db的備份會互蓋。
mongo db回復
指令: mongorestore -h 127.0.0.1 -d <database name> <備份的路徑>- 有指定db的話,路徑需要指到備份目錄的下一層。
- 加上「--drop」 可以把原有的資料清掉。實際上機請務必再三確認是否要做。因為mongo的資料回復,做多次也不會成為加倍的資料(_id已經是固定值)。但是同一個id的資料,db內比備份新的話,db內的會被restore成舊資料)
0 件のコメント:
コメントを投稿