Linux下MongoDB的安裝與環(huán)境變量設(shè)置

MongoDB是一個(gè)C++編寫的基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),是一個(gè)介于關(guān)系和非關(guān)系之間的數(shù)據(jù)庫(kù),當(dāng)然也屬于NoSQL的行列,存儲(chǔ)方式和Redis類似,是json格式的kav-value存儲(chǔ)方式,只是Redis是內(nèi)存存儲(chǔ),而MongoDB是和普通的數(shù)據(jù)庫(kù)目錄一樣存儲(chǔ)在硬盤上

  下面就在Linux上部署單節(jié)點(diǎn)的MongoDB,過(guò)程如下:

  一、首先去MongoDB官網(wǎng)下載軟件包,首頁(yè)是:https://www.mongodb.com/, 然后,點(diǎn)擊右上角Download按鈕進(jìn)入下載界面,下載地址是:https://www.mongodb.com/download-center 進(jìn)入后往下拉會(huì)看到下載選項(xiàng),可以看到這里有很多版本,默認(rèn)選擇第一個(gè)社區(qū)版本,然后下面操作系統(tǒng)默認(rèn)是Windows,這里要選擇Linux? 然后根據(jù)操作系統(tǒng)是32位還是64位下載相應(yīng)版本的軟件包即可,這里下載的是mongodb-linux-x86_64-3.2.10.tgz,下載完成之后上傳至Linux系統(tǒng),開始執(zhí)行安裝

  二、這里預(yù)定安裝目錄為/usr/local/mongodb,實(shí)際中可以自己確定,現(xiàn)在執(zhí)行下面命令將MongoDB安裝到指定位置:

tar -xvzf mongodb-linux-x86_64-4.0.3tgz

mv mongodb-linux-x86_64-4.0.3? /usr/local/mongodb

cd /usr/local/mongodb/

  三、現(xiàn)在就已經(jīng)安裝并進(jìn)入了mongodb的目錄,這時(shí)候?yàn)榱朔奖銏?zhí)行,可以把bin目錄絕對(duì)路徑添加到環(huán)境變量即可,具體過(guò)程不再敘述了

新建data和logs文件夾,并在logs文件夾內(nèi)創(chuàng)建mongo.log文件

cd mongodb

mkdir datamkdir logs

cd logs/touchmongo.log

接下來(lái)我們繼續(xù)創(chuàng)建配置文件mongo.conf

vim mongo.conf

  在文件里面寫入如下配置:

dbpath=/mongodb/data

logpath=/mongodb/logs/mongo.log

logappend=true

journal=true

quiet=true

port=27017

fork=true? #后臺(tái)運(yùn)行

bind_ip=0.0.0.0??? #允許任何IP進(jìn)行連接

auth=false #是否授權(quán)連接

  這里配置了數(shù)據(jù)庫(kù)路徑和日志路徑以及端口,寫完后:wq保存退出。

  接下來(lái)配置環(huán)境變量/etc.profle文件。往里面新增一行:

export PATH=$PATH:/usr/local/mongodb/bin

  其中$PATH后面跟的是實(shí)際安裝的mongodb的bin所在目錄。

  接著重新加載配置:

source /etc/profile

  四、mongodb數(shù)據(jù)庫(kù)默認(rèn)數(shù)據(jù)目錄會(huì)存放在/data/db 所以可以執(zhí)行命令 mkdir -p /data/db 建立目錄,也可以手動(dòng)設(shè)置其他目錄,但是無(wú)論默認(rèn)還是自定義,數(shù)據(jù)目錄必須手動(dòng)創(chuàng)建,否則mongodb會(huì)報(bào)錯(cuò),現(xiàn)在可以啟動(dòng)mongodb服務(wù)了,命令為: ./bin/mongod 服務(wù)默認(rèn)會(huì)在前臺(tái)執(zhí)行,如果數(shù)據(jù)目錄不是/data/db 那么可以手動(dòng)指定目錄,啟動(dòng)命令為: ./bin/mongod --dbpath=/usr/mongo_data MongoDB數(shù)據(jù)庫(kù)服務(wù)的默認(rèn)端口是27017

[root@Anwar01 mongodb]# ./bin/mongod

2018-10-27T13:46:05.017+0800 I CONTROL? [initandlisten] MongoDB starting : pid=2118 port=27017 dbpath=/data/db 64-bit host=Anwar01

