Linux CentOS7 环境下安装 MongoDB
Posted 陈皮的JavaLib
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux CentOS7 环境下安装 MongoDB相关的知识,希望对你有一定的参考价值。
文章目录
MongoDB 系列文章
1 环境准备
- 操作系统:Linux CentOS 7
- 安装包:mongodb-linux-x86_64-rhel70-4.0.27.tgz
2 安装包下载
官网下载地址:https://www.mongodb.com/try/download/community
当然,也可以复制下载地址,然后直接在 Linux 服务器上使用 wget 下载。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.27.tgz
3 软件安装和启动
3.1 将下载好的安装包上传到 Linux 服务器某个目录下,并使用以下命令解压压缩包。
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.27.tgz
3.2 将解压后的目录移动到 /usr/local
目录下,并改名为 mongodb
。
mv mongodb-linux-x86_64-rhel70-4.0.27 /usr/local/mongodb
3.3 进入 mongodb 目录,并创建文件夹 data,在 data 文件夹下再创建 db 文件夹(用于存放数据库数据)和 log文件夹(存放 mongo 日志)。然后为其设置可读写权限。
# 进入目录
cd /usr/local/mongodb/
# 创建三个文件夹
mkdir data data/db data/log
# 设置可读写权限
sudo chmod 666 data/db data/log/
3.4 在 mongodb 目录下新建配置文件 mongodb.conf
(可选,但建议配置),打开文件输入以下内容。
# 数据库数据存放目录
dbpath=/usr/local/mongodb/data/db
# 日志文件存放目录
logpath=/usr/local/mongodb/data/log/mongodb.log
# 日志追加方式
logappend=true
# 端口
port=27017
# 是否认证
auth=true
# 以守护进程方式在后台运行
fork=true
# 远程连接要指定ip,否则无法连接;0.0.0.0代表不限制ip访问
bind_ip=0.0.0.0
3.5 配置环境变量,使用 sudo vi /etc/profile
命令打开系统文件,并在末尾加入以下内容后保存,最后使用 source /etc/profile
命令重启系统配置。
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
3.6 完成以上步骤即可启动 Mongo 服务。
# -f 等同于--config
[root@chenpi mongodb]# mongod -f /usr/local/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1566
child process started successfully, parent exiting
[root@chenpi mongodb]#
3.7 验证,使用安装目录下 bin 目录的 mongo 客户端命令连接和访问 MongoDB,默认会链接到 test 数据库。
[root@chenpi mongodb]# mongo
MongoDB shell version v4.0.27
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session "id" : UUID("938c27a8-49e4-4617-97bb-7e1fd933d6ac")
MongoDB server version: 4.0.27
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> db
test
>
4 其他配置
4.1 开放端口
CentOS 7 版本对防火墙进行了加强,不再使用原来的 iptables,而是启用 firewall 。默认情况下,不开放任何端口。所以如果需要对外开发 MongoDB 服务,那么需要开放 MongoDB 的端口 。
# 开放27017端口
[root@chenpi mongodb]# firewall-cmd --zone=public --add-port=27017/tcp --permanent
success
# 让配置生效
[root@chenpi mongodb]# firewall-cmd --reload
success
# 查看开放的端口,验证是否成功
[root@chenpi mongodb]# firewall-cmd --zone=public --list-ports
6380/tcp 27017/tcp
[root@chenpi mongodb]#
4.2 检查服务状态
# 查看 mongodb 进程状态
[root@chenpi mongodb]# ps aux | grep mongo
root 1566 1.6 6.4 1099452 64240 ? Sl 15:39 0:11 mongod -f /usr/local/mongodb/mongodb.conf
root 1693 0.0 0.0 112812 972 pts/0 R+ 15:49 0:00 grep --color=auto mongo
# 检查端口是否启动
[root@chenpi mongodb]# netstat -lanp | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1566/mongod
tcp 0 0 172.22.17.128:27017 172.22.16.99:7424 ESTABLISHED 1566/mongod
tcp 0 0 172.22.17.128:27017 172.22.16.99:7425 ESTABLISHED 1566/mongod
unix 2 [ ACC ] STREAM LISTENING 22369 1566/mongod /tmp/mongodb-27017.sock
[root@chenpi mongodb]#
如果 netstat 命令没有找到,先进行安装。
yum install -y net-tools
4.3 停止服务
# 通过进程ID杀死
kill -9 PID
# 通过mongod命令关闭mongodb服务
[root@chenpi mongodb]# mongod -f /usr/local/mongodb/mongodb.conf --shutdown
killing process with pid: 1566
[root@chenpi mongodb]#
4.4 开机自启动
使用 vi /lib/systemd/system/mongodb.service
命令新建开机启动配置文件,输入以下内容保存。
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后依次执行以下4个命令,使之生效。
# 启动 mongodb
[root@chenpi mongodb]# systemctl start mongodb.service
# 查看服务状态
[root@chenpi mongodb]# systemctl status mongodb.service
● mongodb.service - mongodb
Loaded: loaded (/usr/lib/systemd/system/mongodb.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2021-10-10 15:56:30 CST; 5s ago
Process: 1744 ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf (code=exited, status=0/SUCCESS)
Main PID: 1746 (mongod)
CGroup: /system.slice/mongodb.service
└─1746 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf
Oct 10 15:56:29 chenpi systemd[1]: Starting mongodb...
Oct 10 15:56:29 chenpi mongod[1744]: about to fork child process, waiting until server is ready for connections.
Oct 10 15:56:29 chenpi mongod[1744]: forked process: 1746
Oct 10 15:56:30 chenpi systemd[1]: Started mongodb.
Oct 10 15:56:30 chenpi mongod[1744]: child process started successfully, parent exiting
# 开机自启动
[root@chenpi mongodb]# systemctl enable mongodb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mongodb.service to /usr/lib/systemd/system/mongodb.service.
# 修改 mongodb.service文件时,重新加载文件
[root@chenpi mongodb]# systemctl daemon-reload
[root@chenpi mongodb]#
4.5 启动重启停止服务
systemctl start mongodb.service
systemctl restart mongodb.service
systemctl stop mongodb.service
5 用户角色和密码
启动 MongoDB 服务默认是没有账号密码的,即连接上即可进行各种操作。
但是我们在启动配置文件中,指定了 auth=true
,即开启了认证,所以链接后需要认证才能执行操作。默认情况下,MongoDB 是没有管理员账户的,所以我们需要在 admin 数据库
中使用 db.createUser()
命令添加管理员帐号或其他角色。
5.1 内置角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system
5.2 创建管理员账号
切换到 admin 数据库,使用以下命令创建管理账号,拥有操作所有数据库权限。
> use admin
switched to db admin
> db.createUser(user:"admin",pwd:"123456",roles:[role:"userAdminAnyDatabase",db:"admin"])
Successfully added user:
"user" : "admin",
"roles" : [
"role" : "userAdminAnyDatabase",
"db" : "admin"
]
>
5.3 验证
使用 mongo 命令连接上之后,如果不进行 db.auth("用户名","密码")
进行用户验证的话,是执行不了任务命令的,只有通过认证才可以。注意,每一个用户都需要在创建这个用户的认证库下进行认证。
> use admin
switched to db admin
> db.auth("admin","123456")
1
> show tables
system.users
system.version
>
5.4 演示对单个数据库创建用户和密码
平常开发中,一般新项目会创建新的数据库,而且创建一个新的数据库用户仅对此数据库进行读写。
以下演示创建 chenpi 用户,密码为123456,并设置对 nobody 数据库读写的权限。注意,创建新用户前,先使用 admin 用户登录,因为我们刚才为 admin 用户设置了 userAdminAnyDatabase 权限。
# 先使用有创建用户权限的用户登录
> use admin
switched to db admin
> db.auth("admin","123456")
1
# 新用户的认证库
> use nobody
switched to db nobody
# 创建chenpi用户,密码123465,对nobody数据库有读写权限
> db.createUser(user:'chenpi',pwd:'123456',roles:[role:'readWrite',db:'nobody'])
Successfully added user:
"user" : "chenpi",
"roles" : [
"role" : "readWrite",
"db" : "nobody"
]
>
5.5 可视化工具连接
我们使用 MongoDB 可视化工具(例如 Studio 3T For MongoDB
)连接数据库。使用不同用户名和密码进行登录的时候,其可操作的数据库范围是不同的(角色设置原因)。
注意,当连接的数据库启动没有设置用户认证时,连接时不需要填写用户名和密码。
我们使用 chenpi 用户登录,因为我们设置它的角色是只对 nobody 数据库有读写权限,所以连接后只能看到 nobody 数据库。
当然,如果我们使用 admin 用户登录,注意,admin 用户当时是在 admin 数据库创建的,所以它的认证库是在 admin。
你会发现 admin 用户可操作的数据库范围和 chenpi 用户是不一样的。
以上是关于Linux CentOS7 环境下安装 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
centos7环境下安装mongodb3.4.24主从复制集群并设置密码