linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)

Posted cui_yonghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)相关的知识,希望对你有一定的参考价值。

一. 安装MongoDB

步骤1:下载MongoDB

可选择官网下载:https://www.mongodb.com/try/download/community

也可以根据自己服务器系统版本,选择对应的RPM包下载。对应网站:https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/

若使用命令行方式下载,可在shell下使用 wget 下载。需要将对应版本的依赖包也一起下载下来。

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-5.0.5-1.el7.x86_64.rpm

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-mongos-5.0.5-1.el7.x86_64.rpm

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-server-5.0.5-1.el7.x86_64.rpm

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-shell-5.0.5-1.el7.x86_64.rpm

wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/5.0/x86_64/RPMS/mongodb-org-tools-5.0.5-1.el7.x86_64.rpm

步骤2:安装Mongodb

下载后先安装依赖,再安装Mongodb,如果遇到报错,请看下面的解决方案。

rpm -ivh mongodb-org-mongos-5.0.5-1.el7.x86_64.rpm

rpm -ivh mongodb-org-server-5.0.5-1.el7.x86_64.rpm

rpm -ivh mongodb-org-shell-5.0.5-1.el7.x86_64.rpm

rpm -ivh mongodb-org-tools-5.0.5-1.el7.x86_64.rpm

rpm -ivh mongodb-org-5.0.5-1.el7.x86_64.rpm

步骤3:启动Mongodb服务

如果正在运行防火墙(firewalld),则还需要打开27017端口:

终端运行:firewall-cmd --permanent --zone=public --add-port=27017/tcp

再运行:firewall-cmd --reload 重新加载mongo即可。

启动Mongodb服务:systemctl start mongod

检查其运行状态:systemctl status mongod

开机启动Mongodb服务:systemctl enable mongod

至此,mongodb已启动成功,通过主机加端口即可访问,通过navicat客户端或者compass客户端等工具都可以访问。
但是这样操作在外网往往是不安全的,建议更改端口,并增加复杂度高的账号密码

二. 配置文件修改

Mongodb的配置文件为 :/etc/mongod.conf

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

从中可以看到:

  1. systemLog.path: 日志存储目录
  2. storage.dbPath: 数据存储目录
  3. net.port 数据库端口
  4. net.bindIp 访问IP,如果改成 0.0.0.0 即不限制ip

根据最新版官方文档,如果增加账号密码一定要开启授权,在配置文件中加入下面两行即可。

setParameter:
   enableLocalhostAuthBypass: true

修改配置后记得重启服务:systemctl restart mongod

三. 创建用户

首先,在终端输入mongo 进入mongo的终端,然后:

# 1. 进入admin库
use admin

# 2. 创建具有root权限的用户,通常不用root权限的账户进行登录
db.createUser(user:"xxx_root_user",pwd:"xxx_root_password",roles:["root"])

# 3. 创建账号密码,以及对应数据库的权限(下面是可读可写的账号)
db.createUser(user:"xxx_user",pwd:"xxx_password",roles:[ role:"readWrite",db:"xxx_db"  ])

至此可以使用该账号进行登录了。下面附上在python中的插一条和多条的案例:

# -*- encoding: utf-8 -*-
import time
import datetime

import pymongo

MONGO_CLIENT = pymongo.MongoClient(f'mongodb://xxx_user:xxx_password@host:port/?authSource=admin')
db = MONGO_CLIENT['xxx_db']


def insert_one():
    # 连接集合user,集合类似于关系数据库的数据表; 如果集合不存在,就会新建集合user
    user_collection = db.user_demo
    # 设置文档格式(文档即我们常说的数据)
    user_info = 
        "_id": 105,
        "author": "小绿",
        "text": "Python开发",
        "tags": ["mongodb", "pymongo"],
        "date": datetime.datetime.now()

    # 使用insert_one单条添加文档,inserted_id获取写入后的id
    # 添加文档时,如果文档尚未包含"_id"键,就会自动添加"_id"。"_id"的值在集合中必须是唯一的
    # inserted_id用于获取添加后的id,若不需要,则可以去掉
    user_id = user_collection.insert_one(user_info).inserted_id
    print("user id is ", user_id)


