一、配置包管理系统 (yum)
# 创建一个/etc/yum.repos.d/mongodb-org-5.0.repo文件,一边可以使用yum命令直接安装mongo
vi /etc/yum.repos.d/mongodb-org-5.0.repo
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
二、安装mongodb包
# 安装mongodb最新稳定版本
sudo yum install -y mongodb-org
# 安装特定版本mongodb
sudo yum install -y mongodb-org-5.0.6 mongodb-org-database-5.0.6 mongodb-org-server-5.0.6 mongodb-org-shell-5.0.6 mongodb-org-mongos-5.0.6 mongodb-org-tools-5.0.6
# 虽然可以指定任何可用的 MongoDB 版本。但是使用yum当有更新的版本可用时会升级软件包。为防止意外升级,使用以下exclude指令添加到您的/etc/yum.conf文件中固定包。
exclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
# 默认情况下,MongoDB 使用mongod用户帐户运行并使用以下默认目录:
/var/lib/mongo
/var/log/mongodb
# 包管理器在安装期间创建默认目录。所有者和组名称是mongod。
# 使用非默认目录
1. 创建一个或者多个目录
2. 编辑配置文件/etc/mongod.conf并修改以下字段:
1)storage.dbPath指定新的数据目录路径(例如/some/data/directory)
2)systemLog.path指定新的日志文件路径(例如/some/log/directory/mongod.log)
3. 确保运行 MongoDB 的用户有权访问一个或多个目录:
# sudo chown -R mongod:mongod <directory>
sudo chown -R mongod:mongod /var/lib/mongo
sudo chown -R mongod:mongod /var/log/mongodb
如果更改运行 MongoDB 进程的用户,则必须 授予新用户访问这些目录的权限
4. 强制执行,需要配置SELinux,参考:https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/#std-label-install-rhel-configure-selinux
三、启动/关闭/重启 mongodb
# 使用以下指令启动mongo (建议加上权限之后在对外开放端口,没有权限容易被病毒攻击)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log -f /etc/mongod.conf --fork
# 查看日志
tail -f /var/log/mongodb/mongod.log
# 使用以下方法关闭mongo服务(***不要使用kill -9 pid的方式)
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log -f /etc/mongod.conf --shutdown
# 或者进入mongo shell
mongo
# 切换到admin
use admin;
# 关闭mongo服务
db.shutdownServer();
###############################################################
# 启动mongodb (使用该指令启动会报错原因未知)
# [root@VM-0-7-centos ~]# sudo systemctl start mongod
# Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.
# mongod.service: control process exited, code=exited status=1
# sudo systemctl start mongod
# 如果出现 Failed to start mongod.service: Unit mongod.service not found. 运行以下指令
# sudo systemctl daemon-reload
# 停止mongodb
# sudo systemctl stop mongod
# 重启mongodb
# sudo systemctl restart mongod
# 验证mongodb是否成功启动
# sudo systemctl status mongod
# 以下指令保证mongodb在系统重启后启动
#sudo systemctl enable mongod
###############################################################
四、开启权限认证/验证权限是否生效
# 创建用户
# 切换到想要创建用户的数据库
use admin
// 也使用其他数据库创建用户, 以创建最高权限用户为例
db.createUser({
user: '<username>',
pwd: '<password>',
roles: [ //权限列表, role参照后面内置角色说明
{role:'root', db: 'admin'}
]
})
# 启用权限验证
Mongodb 默认是关闭验证的。两种方法启用验证:
1. 修改配置文件打开 /etc/mongod.conf
security:
authorization: enabled
或者添加
auth: true // 使用这个启动时候需要加上 --auth参数 建议用第一个
# 加上权限后可以设置,外部访问 bindIp: 0.0.0.0
2. 或者在进程启动参数加上 --auth。
# 加权限后连接方式
mongo工具有两个方式验证用户: # mongosh -u "<username>" -p "<password>" --authenticationDatabase "admin"
1. 连接前,后面接上命令行参数 -u "<username>" -p "<password>" --authenticationDatabase "admin";
2. 连接后,使用 use admin db.auth('<username>','<password>')。
# 验证权限是否生效
mongosh // 登录mongo shell
use admin;
db.sirius.insert({'name': 'sirius'}) // 执行一条插入操作
WriteCommandError({ // 插入失败
"ok" : 0,
"errmsg" : "command insert requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
})
db.auth('<username>','<password>') //验证权限
db.sirius.insert({'name': 'sirius'}) // 重新执行
WriteResult({ "nInserted" : 1 }) //插入成功
五、卸载mongodb
# 停止进程
sudo service mongod stop
# 删除软件包
sudo yum erase $(rpm -qa | grep mongodb-org)
# 删除mongodb数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo