一、常用配置項
MongoDB的配置文件默認在Linux下為 /etc/mongod.conf,在Windows下為 C:\Program Files\MongoDB\Server\版本\bin\mongod.cfg。
常用配置項如下:
# 數據文件 dbpath=/path/to/data/db # 日誌文件 logpath=/path/to/mongodb.log # 日誌級別(0代表無日誌,1代表錯誤日誌,2代表警告日誌,3代表調試日誌) loglevel=2 # 端口號 port=27017 # 是否開啟鑒權 auth=true # 主機名 bind_ip=127.0.0.1
1、數據文件和日誌文件
MongoDB會將所有的數據存放在數據文件中,一般為/data/db目錄。同時,也需要設置日誌文件的路徑和相關參數,如下所示:
dbpath=/path/to/data/db # 數據文件 logpath=/path/to/mongodb.log # 日誌文件 logappend=true # 日誌追加 journal=true # 是否啟用文件日誌提供數據恢復點和性能保障
2、端口號和主機名
端口號默認為 27017,如果有多個 MongoDB 實例運行在同一台計算機上,則需要設置不同的端口號。同時,bind_ip配置項用於指定運行 MongoDB 實例的 IP 地址,可以是一個或多個IP地址。
port=27017 # 端口號 bind_ip=127.0.0.1 # 自動綁定到本機環回地址
3、鑒權
在MongoDB部署中,鑒權是非常重要的,可以避免未授權的用戶連接到數據庫。如果需要啟用鑒權,則需要在配置文件中添加`auth=true`配置項。
auth=true # 是否開啟鑒權
二、MongoDB的安全
為了保障 MongoDB 數據庫系統的健康性和安全性,我們需要對安全進行漏洞檢測和防範措施,下面進行詳細介紹。
1、限制IP訪問
在發佈生產環境前,我們需要對 MongoDB 的訪問進行設置,在 mongod.conf 文件中限制 IP 訪問、或其他無效訪問端口。
bind_ip = your_server_ip port = 27017
2、啟用授權訪問
限制訪問後,我們還需要對 MongoDB 的訪問進行鑒權,可以使用 username + password + database 方式。
bind_ip = 127.0.0.1 port = 27017 auth=true # 設置客戶端需要登錄的賬號和密碼 setParameter = authenticationMechanisms=MONGODB-CR,SCRAM-SHA-1 security: authorization: enabled # 淺拷貝默認的用戶超級管理員,其他淺拷貝不存在角色和權限,需要新建用戶並創建角色授權
3、使用TLS/SSL安全連接MongoDB
為了防止中間人攻擊和確認交流時服務器端的身份,可以使用 SSL/TLS 方式加密通信,設置 SSL/TLS 密鑰和證書。
#設置SSL/TLS證書密鑰路徑和密碼 net: ssl: mode: requireSSL PEMKeyFile: /etc/mongodb/ssl/mongo.pem #服務器端證書 PEMKeyPassword: your_key_password CAFile: /etc/mongodb/ssl/mongo-ca.pem #CA證書 allowInvalidCertificates: true # 是否允許使用無效證書 allowInvalidHostnames: true # 是否允許使用無效的主機名
三、性能優化
MongoDB 在應用中隨着時間的推進數據量不斷增長,當寫入操作時,IO次數也會不斷增加,所以我們需要對其性能進行優化。
1、緩存
在 MongoDB 的啟動參數中設置 cacheSizeGB,使用 mmapv1 存儲引擎可以在內存中緩存所有數據,而 WiredTiger 則可以通過設置一個大的 cacheSizeGB 參數來緩存大量數據。
# MMAPv1存儲引擎中使用緩存設置 storage: mmapv1: smallFiles: true engineConfig: cacheSizeGB: 4 # 分配4GB緩存 # 使用WiredTiger存儲引擎的緩存設置 storage: wiredTiger: engineConfig: cacheSizeGB: 4 # 分配4GB緩存
2、索引
索引可以提高查詢效率,但是如果數據量太大或者索引太多,會增加內存的消耗,因此我們需要根據具體情況進行制定的索引策略。
# 構建索引 db.orders.ensureIndex({customer_id:1}) #刪除索引 db.orders.dropIndex({customer_id:1})
3、修改MongoDB的運行參數
常用的 MongoDB 運行參數有:writeConcern,w,j,journalCommitInterval等。這些參數不僅能夠提高索引的查詢效率,還可以提高寫入的效率。
writeConcern: # MMAPv1存儲引擎的標準寫入 w: 1 j: true journalCommitInterval: 100 # 控制數據寫入頻率(默認100毫秒)
四、備份和恢復
在 MongoDB 的部署過程中,很容易出現出現各種各樣的錯誤,所以我們需要對其進行備份,以便快速恢複數據。
1、mongodump
mongodump是MongoDB CLI工具,可在MongoDB的運行狀態下備份指定的集合和數據庫,支持*redis*恢復方式。執行備份操作時需要指定需要備份的數據庫、集合、備份文件儲存路徑、備份操作在執行後立即持久化到硬盤。
mongodump --host your_database_host_address --port 27017 --username user --password password --gzip --archive=data/date.gz
2、mongorestore
mongorestore是MongoDB CLI工具,可在MongoDB的運行狀態下備份用戶請求的數據庫,在恢復操作時需要重新創建一個空的 Mongo 數據庫,然後將備份中的數據複製到新創建的空數據庫中。
mongorestore --host your_database_host_address --port 27017 –gzip –archive=data/date.gz –username user –password password
3、MongoDB的自動備份
為了保障 MongoDB 數據庫系統的健康性和安全性,我們需要對數據庫進行自動備份,可以使用腳本語言如 Python或 Shell 來實現。下面是一個 Python 自動備份的示例代碼。
#!/usr/bin/env python # coding=utf-8 import os import time import sys import pymongo ''' MongoDB自動備份腳本 author:Echo ''' # 數據庫IP地址 host = 'localhost' # 登錄MongoDB的用戶名 user = 'user' # 登錄MongoDB的密碼 password = 'password' # 備份的數據庫,若備份所有數據庫,db則為admin db = 'admin' # 備份的文件名前綴 name = 'mongodb-backup' # 備份的文件存儲路徑 path = '/data/mongodb/backup' if not os.path.exists(path): os.makedirs(path) # 當前系統時間 date = time.strftime('%Y-%m-%d-%H-%M', time.localtime(time.time())) # 合併出備份文件的絕對路徑 file_name = path + '/' + name + '.' + date + '.' + db + '.gz' # 執行備份的命令 mongodump_command = "mongodump --host %s --port 27017 --username %s --password %s --db %s --gzip --archive=%s" % (host, user, password, db, file_name) if os.system(mongodump_command) == 0: print("MongoDB backup OK") else: print("MongoDB backup Failed")
五、總結
本文詳細講解了 MongoDB 的常用配置項、安全性設置、性能優化和備份恢復等內容。在實際應用中,根據實際情況設置適合自己的參數和方法並進行定期的備份是非常必要的。
原創文章,作者:PMYBX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/334440.html