背景
搭建資料庫測試環境(任何時候都需要按照官網的标準進行)
依賴
#版本4.2.8 tar包安裝
使用以下指令安裝MongoDB社群.tgz tarball 所需的依賴項:
yum -y install libcurl openssl
yum -y install libcurl openssl --allowerasing
#添加環境變量
PATH=/usr/local/mongodb4.2.8/bin:$PATH
編譯安裝使用到的配置檔案
mongod -f /usr/local/mongodb4.2.8/mongodb.conf &
# cat /usr/local/mongodb4.2.8/mongodb.conf
port=27017
dbpath=/data/data/
logpath=/data/log/mongodb.log
#fork=true
logappend=true
shardsvr=true
directoryperdb=true
#auth=true
啟動
mongod --dbpath /data/data/ --logpath /data/log/mongod.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 291
child process started successfully, parent exiting
端口
lsof -i:27017
ps -ef|grep 291
進入控制台
mongo
複制集
官網截圖(大概意思類似主從,實作讀寫分離。優點可以自動切換)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0ZWZs91YpB3IwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSMBpXTzEERNBTT6hVMSdVYopkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4QTO3ITOxATM2ETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
啟動方式:(或是-f) 重點是配置檔案
編譯安裝沒有配置檔案:從rpm安裝的主機上複制一份,并修改資料和日志目錄位置
#驗證指令
mongod --config /data/data/mongod.conf &
ps -ef|grep mongod
如果要搭建複制集(需要添加--replSet rs0 (rs0為名稱) )
mongod --config /data/data/mongod.conf --replSet rs0 &
隻在主節點上:
配置檔案
rs.config = {_id:"rs0",members:[ {_id:0,host:"192.168.68.60:27017"},
{_id:1,host:"192.168.68.61:27017"}, {_id:2,host:"192.168.68.62:27017",
arbiterOnly:true} ] }
初始化
rs.initiate({_id : "rs0", members : [{_id : 0, host : "192.168.68.60:27017"},]})
添加
rs.add("192.168.68.61:27017")
rs.add("192.168.68.62:27017")
檢視 ("ok" : 1,)才是正常的 目前是一主兩從(PRIMARY ;SECONDARY )
rs.status()
rs.isMaster()
db.hostInfo() #主機資訊
移除
rs.remove("192.168.68.61:27017")
測試
切換:
将Primary節點降級為Secondary節點 rs.stepDown()
手動指定時間
myapp:PRIMARY> rs.stepDown(30)
主節點的提示符:
rs0:PRIMARY>
從節點提示符:
rs0:SECONDARY>
重點:配置完成之後從庫(SECONDARY節點)需要執行rs.slaveOk() 才可以提供讀服務show dbs
補充
啟動服務:
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongo.conf &
關閉:
/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongo.conf
netstat -antpl | grep 27017
登入(如果你開啟看密碼認證,就需要用到admin庫)
方法一 use admin
db.auth('root','密碼');
方法二 mongo --host 192.168.1.66:27017 -u root -p 密碼 --authenticationDatabase admin
推薦方式:URI (這種也是程式的登入方式,可以自動尋找主庫進行讀寫)
mongodb://dbabd:[email protected]:27017,192.168.90.112:27017,
192.168.90.113:27017/?authSource=admin&replicaSet=rs0 (rs0為複制集名)
簡單的CRUD
show databases = show dbs
use 庫名 進庫 之後db. stats () //統計資料資訊
show collections 看表
>use test
>db.getCollectionNames () //查詢目前資料下所有的集合名稱
db.createCollection('table01') 建表
db.table01.drop() 删除表
db.user00.insert({'name':'lei','age':18}) 插入1條資料 在 MongoDB 中,當插入文檔時,如果集合不存在,則 MongoDB 會隐式地自動建立集合,
WriteResult({ "nInserted" : 1 })
db.user00.find() 檢視表
db.user00.insert({_id:1,'name':'lei','age':18})
rs0:PRIMARY> db.user00.find()
{ "_id" : ObjectId("5f342016772920173f6ea2b2"), "name" : "lei", "age" : 18 }
{ "_id" : 1, "name" : "lei", "age" : 19 } 自定義_id (不建議)
插入3條資料
db.user00.insert([
{"name":"lei1","age":1},
{"name":"lei2","age":2},
{"name":"lei3","age":3}
])
插入N條資料
for (var i=1;i<=10;i++){
db.user00.insert({"name":"a"+i,"age":i})
}
db.user00.find().sort({name: 1}) //查詢并排序
>db.test.find().limit(3)
建立單鍵索引的文法結構如下:
>db.collection.createlndex ( { key: 1 } ) //1 為升序,-1 為降序
複合索引可以支援在多個字段上進行的比對查詢,文法結構如下:
db.collection.createIndex ({ <key1> : <type>, <key2> : <type2>, ...})
需要注意的是,在建立複合索引的時候一定要注意順序的問題,順序不同将導緻查詢的結果也不相同。
如下語句建立複合索引:
>db.records.createIndex ({ "score": 1, "location.state": 1 })
檢視複合索引的查詢計劃的文法如下:
>db.records.find({score:1034, "location.state" : "NY"}).explain()
本文說明,主要技術内容來自網際網路技術大佬的分享,還有一些自我的加工(僅僅起到注釋說明的作用)。如有相關疑問,請留言,将确認之後,執行侵權必删