2018-10-27T13:46:05.017+0800 I CONTROL? [initandlisten] db version v4.0.3

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten] allocator: tcmalloc

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten] modules: none

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten] build environment:

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten]? ? distarch: x86_64

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten]? ? target_arch: x86_64

2018-10-27T13:46:05.018+0800 I CONTROL? [initandlisten] options: {}

2018-10-27T13:46:05.042+0800 I STORAGE? [initandlisten] wiredtiger_open config: create,cache_size=390M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),

2018-10-27T13:46:06.055+0800 I STORAGE? [initandlisten] WiredTiger message [1540619166:55594][2118:0x7f218994b9c0], txn-recover: Set global recovery timestamp: 0

2018-10-27T13:46:06.226+0800 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten] ** WARNING: Access control is not enabled for the database.

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten] **? ? ? ? ? Read and write access to data and configuration is unrestricted.

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten] ** WARNING: This server is bound to localhost.

2018-10-27T13:46:06.571+0800 I CONTROL? [initandlisten] **? ? ? ? ? Remote systems will be unable to connect to this server.

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? ? Start the server with --bind_ip <address> to specify which IP

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? ? addresses it should serve responses from, or with --bind_ip_all to

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? ? bind to all interfaces. If this behavior is desired, start the

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? ? server with --bind_ip 127.0.0.1 to disable this warning.

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? We suggest setting it to 'never'

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] **? ? ? ? We suggest setting it to 'never'

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 4096 processes, 65536 files. Number of processes should be at least 32768 : 0.5 times number of files.

2018-10-27T13:46:06.572+0800 I CONTROL? [initandlisten]

2018-10-27T13:46:06.572+0800 I STORAGE? [initandlisten] createCollection: admin.system.version with provided UUID: 959e947f-ef9d-4be9-b37c-76d22776c5e1

2018-10-27T13:46:06.784+0800 I COMMAND? [initandlisten] setting featureCompatibilityVersion to 4.0

2018-10-27T13:46:06.792+0800 I STORAGE? [initandlisten] createCollection: local.startup_log with generated UUID: 841debcb-81aa-4b95-92a3-4b188780a205

2018-10-27T13:46:07.008+0800 I FTDC? ? [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'

2018-10-27T13:46:07.009+0800 I NETWORK? [initandlisten] waiting for connections on port 27017

2018-10-27T13:46:07.009+0800 I STORAGE? [LogicalSessionCacheRefresh] createCollection: config.system.sessions with generated UUID: 79f75ca8-d3e1-4ce7-b360-c43c5933a3fb

2018-10-27T13:46:07.357+0800 I INDEX? ? [LogicalSessionCacheRefresh] build index on: config.system.sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds: 1800 }

2018-10-27T13:46:07.357+0800 I INDEX? ? [LogicalSessionCacheRefresh] building index using bulk method; build may temporarily use up to 500 megabytes of RAM

2018-10-27T13:46:07.388+0800 I INDEX? ? [LogicalSessionCacheRefresh] build index done.? scanned 0 total records. 0 secs

2018-10-27T13:46:07.389+0800 I COMMAND? [LogicalSessionCacheRefresh] command config.$cmd command: createIndexes { createIndexes: "system.sessions", indexes: [ { key: { lastUse: 1 }, name: "lsidTTLIndex", expireAfterSeconds: 1800 } ], $db: "config" } numYields:0 reslen:114 locks:{ Global: { acquireCount: { r: 2, w: 2 } }, Database: { acquireCount: { w: 2, W: 1 } }, Collection: { acquireCount: { w: 2 } } } protocol:op_msg 379ms

五、另外MongoDB提供了簡(jiǎn)單的web用戶界面,可以查看服務(wù)的狀態(tài)等,默認(rèn)不開啟可以在啟動(dòng)服務(wù)時(shí)添加參數(shù),命令是: ./bin/mongod --rest

  啟動(dòng)后,默認(rèn)的web管理端口是28017,這時(shí)候訪問http://ip:28017即可看到管理界面

  如果想讓服務(wù)一直跑在后臺(tái),那么可以使用nohup或者screen都可以

六、從命令行啟動(dòng)

? ? 執(zhí)行mongod,啟動(dòng)MongoDB服務(wù)器,mongod有很多可配置的啟動(dòng)選項(xiàng),可以使用mongod --help查看所有選項(xiàng)

--dbpath:

