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

编程入门 行业动态 更新时间:2024-10-25 23:37:44

linux的centos<a href=https://www.elefans.com/category/jswz/34/1767252.html style=系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)"/>

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

一. 安装MongoDB

步骤1:下载MongoDB

可选择官网下载:

也可以根据自己服务器系统版本,选择对应的RPM包下载。对应网站:.0/x86_64/RPMS/

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

wget .0/x86_64/RPMS/mongodb-org-5.0.5-1.el7.x86_64.rpmwget .0/x86_64/RPMS/mongodb-org-mongos-5.0.5-1.el7.x86_64.rpmwget .0/x86_64/RPMS/mongodb-org-server-5.0.5-1.el7.x86_64.rpmwget .0/x86_64/RPMS/mongodb-org-shell-5.0.5-1.el7.x86_64.rpmwget .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.rpmrpm -ivh mongodb-org-server-5.0.5-1.el7.x86_64.rpmrpm -ivh mongodb-org-shell-5.0.5-1.el7.x86_64.rpmrpm -ivh mongodb-org-tools-5.0.5-1.el7.x86_64.rpmrpm -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:
#    where to write logging data.
systemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.log# Where and how to store data.
storage:dbPath: /var/lib/mongojournal:enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:# how the process runs
processManagement:fork: true  # fork and run in backgroundpidFilePath: /var/run/mongodb/mongod.pid  # location of pidfiletimeZoneInfo: /usr/share/zoneinfo# network interfaces
net:port: 27017bindIp: 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 数据库端口(如果启动之前改了端口,进入mongo shell需要 mongo --port=端口号
  4. net.bindIp 访问IP,如果改成 0.0.0.0 即不限制ip

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

setParameter:enableLocalhostAuthBypass: truesecurity:authorization: enabled

修改配置后记得重启服务: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 datetimeimport pymongoMONGO_CLIENT = pymongo.MongoClient(f'mongodb://xxx_user:xxx_password@host:port/?authSource=admin')
db = MONGO_CLIENT['xxx_db']def insert_one():# 连接集合user,集合类似于关系数据库的数据表; 如果集合不存在,就会新建集合useruser_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_idprint("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_idsprint("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,一个比较暴力的方法,但是不太建议。

参考博客:

4.2 包缺少依赖错误:

报错如下所示:

error:Failed Dependencieslibcrypto.so.10()(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpmlibcrypto.so.10(libcrypto.so.10)(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpmlibssl.so.10()(64bit) is needed by percona-server-shared-compat-8.0.23-14.1.el8.x86_64.rpmlibssl.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 .0.2o-3.el8.x86_64.rpm

参考博客:

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详细步骤(包括创建用户的各种操作及遇到的问题汇总)

本文发布于:2024-03-08 07:03:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1720144.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:系统安装   步骤   操作   用户   详细

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!