MongoDB配置文件详解

一、常用配置项

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/n/334440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PMYBXPMYBX
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • 金融阅读器提示配置文件无法识别

    在使用金融阅读器过程中,有时会遇到提示配置文件无法识别的情况。这种情况通常是由于配置文件中存在错误或不完整所导致的。本文将从多个方面对此问题进行详细的阐述,并提供相应解决方法。 一…

    编程 2025-04-28
  • 如何在Linux中添加用户并修改配置文件

    本文将从多个方面详细介绍在Linux系统下如何添加新用户并修改配置文件 一、添加新用户 在Linux系统下创建新用户非常简单,只需使用adduser命令即可。使用以下命令添加新用户…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25

发表回复

登录后才能评论