CentOS安装MongoDB

339 阅读1分钟

环境

CentOS 7.6 64bitmongodb-linux-x86_64-rhel70-5.0.5.tgz

下载

官网下载 www.mongodb.com/try/downloa…
发行说明 docs.mongodb.com/upcoming/re…
可自行下载上传至服务器 或
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.5.tgz image-20220105222247782.png

安装

安装Red Hat/CentOS 依赖

yum install libcurl openssl xz-libs

解压缩

## 解压缩
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.5.tgz
## 将解压包移至目标目录(勿事先创建目标目录,否则会将当前文件夹移入目标目录)
mv mongodb-linux-x86_64-rhel70-5.0.5 /opt/mongodb5
## 或 直接解压至目标目录
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.5.tgz -C 指定目录

配置启动

添加环境变量(可选)

# 添加环境变量后可在任意处执行mongod、mongo命令
## 方式一
# 编辑环境变量文件
vim /etc/profile
# 添加路径
export PATH=$PATH:mongo安装目录/bin
# 使系统环境变量立即生效
source /etc/profile

## 方式二
# 将 mongo 安装路径的可执行文件,软链到 /usr/bin 路径下
ln -s mongo安装目录/bin/* /usr/local/bin/
# 或 copy 过去
cp mongo安装目录/bin/* /usr/local/bin/

默认配置

默认情况下 MongoDB 启动后会初始化两个目录,数据存储目录:/var/lib/mongodb、日志文件目录:/var/log/mongodb; 启动前可以先创建这两个目录并设置当前用户有读写权限:

mkdir -p /var/lib/mongo
mkdir -p /var/log/mongodb
## 设置权限,root用户不用配置权限
chown `whoami` /var/lib/mongo
chown `whoami` /var/log/mongodb

启动 Mongodb 服务:

## --dbpath指定数据目录、--logpath指定日志文件位置
## --fork为mongodb自带参数,表示后台运行服务,退出终端后不会关闭MongoDB服务,使用fork后必须指定log的路径
## --bind_ip可限制外部访问ip,若不限制则设置为0.0.0.0
## 也可使用daemon后台运行,使用 &,后续整理后再加入此块内容 TODO
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --bind_ip 0.0.0.0 --fork
## 查看日志,看到 waiting for connections on port 27017 即启动成功
tail -10f /var/log/mongodb/mongod.log

自定义配置(推荐)

跳转安装目录 cd /opt/mongodb5,编制配置文件 vim mongodb.conf,输入以下内容:

## 数据存储路径
dbpath=/opt/mongodb5/data
## 日志文件位置
logpath=/opt/mongodb5/log/mongodb.log
## 端口
port=27017
## 允许连接的客户端IP
#bind_ip=[127.0.0.1,其他ip]
bind_ip=0.0.0.0
## 是否后台运行
fork=true
## 日志使用追加代替覆盖
logappend=false

## 使用权限方式启动,测试权限管理时可开放
#auth=true
## write操作首先写入“日记”,是一个数据安全的设置
#journal=false
#nojournal=true
## 存储引擎:MMAPv1、WiredTiger(默认)
#storageEngine=MMAPv1

再跳转bin目录 cd /opt/mongodb5/bin,使用配置文件启动服务:

./mongod --config /opt/mongodb5/mongodb.conf
或
./mongod -f /opt/mongodb5/mongodb.conf

添加防火墙规则

## 永久开放27017端口
firewall-cmd --permanent --add-port=27017/tcp
## 重新加载防火墙规则
firewall-cmd --reload

连接测试

使用Navicat测试连接,无密码、无用户,新建文档(数据库)后插入记录,会自动创建语句中描述的集合(表)
image-20220106195026525.png

权限管理

创建用户

# 进入bin目录,使用mongo命令连接服务端
./mongo
# 切换至 admin 库
use admin
# 创建超级管理员
db.createUser({
    user:"chalice-root",
    pwd:"chalice123",
    roles:[{role:"root",db:"admin"}]
});
# 创建用户管理员,只能在admin库中建立
db.createUser({
    user:"chalice",
    pwd:"chalice123",
    roles:[{role:"userAdminAnyDatabase",db:"admin"}]
});
# 创建数据库(test库)管理员,可在admin库或目标库建立
db.createUser({
    user:"chalice02",
    pwd:"chalice123",
    roles:[{role:"dbAdmin",db:"test"}]
});
# 查找创建的用户,第一个查找所有、第二个查找当前库(即 use 库名 的库)
db.system.users.find();
show users
# 修改密码,切换到目标库,执行如下,修改后会立即生效,无需重启
db.changeUserPassword("用户名","密码");
# 验证密码修改,返回 1 表示验证成功
db.auth("chalice","chalice123");

创建用户成功:
image-20220106202208414.png

数据库权限角色一览

1、Read:允许用户读取指定数据库
2、readWrite:允许用户读写指定数据库
3、dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,
查看统计或访问system.profile
4、userAdmin:允许用户向system.users集合写入,可以找指定数据库里
创建、删除和管理用户
5、clusterAdmin:只在admin数据库中可用,赋予用户所有分片和
复制集相关函数的管理权限。
6、readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
7、readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库
的读写权限
8、userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库
的userAdmin权限
9、dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库
的dbAdmin权限。
10、root:只在admin数据库中可用。超级账号,超级权限

image-20220106203048439.png

添加服务自启

将MongoDB设置为系统服务并且设置开机启动
本机测试重启后未自动重启,提示 mongod.service is not a native service, redirecting to /sbin/chkconfig.,没有好的解决方法,建议到参考链接中的 中文官网 4.2 安装手册 查看处理方法,检索关键字 初始化系统(未亲测,测后在更) 添加mongo服务启停脚本 mongod 添至系统启动初始化目录 vim /etc/rc.d/init.d/mongod,脚本内容如下:

start() {
/opt/mongodb5/bin/mongod -f /opt/mongodb5/mongodb.conf
}
stop() {
/opt/mongodb5/bin/mongod -f /opt/mongodb5/mongodb.conf --shutdown
}
case "$1" in
  start)
 start
 ;;
stop)
 stop
 ;;
restart)
 stop
 start
 ;;
  *)
 echo
$"Usage: $0 {start|stop|restart}"
 exit 1
esac

保存完成后,添加脚本执行权限:chmod +x /etc/rc.d/init.d/mongod,启动服务 service mongod start,执行 lsof -i :27017 检测到端口正在使用,表示启动成功,执行过程如下:
image-20220106215216586.png

相关命令

  • 启动服务 mongod -f /opt/mongodb/mongodb5/mongodb.conf
  • 关闭服务(对于正在运行数据的服务,不推荐使用kill,可能会导致数据丢失)
    • kill -9 进程号 / killall mongod,使用该方法后,若再次启动失败,则去数据存放目录下删除mongo.lock文件重试,若还失败则至参考链接查看对应问题
    • 使用 ./mongo 连接服务端后,再 use admin,执行 db.shutdownServer();,若发现报错: "errmsg" : "not authorized on admin to execute command,则是因为权限不够,先auth一遍超级管理员用户,再执行前述命令,ctrl+c退出后,使用 ps -ef|grep mongo 查看无mongo服务进程
      image-20220106211318687.png image-20220106211646619.png

参考链接