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:
从中可以看到:
- systemLog.path: 日志存储目录
- storage.dbPath: 数据存储目录
- net.port 数据库端口
- 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没有对必需文件的写权限,导致数据库服务不能启动。
解决办法:
-
数据存储目录(dbpath)的位置,该目录默认在/var/lib/mongo下,执行如下命令修改目录权限(-R -递归处理所有文件和文件夹)
chown -R mongod:mongod /var/lib/mongo
-
再修改日志目录的权限,该文件默认在/var/log/mongodb目录,命令如下
chown -R mongod:mongod /var/log/mongodb
-
最后还有一个文件需要开放用户mongod的写权限,该文件叫*.sock(是通配符),在/tmp路径下。执行如下命令
#代码中的为通配符,表示合法文件名,我的文件全名是mongodb-27017.sockchown mongod:mongod /tmp/*.sock
-
最后重新执行:
启动MongoDB服务:systemctl start mongod
查看MongoDB服务状态:systemctl status mongod
以上是关于linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)的主要内容,如果未能解决你的问题,请参考以下文章
linux的centos系统安装MongoDB详细步骤(包括创建用户的各种操作及遇到的问题汇总)