def insert_many():
    #批量添加
    user_infos = [
        "_id": 101,
        "author": "小黄",
             "text": "Python开发",
             "tags": ["mongodb", "python", "pymongo"],
             "date": datetime.datetime.utcnow(),
     
        "_id": 102,
        "author": "小黄_A",
             "text": "Python开发_A",
             "tags": "db":"Mongodb","lan":"Python","modle":"Pymongo",
             "date": datetime.datetime.utcnow(),
     ]

    user_collection = db.user_insert_many
    # inserted_ids用于获取添加后的id,若不需要,则可以直接去掉
    user_id = user_collection.insert_many(user_infos).inserted_ids
    print("user id is ", user_id)


if __name__ == '__main__':
    # 插入单条数据
    # insert_one()

    # 插入多条数据
    # insert_many()

四. 遇到的问题汇总

4.1 SELinux阻止MongoDB启动的问题

如果是SELinux的防护功能,阻止了访问。

解决方式1

# semanage fcontext -a -t mongo_log_t '/data/mongodb/log'
# restorecon -v '/data/mongodb/log'
restorecon reset /data/mongodb/log context unconfined_u:object_r:unlabeled_t:s0->unconfined_u:object_r:mongod_log_t:s0

上面命令执行完毕后,就解决了/data/mongodb/log目录的文件权限问题。

同样的方法,再解决/data/mongodb/data和/data/mongodb/run目录的问题。

然后重启mongod,问题解决。

解决方式2:直接关闭SELinux,一个比较暴力的方法,但是不太建议。

参考博客:https://blog.csdn.net/weixin_34087301/article/details/90226917

4.2 包缺少依赖错误:

报错如下所示:

error:Failed Dependencies
		libcrypto.so.10()(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpm
		libcrypto.so.10(libcrypto.so.10)(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpm
		libssl.so.10()(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpm
		libssl.so.10(libssl.so.10)(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpm

发现了compat-openssl10以及解释,大意为compat-openssl10只包含libraries,提供与不支持使用OpenSSL-1.1编译的早期版本和软件的兼容性。

解决办法:
办法1: yum install compat-openssl10
或者办法2: yum install http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm

参考博客:https://blog.csdn.net/weixin_43357860/article/details/118369751

4.3 启动报错

Process: 29784 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=14)

如果出现错误状态为status=14,那里主要原因就是文件权限问题,用户mongod没有对必需文件的写权限,导致数据库服务不能启动。

解决办法:

  1. 数据存储目录(dbpath)的位置,该目录默认在/var/lib/mongo下,执行如下命令修改目录权限(-R -递归处理所有文件和文件夹)

    chown -R mongod:mongod /var/lib/mongo
    
  2. 再修改日志目录的权限,该文件默认在/var/log/mongodb目录,命令如下

    chown -R mongod:mongod /var/log/mongodb
    
  3. 最后还有一个文件需要开放用户mongod的写权限,该文件叫*.sock(是通配符),在/tmp路径下。执行如下命令
    #代码中的
    为通配符,表示合法文件名,我的文件全名是mongodb-27017.sock

    chown mongod:mongod /tmp/*.sock	
    
  4. 最后重新执行:
    启动MongoDB服务:systemctl start mongod
    查看MongoDB服务状态:systemctl status mongod

以上是关于linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)的主要内容,如果未能解决你的问题,请参考以下文章

linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)

Linux安装MongoDB(简单详细)

Linux Centos 7安装MongoDB(简单!详细!)

centOS 6 安装mongoDB

linux(CentOS)下安装mongodb

CentOS7.6 安装 MongoDB 4.4