指定數(shù)據(jù)目錄,默認(rèn)是/data/db下,每個(gè)mongod進(jìn)程都需要獨(dú)立的數(shù)據(jù)目錄,加入有3個(gè)mongod實(shí)例,就必須要有3個(gè)獨(dú)立的數(shù)據(jù)目錄。當(dāng)mongod啟動(dòng)時(shí),會(huì)在數(shù)據(jù)目錄中創(chuàng)建mongod.lock文件。這個(gè)文件用于防止其他mongod進(jìn)程使用該數(shù)據(jù)目錄。若當(dāng)有一個(gè)mongd啟動(dòng)后,再啟動(dòng)另一個(gè)mongod時(shí),若再使用剛剛已經(jīng)啟動(dòng)mongod的目錄,那么會(huì)報(bào)錯(cuò):

2017-07-06T16:03:09.703+0800 I STORAGE [initandlisten] exception in initAndListen: 98 Unable to lock file: mongodb/0706/mongod.lock Resource temporarily unavailable. Is a mongod instance already running?, terminating

--port:

指定服務(wù)器監(jiān)聽的端口號(hào)。默認(rèn)端口號(hào)為27017,要是運(yùn)行多個(gè)mongod,必須指定不同的端口號(hào)

若有一個(gè)27017的端口已經(jīng)使用了,那么如果啟動(dòng)第二個(gè)mongod的時(shí)候,若還指定27017的話,會(huì)報(bào)錯(cuò):

2017-07-06T16:13:07.215+0800 E NETWORK [initandlisten] listen(): bind() failed Address already in use for socket: 0.0.0.0:27017

--fork:

以守護(hù)進(jìn)程的方式運(yùn)行MongoDB,創(chuàng)建服務(wù)進(jìn)程,相當(dāng)于nohup ... &

nohup mongodb/bin/mongod --dbpath mongodb/0706 &

? 與

mongodb/bin/mongod --dbpath mongodb/0706 --fork

一樣的效果

--logpath:?

指定輸出日志的路徑,而不是輸出到命令行。如果對(duì)文件夾有寫權(quán)限的話,系統(tǒng)會(huì)在文件不存在時(shí)創(chuàng)建它。它將會(huì)已有文件覆蓋掉,清除原來(lái)所有的日志記錄。如果想保留原來(lái)的日志,還需要使用--logappend

--config:

指定配置文件,加載命令行未指定的各種選項(xiàng)

--directoryperdb:

使用該參數(shù)可以將每個(gè)數(shù)據(jù)庫(kù)存放在單獨(dú)的目錄中

比如我新建兩個(gè)數(shù)據(jù)庫(kù),那么在數(shù)據(jù)目錄下會(huì)自動(dòng)建立數(shù)據(jù)庫(kù)名一樣的文件夾

啟動(dòng)數(shù)據(jù)庫(kù)時(shí),MongoDB會(huì)將一個(gè)文件寫入local數(shù)據(jù)庫(kù)的startup_log集合中,該集合包含了MongoDB的版本,所基于的系統(tǒng)等

? ? ? ? 七、停止Mongodb

方法一:查看進(jìn)程,使用kill命令;不能使用kill -9

方法二:在客戶端進(jìn)去,使用shutdown命令

> use admin;

switched to db admin> db.shutdownServer();

server should be down...

在主節(jié)點(diǎn)(primary)上運(yùn)行shutdown命令時(shí),服務(wù)器在關(guān)閉之前,會(huì)先等待備份節(jié)點(diǎn)追趕主節(jié)點(diǎn)以保持同步。這將回滾的可能性降至最低,但shutdown操作有失敗的可能性。如幾秒鐘內(nèi)沒有備份節(jié)點(diǎn)成功同步,則shutdown操作失敗,主節(jié)點(diǎn)不會(huì)停止運(yùn)行。

? ? ? ? 方法三: 使用 Crtl+C 關(guān)閉? ? 備注:如果以前臺(tái)方式啟動(dòng) MongoDB 服務(wù),使用“Crtl+C” 服務(wù)會(huì)關(guān)閉,這種關(guān)閉方式會(huì)等待當(dāng)前進(jìn)行中的的操作完成,所以依然是干凈的關(guān)閉方式。

? ? ? ? ? 方法四:? 使用 mongod 命令關(guān)閉

