自動目錄
隔了快一年才出這篇,這篇補充更多資料庫的操作。
群組文章
[Linux] mongodb 初步--1/3 安裝及基本操作[Linux] mongodb 初步--3/3 權限和幫助
資料表和資料庫
前面有言,Mongo的資料表不叫TABLE,而叫collection,而Mongo的資料庫也叫database,簡稱dbs:
查看資料庫
> show dbs
admin (empty)
local 0.078GB
test (empty)
上面的admin資料庫是mongo設定權限使用者的地方,相常於Mysql的mysql資料庫。在>=2.4版後也可以用:
> show databases
查看資料表
> show collections
<<沒設定的話什麼都沒有出現>>
查看使用者
> show users
<<沒設定的話什麼都沒有出現>>
建立資料庫,只要use,沒有的話系統會自建
> use mydb
刪除資料庫somedb,請小心,mongo都不會問直接刪
> use somedb
> db.dropDatabase()
幫助
查看幫助
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
幫助還分很多項,要查看資料庫方面幫助:
> db.help()
資料表方法的幫助
> db.你的collection名.help()
切片的幫助
> sh.help()
複本組的幫助
> rs.help()
權限
在Mongodb裡和MYSQL一樣裝完是沒有帳號和密碼的(註mysql有root最高權限但是不需密碼),因此必須要先幫整個Mongodb Server設定一組最高權限的管理帳號,當此帳號設定之後,再幫個別資料庫設定用戶才會有作用。
在已有設定帳密的mongodb中輸入帳密
先使用admin資料庫才能輸入帳密
> use admin
打入帳密
> db.auth('帳號', '密碼')
在剛裝好的mongo裡是沒有帳密的設定,我們可以新增使用者帳密[1]
# mongo
MongoDB shell version: 2.6.5
connecting to: test
建立全域最高權限使用者
> db.createUser(
{
user: "adminname",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
指定資料庫reporting權限,建立限定資料庫及限定權限的使用者
>use reporting
db.createUser(
{
user: "reportsUser",
pwd: "12345678",
roles: [
{ role: "read", db: "reporting" },
{ role: "read", db: "products" },
{ role: "read", db: "sales" },
{ role: "readWrite", db: "accounts" }
]
}
)
查看使用者
> use reporting
> db.getUser("reportsUser")
刪除使用者
> db.dropUser('username')
連入具有帳密設定的mongodb,指定資料庫admin指令:
# mongo --port 27017 -u reportsUser -p 12345678 --authenticationDatabase reporting
資料庫搬移
先確定工作目錄,在資料庫搬移時如果不先指定目錄,他會將暫存檔放到 /var/lib/mongo/journal 中,然後如果檔案太大,就會把磁碟的空間吃光光,然後SERVICE就掛了,一開始我在這裡吃了虧[註一]...
> pwd()
/var/lib/mongo/journal
設定工作目錄
> cd('/home/mongos/config')
將163.17.40.X的資料庫tcweb2搬移過來為tcweb,帳號admin/密碼123456,目標資料庫不存在系統會自建
> db.copyDatabase('tcweb2', 'tcweb', '163.17.40.X', 'admin', '123456')
語法[3]
db.copyDatabase(fromdb, todb, fromhost, username, password)
搬移的過程~非~常~緩~慢~~100G的資料我搬了1.5個小時(同LAN)
註一
因為預設目錄是/var/lib/mongo/journal,切在 /中,這裡只有50G的空間,當我在快樂的按下搬移時就閃回家睡覺,想說明早來收成就好,但是第二天發現再也啟動不了:
# service mongod start
Starting mongod (via systemctl): Job for mongod.service failed. See 'systemctl st
[FAILED]
然後查看記錄檔 /var/log/mongodb/mongod.log有這樣的錯誤:
一時解決不了,後來心一橫把/var/lib/mongo/journal中的 j._* 刪除後再啟動就好了。
參考資料
[1] KeJyun學習日誌 http://blog.kejyun.com/2013/08/Authentication-Connect-MongoDB.html
[2] MONGOS DOC http://docs.mongodb.org/manual/tutorial/add-user-administrator/
[3] MONGODB DOC http://docs.mongodb.org/manual/reference/method/db.copyDatabase/
原文 2013-09-26 16:30:33