一、基礎(chǔ)語(yǔ)句
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的邯鄲網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
1.創(chuàng)建數(shù)據(jù)庫(kù)并查看當(dāng)前數(shù)據(jù)庫(kù)
> use wang
> db
2.查看數(shù)據(jù)庫(kù)的版本
> db.version()
3.刪除數(shù)據(jù)庫(kù)
> use wang
> db.dropDatabase()
4.插入文檔
> db.test.insert({ id : 1 , "name " : "wangchongyang" ,"age" : 19, " hobby":" read "})
5.更新文檔
> db.test.update({id:1},{$set:{ id : 11}})
6.刪除文檔
> db.test.remove({ id : 11})
7.查詢(xún)文檔
> db.test.find()
> db.test.findOne()
> db.test.find({ id : 11})
8.文檔排序
> db.test.find().sort().sort({ "id" : 1}) 1 升序,-1 降序
9.創(chuàng)建索引
> db.test.ensureIndex({ id : 1 }) 1 按升序創(chuàng)建索引 -1降序
10.刪除索引
> db.test.dropIndex( id )
11.聚合
> db.test.aggregate({ $group : { _id: "name",num : { $num : 1 }} })
12.備份與恢復(fù)
mongodump -h 127.0.0.1:27017 -d test -o /tmp/mongo_backup
mongorestore -d test /tmp/mongo_backup/*
13.去掉重復(fù)數(shù)據(jù)
> db.test.distinct( ' name' )
二、集合語(yǔ)句指導(dǎo)
1.查看集合幫助
db.test.help()
2.查看集合總數(shù)量
db.test.count()
3.查看表空間大小
db.test.dataSize()
4.查看集合所在的數(shù)據(jù)庫(kù)
db.test.getDB()
5.查看當(dāng)前集合狀態(tài)
db.test.stats()
6. 集合重命名
db.test.renameCollection("testdb")
7.刪除集合
db.testdb.drop()
8. 查看當(dāng)前數(shù)據(jù)庫(kù)所有集合
db.getCollectionNames()
9. 查看所有集合的狀態(tài)
db.printCollectionStats();
10.現(xiàn)有表以及數(shù)據(jù)添加字段
db.test.update({}, {$set:{nFlagState:0}}, false, true);
11.查看當(dāng)前連接數(shù)
db.serverStatus().connections
三、復(fù)制以及分片語(yǔ)句
1. 配置MongoDB 集群中一個(gè)Replica Sets模式的shard,并初始化
config = {_id: 'shard4', members: [
{_id: 0, host: '10.181.49.224:27001'},
{_id: 1, host: '10.181.49.221:27002'},
{_id: 2, host: '10.181.49.222:27003'}]
}
rs.initiate(config)
2. 將一個(gè)shard 加入到集群中
db.runCommand({addshard:"shard4/10.181.49.224:27001,10.181.49.221:27002,10.181.49.224:27002",name:"shard2"})
3. 查看shard 信息
db.runCommand({listshards:1})
4. 將一個(gè)庫(kù)使用shard
db.runCommand({ enablesharding:"okooo" })
5. 查看replica set 的狀態(tài)
rs.status()
state字段說(shuō)明
0 | Starting up, phase 1 |
1 | Primary |
2 | Secondary |
3 | Recovering |
4 | Fatal error |
5 | Starting up, phase 2 |
6 | Unknown state |
7 | Arbiter |
8 | Down |
heath字段說(shuō)明
0 | Server is down |
1 | Server is up |
6. 查看replica set 中是否是主節(jié)點(diǎn)
rs.isMaster()
7.查看當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)同步狀態(tài)
db.printReplicationInfo()
8. 查看整個(gè)shard的同步狀態(tài)
db.printSlaveReplicationInfo()
9. 當(dāng)前運(yùn)行的進(jìn)程
db.currentOp();
10. 看數(shù)據(jù)庫(kù)信息
db.stats()
11. 看數(shù)據(jù)實(shí)例信息
db.serverStatus()
12. (在主庫(kù)上執(zhí)行)增加一個(gè)從庫(kù)
rs.add("192.168.8.226:27004")
13. (在主庫(kù)上執(zhí)行)減少一個(gè)從庫(kù)
rs.remove("192.168.8.226:27004")
14. 看表的狀態(tài)
db.users.stats()
15. 看shard 狀態(tài)
db.printShardingStatus()
db.printShardingStatus( true )
16. 對(duì)已有的表進(jìn)行shard
db.runCommand({ shardcollection: "test.users_2", key: { _id:1 }}) --users_2表根據(jù)_id 鍵分區(qū)
17. 移除一個(gè)shard
db.runCommand({"removeshard" : "localhost:20002"});
18. 從庫(kù)支持查詢(xún)
db.getMongo().setSlaveOk()
19. 查看慢查詢(xún)
db.system.profile.find()
20. 打開(kāi)profile
打開(kāi)profile有兩種
一種直接在啟動(dòng)參數(shù)里直接設(shè)置,啟動(dòng) MongoDB時(shí)加上 --profile=級(jí)別即可。
另一種就是客服端調(diào)用后db.setProfilingLevel(級(jí)別,秒數(shù)) ,但是這只影響本次會(huì)話。
21.啟用分片
db.adminCommand({"enableSharding" : "blog"}) 在blog 庫(kù)上建立sharding
22.在blog庫(kù)上的posts表上利用date和author兩個(gè)字段建立sharding
db.adminCommand({"shardCollection" : "blog.posts", key : {"date" : 1, "author" : 1}}
四、用戶管理
MongoDB 默認(rèn)的啟動(dòng)是不驗(yàn)證用戶名和密碼的,啟動(dòng)MongoDB 后,可以直接用MongoDB 連接上來(lái),對(duì)所有的庫(kù)具有root 權(quán)限。所以啟動(dòng)的時(shí)候指定參數(shù),可以阻止客戶端的訪問(wèn)和連接。
先啟用系統(tǒng)的登錄驗(yàn)證模塊, 只需在啟動(dòng)時(shí)指定 auth 參數(shù)即可,如:
[root@template ~]# mongod --auth
[root@template ~]# mongo
MongoDB shell version: 2.6.0
connecting to: test
>
在最初始的時(shí)候 MongoDB 都默認(rèn)有一個(gè) admin 數(shù)據(jù)庫(kù)(默認(rèn)是空的),而 admin.system.users 中將會(huì)保存比在其它數(shù)據(jù)庫(kù)中設(shè)置的用戶權(quán)限更大的用戶信息。
注意:當(dāng) admin.system.users 中沒(méi)有添加任何用戶時(shí),即使 MongoDB 啟動(dòng)時(shí)添加了 --auth參數(shù),如果在除 admin 數(shù)據(jù)庫(kù)中添加了用戶,此時(shí)不進(jìn)行任何認(rèn)證依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一個(gè)用戶。
1.建立系統(tǒng)root用戶
> show dbs
admin (empty)
local 0.078GB
> use admin
switched to db admin
> db.createUser({user:"gyw",pwd:"123456",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
"user" : "gyw",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
> show dbs
2016-07-29T09:19:32.668+0800 listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} at src/mongo/shell/mongo.js:47
提示沒(méi)有權(quán)限失敗
重新以認(rèn)證的方式登錄數(shù)據(jù)庫(kù)
mongo --port 27017 -u gyw -p 123456 --authenticationDatabase admin
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.gyw", "user" : "gyw", "db" : "admin", "credentials" : { "MONGODB-CR" : "871b1cf91cd1ebb7acf0f4040af47979" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
2.創(chuàng)建單庫(kù)最大權(quán)限用戶
> use test
switched to db test
> db.test.insert({id:1,name:"mi"})
WriteResult({ "nInserted" : 1 })
> db.createUser({user:"wjb",pwd:"123456",roles:[{role:"dbOwner",db:"test"}]})
Successfully added user: {
"user" : "wjb",
"roles" : [
{
"role" : "dbOwner",
"db" : "test"
}
]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.gyw", "user" : "gyw", "db" : "admin", "credentials" : { "MONGODB-CR" : "871b1cf91cd1ebb7acf0f4040af47979" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "test.wjb", "user" : "wjb", "db" : "test", "credentials" : { "MONGODB-CR" : "3ec31d8a58e61f450c5988b546dfde4b" }, "roles" : [ { "role" : "dbOwner", "db" : "test" } ] }
我們無(wú)權(quán)限認(rèn)證登錄看能否訪問(wèn)test數(shù)據(jù)庫(kù)
[root@template 27017]# mongo --port 27017
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
> use test
switched to db test
> show collections
2016-07-29T09:26:17.440+0800 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
可以發(fā)現(xiàn)提示我們沒(méi)有權(quán)限
通過(guò)權(quán)限認(rèn)證登錄
[root@template 27017]# mongo --port 27017 -u wjb -p 123456 --authenticationDatabase test
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
> use test
switched to db test
> show collections
system.indexes
test
下方列出系統(tǒng)內(nèi)置角色名稱(chēng):
Database User Roles 普通用戶角色
read
readWrite
Database Administration Roles 管理員角色
dbAdmin 可以管理數(shù)據(jù)庫(kù)
dbOwner 單數(shù)據(jù)庫(kù)最大權(quán)限,dbAdmin,userAdmin
userAdmin 可管理當(dāng)前數(shù)據(jù)庫(kù)用戶
Cluster Administration Roles 管理員角色
clusterAdmin
clusterManager
clusterMonitor
hostManager
Backup and Restoration Roles 備份和恢復(fù)角色
backup
restore
All-Database Roles 所有數(shù)據(jù)庫(kù)角色
readAnyDatabase 在admin下建立,可以讀取所有數(shù)據(jù)庫(kù)的信息
readWriteAnyDatabase 在admin下建立,可以讀寫(xiě)所有數(shù)據(jù)庫(kù)的信息
userAdminAnyDatabase 在admin下建立,可以管理所有數(shù)據(jù)庫(kù)的用戶
dbAdminAnyDatabase 在admin下建立,可以管理所有數(shù)據(jù)庫(kù)的信息(類(lèi)似于所有數(shù)據(jù)庫(kù)的dbAdmin賬戶)
Superuser Roles ()
root