? ? ? ? ? ? ? $ mongod? --shutdown? --dbpath /data/db? ? 備注:mongod 命令的 shutdown 選項(xiàng)能干凈的關(guān)閉 MongoDB 服務(wù)。

  九、在mongodb服務(wù)啟動(dòng)的情況下,可以執(zhí)行命令 ./bin/mongo 進(jìn)入mongodb的后臺(tái)管理shell

  第一次進(jìn)入MongoDB shell時(shí)默認(rèn)會(huì)選擇test庫(kù),但是這是一個(gè)空庫(kù),后來(lái)進(jìn)入時(shí)就會(huì)進(jìn)入用戶所操作的數(shù)據(jù)庫(kù),這時(shí)執(zhí)行 show dbs 可以查看非空的數(shù)據(jù)庫(kù)列表,可以看到默認(rèn)只有l(wèi)ocal一個(gè),其余的沒有數(shù)據(jù)不顯示,執(zhí)行 db 可以查看當(dāng)前選擇的數(shù)據(jù)庫(kù);如果要切換選擇數(shù)據(jù)庫(kù)可以執(zhí)行 use name1 ,這里可以切換到name1數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)存在則切換,如果不存在則直接創(chuàng)建,所以在mongodb中有一個(gè)顯著的特點(diǎn),所有的數(shù)據(jù)庫(kù)和數(shù)據(jù)集合(數(shù)據(jù)表)都是在使用中創(chuàng)建,用戶無(wú)需提前指定創(chuàng)建,退出mongodb shell可以執(zhí)行命令 exit 或者 quit() 都可以

  到這里,在Linux下MongoDB的部署和最簡(jiǎn)單的shell入門操作就完成了

????????? 十、日志

在啟動(dòng)mongod的時(shí)候,可以指定日志的級(jí)別,即(-v、-vv、-vvv、-vvvv、-vvvvv)或者在shell命令行執(zhí)行命令修改

mongodb/bin/mongod --dbpath mongodb/0707 --directoryperdb --fork -vvv

日志級(jí)別越大,輸出的日志越詳細(xì),調(diào)至5時(shí),這時(shí)mongod會(huì)在日志中記錄幾乎所有的操作,包括每一個(gè)請(qǐng)求所處理的內(nèi)容。

MongoDB默認(rèn)記錄耗時(shí)超過(guò)100毫秒的查詢信息。如果100毫秒不適合需求,可以通過(guò)setProfilingLevel命令來(lái)改變,下面這條命令表示記錄查詢時(shí)間超過(guò)500毫秒的消息

? ? > db.setProfilingLevel(1,500)

? ? { "was" : 0, "slowms" : 100, "ok" : 1 }

如果想要日志分割,如按天存放,有兩種方法

方法一:每天定時(shí)的執(zhí)行kill -USR1 進(jìn)程號(hào),這樣就可以看到,每執(zhí)行一次kill -USR1 進(jìn)程號(hào),那么就會(huì)重新生成一個(gè)日志文件

方法二:在MongoDB的shell行執(zhí)行,每執(zhí)行一次都會(huì)產(chǎn)生一個(gè)新的日志文件

? ? > db.adminCommand({"logRotate":1})

? ? { "ok" : 1 }

要使分割日志生效,必須啟動(dòng)的時(shí)候使用--logpath,然后可以根據(jù)自己的需求,寫shell或python腳本,然后crontab做成定時(shí)任務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Mac MongoDB安裝 一、安裝 MongoDB的安裝方法有很多,本文以官方文檔中的兩種方法為準(zhǔn)。 1. 手動(dòng)...
    Keriy閱讀 16,905評(píng)論 2 7
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,316評(píng)論 2 89
  • 一、系統(tǒng)及安裝說(shuō)明 系統(tǒng):CentOS6.x_x64,mongodb-3.4.10。mongodb官方下載地址 :...
    Dream_f5de閱讀 781評(píng)論 0 0
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復(fù) [日期:2016-11-29] 來(lái)源:Linux社區(qū) 作...
    陽(yáng)屯okyepd閱讀 3,861評(píng)論 0 7
  • 俺們家,洗衣做飯搞衛(wèi)生的家務(wù)都是我干,一直覺得挺好的。 近來(lái)感覺有點(diǎn)不對(duì)勁,思來(lái)想去,原來(lái)問題出在這里:我屬牛,妻...
    Outman_2d44閱讀 346評(píng)論 0 0

友情鏈接更多精彩內(nèi)容