mongodb安裝
環境:centos6.5
https://www.mongodb.org/dl/linux/x86_64
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgzlinux
1 安裝mongodb
cd /usr/local/src
tar -xf mongodb-linux-x86_64-rhel62-3.4.4
mv mongodb-linux-x86_64-rhel62-3.4.4 /usr/local/mongodb 更名到/usr/local下名爲mongodb
cd /usr/local/mongodb mongodb主目錄
mkdir /usr/local/mongodb/data 數據目錄
mkdir /usr/local/mongodb/log 日誌目錄
2 啓動mongodb
使用mongodb命令創建一個數據庫連接,端口設置10001
數據庫路徑:/usr/local/mogodb/data
日誌路徑:/usr/local/mogodb/log/mogodb.log
啓動程序放在後臺,下面命令執行後按ctrl+c
nohup /usr/local/mogodb/bin/mogod --dbpath=/usr/local/mogodb/data --logpath=/usr/local/mongodb/log/mongl.log &
mongodb默認端口是27017
ps -ef | grep mongodb
root 14858 14518 1 15:01 pts/1 00:00:01 /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log
root 14887 14518 0 15:02 pts/1 00:00:00 grep mongodb
nestat -ltpun | grep 14858
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 14858/mongod
lsof -i:27017
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mongod 14858 root 7u IPv4 145311 0t0 TCP *:27017 (LISTEN)
3 設置環境變量
vim /etc/profile
export PATH=$PATH:/usr/local/mongodb/bin/
source /etc/profile
4 寫shell腳本放到server中,參數寫到配置文件中,方便啓動和關閉mongodb
cat /usr/local/mongodb/mongodb.conf
port=27017
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mogodb/log/mongo.log
logappend=true
5 編寫啓動腳本
vim /etc/init.d/mongodb
chmod 755 /etc/init.d/mongodb
/etc/init.d/mongodb status
/etc/init.d/mongodb stop
/etc/init.d/mongodb start
lsof -i:27017
#!/bin/bash
#
# mongod Start up the MongoDB server daemon
#
# source function library
. /etc/rc.d/init.d/functions
#定義命令
CMD=/usr/local/mongodb/bin/mongod
#定義配置文件路徑
INITFILE=/usr/local/mongodb/mongodb.conf
start()
{
#&表示後臺啓動,也可使用fork參數
$CMD -f $INITFILE &
echo "MongoDB is running background..."
}
stop()
{
pkill mongod
echo "MongoDB is stopped."
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
esac
5 經過shell鏈接mongodb
# 在客戶機上鍊接本機mongodb:mongo 192.168.133.143:27017
#mongo
2017-06-03T15:17:55.700+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-06-03T15:17:55.700+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-06-03T15:17:55.700+0800 I CONTROL [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-06-03T15:17:55.700+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
>help help能夠查看他的參數
mongodb非正常關閉,致使啓動失敗的問題
關閉後再次重啓後發現報錯信息:
#/usr/local/mongodb/bin/mongod --logpath
/usr/local/mongodb/log/system.log --logappend --dbpath /data/mongodb --directoryperdb
--auth --journal --profile=1 --slowms=5 --fork
forked process:4853
all output going to:/usr/local/mongodb/log/system.log
查看日誌:
其中有句話:j._34:can't find its prececding file
journal dir=/data/mongodb/journal
dbexit:really exiting now
這是因爲mongodb非正常關閉致使的
解決辦法:
rm -rf /data/mongodb/mongod.lock
/usr/local/mongodb/bin/mongod --logpath --dpath /data/mongodb --repair
rm -rf /data/mongodb/journal/*j._4
啓動mongodb:/usr/local/mongodb/bin/mongod --logpath --dbpath /data/mongodb
--directoryperdb --auth --journal --profile=1 --slowms=5 --fork &
正確關閉:
>use admin
>db.shutdownServer()
或者killall mongod
yum安裝mongodb
1 建立repo
vim /etc/yum.repo.d/mongo-org.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=0
enabled=1
2 安裝mongodb和相關工具
yum -y install mongodb-org
service mongod start
chkconfig mongod on
lsof -i:27017
日誌文件:/var/log/mongodb/mongodb.log
配置文件:/etc/mongod.conf
數據目錄:/var/lib/mongo
3 數據文件解釋:
cat /etc/mongod.conf
# mongo.conf
#where to log
logpath=/var/log/mongo/mongod.log
logappend=true #以追加方式寫入日誌
# fork and run in background
fork = true
#port = 27017 #端口
dbpath=/var/lib/mongo #數據庫文件保存位置
directoryperdb=true
# Enables periodic logging of CPU utilization and I/O wait
#啓用按期記錄CPU利用率和 I/O 等待
#cpu = true
# Turn on/off security. Off is currently the default
# 是否以安全認證方式運行,默認是不認證的非安全方式
#noauth = true
#auth = true
# Verbose logging output.
# 詳細記錄輸出
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)用於開發驅動程序時的檢查客戶端接收數據的有效性
#objcheck = true
# Enable db quota management 啓用數據庫配額管理,默認每一個db能夠有8個文件,能夠用quotaFiles參數設置
#quota = true
# 設置oplog記錄等級
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#oplog = 0
# Diagnostic/debugging option 動態調試項
#nocursors = true
# Ignore query hints 忽略查詢提示
#nohints = true
# 禁用http界面,默認爲localhost:28017
# Disable the HTTP interface (Defaults to localhost:27018).這個端口號寫的是錯的
#nohttpinterface = true
# 關閉服務器端腳本,這將極大的限制功能
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# 關閉掃描表,任何查詢將會是掃描失敗
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# 關閉數據文件預分配
# Disable data file preallocation.
#noprealloc = true
# 爲新數據庫指定.ns文件的大小,單位:MB
# Specify .ns file size for new databases.
# nssize = <size>
# Accout token for Mongo monitoring server.
#mms-token = <token>
# mongo監控服務器的名稱
# Server name for Mongo monitoring server.
#mms-name = <server-name>
# mongo監控服務器的ping 間隔
# Ping interval for Mongo monitoring server.
#mms-interval = <seconds>
# Replication Options 複製選項
# in replicated mongo databases, specify here whether this is a slave or master 在複製中,指定當前是從屬關係
#slave = true
#source = master.example.com
# Slave only: specify a single database to replicate
#only = master.example.com
# or
#master = true
#source = slave.example.com
平常操做命令:
1)登陸和退出
默認bind綁定的ip是127.0.0.1以及端口27017
mongo
mongo 127.0.0.1:27.17
綁定固定ip,好比bind_ip=168.133.142.11
mongo 168.133.142.11:27017
鏈接某個庫
mongo ip:port/庫名 -u用戶名 -p密碼
>show collections
mongodb會自動鏈接一個名爲test的庫,若是該庫不存在,自動建立
關於命令的操做
>show dbs
查看服務器上的數據庫
>use syp;
mongo中,db表明當前使用的數據庫,db從test變成syp,若是沒有syp,就會建立
而且不插入數據的話,該庫也建立不了。
>show collections
查看當前數據庫的集合
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
建立數據庫
>use syp;
>show dbs;
>db.syp.insert({"name":"testdb"})
>show dbs
刪除數據庫
>db.dropDatase()
>show dbs
查看當前數據庫
>db
>db.getName();
當刪除數據test後,當前的db仍是指向它,只有當切換數據庫後,xxx才能消失。
>use test1
>db
>show dbs
修復當前庫
>db.repairDatabase();
查看當前數據庫狀態
>db.stats();
當前db版本
>db.version();
查看當前db的連接機器地址
>db.getMongo();
從指定主機上克隆數據庫
db.cloneDatabase("192.168.133.143");
從指定的機器上覆制指定數據庫數據到某個數據庫
將本機的master_slave數據複製到wangshibo數據庫中
>db.copyDatabases("master_slave","wangshibo","127.0.0.1");
collection操做
新建collection
>db.createCollection("hello")
>show collections
直接向一個不存在的collection中插入數據也能建立一個collection
>db.hello2.insert({"name":"lfqy"})
>show collections
刪除collection
>db.Hello.drop()
ture 返回true說明刪除成功,返回false說明刪除失敗
重命名collection
>show clooections
>db.hello2.renameCollection("Hello")
>show collections
創建索引在HELLO集合上,創建對ID字段的索引,1表明升序
>db.HELLO.ensureIndex({ID:1})
Record級別的操做
插入操做:
向user集合中插入兩條記錄:
>db.user.insert({'name':'GalGadot','gender':'female','age':28,'salary':11000})
>db.user.insert({'name':'Mike','gender':'female','age':28,'salary':1000})
用save完成相似的插入操做
>db.user.save({'name':'jim','gender':'male','age':32,'salary':8000})
查找操做
查找集合中的全部記錄
>db.user.find()
查找集合中符合條件的記錄
(1)單一條件
查詢age爲26的數據
>db.user.find({"age":26})
查詢salary大於7000的數據
>db.user.find({salary:{$gt:7000}})
查詢name中包含‘ent’的數據
>db.user.find({name:/ent/})
查詢name中以G開頭的數據
>db.user.find({name:/^G/})
查詢name中以G結尾的數據
>db.user.find({name:/$G/})
(2)多條件「與」
查詢age小於30,salary大於7000的數據
>db.user.find({age:{$1t:30},salary:{$gt:7000}})
(3)多條件「或」
查詢age小於30,或者salary大於1000的記錄
>db.user.find({$or:[{salary:{$gt:1000}},{age:{$1t:30}}]})
(4)查詢第一條記錄
將上面的find替換成findOne
(5)查詢user集合中的name,age,salary字段
>db.user.find({},{name:1,age:1,salary:true})
1表示顯示此列的意思,也能夠用true表示
>db.user.find({},{name:1,age:true,salary:1})
(6)查詢指定字段的數據,並去掉重複數據
>db.user.distinct('gender')
對查詢結果集的操做
提供了pretty print工具,db.collection.pretty()或者db.collection.forEach(printjson)
>db.user.find().pretty()
指定結果集顯示的條目
顯示結果集中的前3條記錄
>db.user.find().limit(3)
查詢第一條之後的全部數據
>db.user.find().skip(1)
查詢跳過前兩條之後的數據
>db.user.find().skip(2)
對結果集升序
>db.user.find().sort({salary:1})
降序
>db.user.find().sort({salary:-1})
統計集合中全部的記錄條數
>db.user.find().count()
查詢符合條件的記錄數
查詢salary大於4000或者大於10000的記錄數
>db.user.find({$or:[{$lt:4000}},{salary:{$gt:10000}}}]}).count()
###################################################
刪除操做
刪除整個集合中的全部數據
>db.wangshibo.find()
>db.wangshibo.remove({})
>db.wangshibo.find()
remove()函數接受一個查詢文檔做爲可選參數來有選擇性的刪除符合條件的文檔
不會刪除集合自己,原有的索引頁不會被刪除。
刪除文檔是永久的,不能撤銷,也不能恢復。
drop()是把集合相關的信息整個刪除(包括索引)
刪除集合中符合條件的全部記錄
>db.user.find()
>db.user.remove({name:'GalGadot'})
>db.user.find()
刪除集合中符合條件的一條記錄
>db.user.find()
>db.user.remove({salary :{$1t:30000},1})
>db.user.find()
也能夠將命令逗號後的1改爲true
更新操做:
賦值更新:db.collection.update(criteria,objNew,upsert,multi)
criteria:update的查詢條件,相似sql update查詢內where後面的
objNew:update的對象和一些更新的操做符如$,$inc...等,能夠理解爲sql update查詢內set後面的
upsert:若是不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入
multi:mongodb默認是false,只更新找到的第一條記錄,如何參數是true,
就把條件查出來多條記錄所有更新
>db.user.find()
>db.user.update({name:'huihui'},{$set:{age:23}},false,true)
>db.user.find()
>db.user.update({name:'lfqy1'},{$set:{age:23}},true,true)
>db.user.find()
增值操做
>db.user.find()
>db.user.updata({gender:'female'},{$inc:{salary:50}},false,true)
>db.user.find()
sql