环境
CentOS 7.6 64bit、mongodb-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
安装
安装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测试连接,无密码、无用户,新建文档(数据库)后插入记录,会自动创建语句中描述的集合(表)
权限管理
创建用户
# 进入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");
创建用户成功:
数据库权限角色一览
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数据库中可用。超级账号,超级权限
添加服务自启
将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 检测到端口正在使用,表示启动成功,执行过程如下:
相关命令
- 启动服务
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服务进程
参考链接
- 官网 5.0 安装教程
- 官网命令手册
- 官网配置文件配置列表
- 中文官网 4.2 安装手册
- www.runoob.com/mongodb/mon…
- www.cnblogs.com/pfnie/artic…
- www.cnblogs.com/activiti/p/…
- 启动失败问题:ERROR: child process failed, exited with 48