什麼是MongoDB?
MongoDB是一個高效能,開源,無模式的文件型資料庫,是當前NoSql資料庫中比較熱門的一種。MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能
最豐富,最像關係資料庫的。它在許多場景下可用於替代傳統的關係型資料庫或鍵/值儲存方式。它是由C++語言編寫的一個基於分散式檔案儲存的開源資料庫系統,它的目的在於為WEB應用提供可擴充套件的高效能資料儲存解決方案。MongoDB是一個介於關係型資料庫和非關係型資料庫之間的產品,是非關係型資料庫當中功能最豐富,最像關係型資料庫的。它支援的資料結構非常鬆散,會將資料儲存為一個文件,資料結構由鍵值對(key=>value)組成,是類似於json的bson格式,欄位值可以包含其它文件、陣列和文件陣列,因此可以儲存比較複雜的資料型別
適應場景
網站實時資料處理。它非常適合實時的插入、更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性;快取,由於效能很高,它適合作為資訊基礎設施的快取層。在系統重啟之後,由它搭建的持久化快取層可以避免下層的資料來源過載。高伸縮性的場景。非常適合由數十或數百臺伺服器組成的資料庫,它的路線圖中已經包含對MapReduce引擎的內建支援
不適用場景
要求高度事務性的系統。傳統的商業智慧應用。複雜的跨文件(表)級聯查詢
MongoDB環境版本
CentOSMongoDB7.84.4.2
下載MongoDB
官網地址:https://www.mongodb.com
下載頁面:https://www.mongodb.com/try/download/community
[root@Mike-Node1 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgz[root@Mike-Node1 ~]# tar zxvf mongodb-linux-x86_64-rhel70-4.4.2.tgz -C /usr/local/[root@Mike-Node1 ~]# mv /usr/local/mongodb-linux-x86_64-rhel70-4.4.2 /usr/local/mongodb[root@Mike-Node1 ~]# rm -rf mongodb-linux-x86_64-rhel70-4.4.2.tgz
安裝MongoDB
[root@Mike-Node1 ~]# cd /usr/local/mongodb/[root@Mike-Node1 /usr/local/mongodb]# lltotal 136drwxr-xr-x 2 root root 4096 Dec 22 10:52 bin-rw-rw-r-- 1 1046 1046 30608 Nov 17 04:09 LICENSE-Community.txt-rw-rw-r-- 1 1046 1046 16726 Nov 17 04:09 MPL-2-rw-rw-r-- 1 1046 1046 1977 Nov 17 04:09 README-rw-rw-r-- 1 1046 1046 75685 Nov 17 04:09 THIRD-PARTY-NOTICES[root@Mike-Node1 /usr/local/mongodb]# mkdir logs data conf[root@Mike-Node1 /usr/local/mongodb]# [root@Mike-Node1 /usr/local/mongodb]# cd logs/[root@Mike-Node1 /usr/local/mongodb/logs]# touch mongodb.logs[root@Mike-Node1 /usr/local/mongodb/logs]# cd ../conf/[root@Mike-Node1 /usr/local/mongodb/conf]#[root@Mike-Node1 /usr/local/mongodb/conf]# vim mongodb.confsystemLog: quiet: false path: /usr/local/mongodb/logs/mongodb.logs logAppend: false destination: file processManagement: fork: true pidFilePath: /usr/local/mongodb/bin/mongodb.pid net: bindIp: 0.0.0.0 port: 27017 maxIncomingConnections: 65536 wireObjectCheck: true storage: dbPath: /usr/local/mongodb/data journal: enabled: true operationProfiling: slowOpThresholdMs: 100 mode: off [root@Mike-Node1 /usr/local/mongodb/conf]#
重要配置引數講解如下:
sytemsLog:(系統日誌,必須配置) quiet: true 描述:"安靜",此時mongod/mongos將會嘗試減少日誌的輸出量。不建議在production環境下開啟,否則將會導致跟蹤錯誤比較困難。 path: logs/mongod.log logAppend: false 描述:如果為true,當mongod/mongos重啟後,將在現有日誌的尾部繼續新增日誌。否則,將會備份當前日誌檔案,然後建立一個新的日誌檔案;預設為false。 destination: file 描述:日誌輸出目的地,可以指定為“ file”或者“syslog”,表述輸出到日誌檔案,如果不指定,則會輸出到標準輸出中(standard output)。processManagement: fork: <true | false> 描述:是否以fork模式執行mongod/mongos程序,預設為false pidFilePath:<路徑> 描述:配合"fork:true"引數,將mongod/mongos程序ID寫入指定的檔案,如果不指定,將不會建立PID檔案net: bindIp: <127.0.0.1> 描述:mongod/monogs程序繫結的IP,application透過此IP、port建立連結。可以繫結在任意網絡卡介面上,如果你的mongos/mongod只需要內網訪問,可以繫結在內網IP(例如:192.168.1.100),如果需要外網訪問,那麼則繫結外網IP,如果此值為“0.0.0.0”,則繫結到所有介面即內網、外網IP均可以訪問。(不建議)可以繫結都多個ip上,ip地址之間用“,”分割。 port: 27017 描述:mongod/mongos偵聽埠,預設為27017;不過因為mongodb有2種典型的架構模式:replica set和sharding,如果開發者在一個節點上部署多個mongod例項,需要注意修改此埠以避免衝突。 maxIncomingConnections: 65536 描述:mongod/mongos程序允許的最大連線數,如果此值超過作業系統配置的連線數閥值,將不會生效(ulimit);預設值為65536。通常客戶端將會使用連線池機制,可以有效的控制每個客戶端的連結個數。 wireObjectCheck: true 描述:當客戶端寫入資料時,mongos/mongod是否檢測資料的有效性(BSON),如果資料格式不良,此insert、update操作將會被拒絕;預設值為truestorage: dbPath: db 描述:mongod程序儲存資料目錄,此配置僅對mongod程序有效。預設值為:/data/db engine: mmapv1 描述:儲存引擎型別,mongodb 3.0之後支援“mmapv1”、“wiredTiger”兩種引擎,預設值為“mmapv1”;官方宣稱wiredTiger引擎更加優秀 journal: enabled: true 描述:是否開啟journal日誌持久儲存,journal日誌用來資料恢復,是mongod最基礎的特性,通常用於故障恢復。64位系統預設為true,32位預設為false,建議開啟,僅對mongod程序有效operationProfiling: slowOpThresholdMs: 100 描述:資料庫profiler判定一個操作是“慢查詢”的時間閥值,單位毫秒;mongod將會把慢查詢記錄到日誌中,即使profiler被關閉。當profiler開啟時,慢查詢記錄還會被寫入“system.profile”這個系統級的collection中。請參看mongod profiler相關文件。預設值為100,此值只對mongod程序有效 mode: off 描述:資料庫profiler級別,操作的效能資訊將會被寫入日誌檔案中,可選值: 1)off:關閉profiling 2)slowOp:on,只包含慢操作日誌 3)all:on,記錄所有操作 資料庫profiling會影響效能,建議只在效能除錯階段開啟。此引數僅對mongod有效
設定MongoDB啟動服務
[root@Mike-Node1 /usr/local/mongodb/conf]# vim /etc/systemd/system/mongodb.service[Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking RuntimeDirectory=mongodbRuntimeDirectoryMode=0751PIDFile=/usr/local/mongodb/bin/mongodb.pidExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongodb.conf PrivateTmp=false [Install] WantedBy=multi-user.target[root@Mike-Node1 /usr/local/mongodb/conf]# [root@Mike-Node1 /usr/local/mongodb/conf]# systemctl start mongodb.service[root@Mike-Node1 /usr/local/mongodb/conf]# systemctl enable mongodb.service
服務操作命令
systemctl start mongodb.service #啟動服務systemctl stop mongodb.service #停止服務systemctl restart mongodb.service #重新啟動服務systemctl status mongodb.service #檢視服務當前狀態systemctl enable mongodb.service #設定開機自啟動systemctl disable mongodb.service #停止開機自啟動
注意:
關閉 MongoDB 方法1.本文采用[root@Mike-Node1 /usr/local/mongodb/bin]# systemctl stop mongodb.service服務的方式關閉2.使用 mongod 命令關閉[root@Mike-Node1 /usr/local/mongodb/bin]# mongod --shutdown --dbpath /usr/local/mongodb/data/killing process with pid: 14447mongod 命令的 shutdown 選項能幹淨的關閉 MongoDB 服務 3.使用 kill 命令 mongo 服務程序可以使用作業系統的 kill 命令,給 mongod 程序傳送 SIGINT 或 SIGTERM 訊號,即 "kill -2 PID," 或者 “kill -15 PID“ 建議不要使用 ”kill -9 pid“,因為如果 MongoDB 執行在沒開啟日誌(--journal)的情況下,可能會造成資料損失
連線客戶端
[root@Mike-Node1 /usr/local/mongodb/bin]# ./mongo 127.0.0.1:27017MongoDB shell version v4.4.2connecting to: mongodb://127.0.0.1:27017/test?compressors=disabled&gssapiServiceName=mongodbImplicit session: session { "id" : UUID("9ab49f76-cb3b-4b7e-a7c1-44321e8575dc") }MongoDB server version: 4.4.2Welcome to the MongoDB shell.For interactive help, type "help".For more comprehensive documentation, see https://docs.mongodb.com/Questions? Try the MongoDB Developer Community Forums https://community.mongodb.com---The server generated these startup warnings when booting: 2020-12-22T13:45:04.621+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2020-12-22T13:45:05.464+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2020-12-22T13:45:05.464+08:00: You are running this process as the root user, which is not recommended 2020-12-22T13:45:05.464+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' 2020-12-22T13:45:05.464+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' 2020-12-22T13:45:05.464+08:00: Soft rlimits too low 2020-12-22T13:45:05.464+08:00: currentValue: 1024 2020-12-22T13:45:05.464+08:00: recommendedMinimum: 64000------ Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). The monitoring data will be available on a MongoDB website with a unique URL accessible to you and anyone you share the URL with. MongoDB may use this information to make product improvements and to suggest MongoDB products and deployment options to you. To enable free monitoring, run the following command: db.enableFreeMonitoring() To permanently disable this reminder, run the following command: db.disableFreeMonitoring()---> show dbsadmin 0.000GBconfig 0.000GBlocal 0.000GB>
如果是連線某個庫,命令是
[root@Mike-Node1 /usr/local/mongodb/bin]# ./mongo ip:port/庫名 -u使用者名稱 -p密碼
如果由於上次mongodb非正常關閉導致的失敗問題
比如伺服器突然關機或者 kill -9這種情況
解決辦法:1)刪除資料目錄/usr/local/mongodb/data 下的 mongod.lock [root@Mike-Node1 ~]# rm -rf /usr/local/mongodb/data/mongod.lock2)修復mongodb[root@Mike-Node1 ~]# /usr/local/mongodb/bin/mongod --logpath --dbpath /usr/local/mongodb/data --repair 3)刪除/usr/local/mongodb/data/journal 下的 j._4 檔案(或者將journal下的檔案清空)[root@Mike-Node1 ~]# rm -rf /usr/local/mongodb/data/journal/*j._44)然後再次啟動 mongodb 就ok了[root@Mike-Node1 ~]# systemctl start mongodb.service
本文分享完畢,感謝支援和點贊~~