1. 安装
1.1 yum 源安装
1.1.1 配置yum源并安装
# 配置yum源cat > /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF[mongodb-org-4.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-4.4.ascEOF# 安装最新版yum install -y mongodb-org# 或者安装指定版本yum install -y mongodb-org-4.4.13 mongodb-org-server-4.4.13 mongodb-org-shell-4.4.13 mongodb-org-mongos-4.4.13 mongodb-org-tools-4.4.13# 锁定mongo版本cat >> /etc/yum.conf <<EOFexclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-toolsEOF
1.1.2 服务启动
默认配置文件如下:
[root@mango-node01 ~]# egrep -v '^#|^$' /etc/mongod.confsystemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.logstorage:dbPath: /var/lib/mongojournal:enabled: trueprocessManagement:fork: true # fork and run in backgroundpidFilePath: /var/run/mongodb/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfonet:port: 27017bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
修改后的配置文件如下:
[root@mango-node01 ~]# egrep -v '^#|^$' /etc/mongod.confsystemLog:destination: filelogAppend: truepath: /mongodb/log/mongod.logstorage:dbPath: /mongodb/datajournal:enabled: trueprocessManagement:fork: true # fork and run in backgroundpidFilePath: /var/run/mongodb/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfonet:port: 27017bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
创建目录并修改权限:
mkdir -p /mongodb/{data,log}chown -R mongod:mongod /mongodb/
启动服务:
# 开机启动并立刻启动mongod服务systemctl enable --now mongod# 查看状态systemctl status mongod
1.2 二进制安装
1.2.1 下载安装
# 安装依赖包[root@mango-node01 ~]# yum install libcurl openssl xz-libs# 下载tgz文件[root@mango-node01 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.13.tgz# 解压[root@mango-node01 ~]# tar xvf mongodb-linux-x86_64-rhel70-4.4.13.tgz# 目录结构[root@mango-node01 ~]# tree mongodb-linux-x86_64-rhel70-4.4.13mongodb-linux-x86_64-rhel70-4.4.13├── bin│ ├── install_compass│ ├── mongo│ ├── mongod│ └── mongos├── LICENSE-Community.txt├── MPL-2├── README└── THIRD-PARTY-NOTICES1 directory, 8 files
1.2.2 服务启动
命令行启动
# 创建软连接ln -s /root/mongodb-linux-x86_64-rhel70-4.4.13/bin/* /usr/local/bin/# 创建文件夹mkdir -p /mongodb/{data,log,run,conf}# 启动服务mongod --bind_ip=0.0.0.0 --port=27017 --dbpath=/mongodb/data \--logpath=/mongodb/log/mongodb.log --fork# 停止服务mongod --port=27017 --dbpath=/mongodb/data --shutdown
配置文件启动
# 创建配置文件vim /mongodb/conf/mongod.confsystemLog:destination: filelogAppend: truepath: /mongodb/log/mongod.logstorage:dbPath: /mongodb/datajournal:enabled: trueprocessManagement:fork: truepidFilePath: /mongodb/run/mongod.pidtimeZoneInfo: /usr/share/zoneinfonet:port: 27017bindIp: 0.0.0.0# 启动服务mongod -f /mongodb/conf/mongod.conf# 停止服务mongod -f /mongodb/conf/mongod.conf --shutdown
1.3 replicaset 模式
1.3.1 修改配置文件
修改后的配置文件如下:
[root@mango-node01 ~]# egrep -v "^#|^$" /etc/mongod.confsystemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.logstorage:dbPath: /var/lib/mongojournal:enabled: trueprocessManagement:fork: true # fork and run in backgroundpidFilePath: /var/run/mongodb/mongod.pid # location of pidfiletimeZoneInfo: /usr/share/zoneinfonet:port: 27017bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.security:authorization: enabledkeyFile: /var/lib/mongo/mongo-keyfilereplication:replSetName: prod
1.3.2 创建密钥文件
# 生成密钥文件[root@mango-node01 ~]# openssl rand -base64 756 > /var/lib/mongo/mongo-keyfile# 修改属主和权限[root@mango-node01 ~]# chown mongod.mongod /var/lib/mongo/mongo-keyfile[root@mango-node01 ~]# chmod 400 /var/lib/mongo/mongo-keyfile# 拷贝密钥文件到其他机器[root@mango-node01 ~]# scp -r /var/lib/mongo/mongo-keyfile mango-node02:/var/lib/mongo/[root@mango-node01 ~]# scp -r /var/lib/mongo/mongo-keyfile mango-node03:/var/lib/mongo/
1.3.3 启动集群
systemctl enable --now mongod# 创建副本集[root@mango-node01 ~]# mongo> rs.initiate({_id : "prod",members: [{ _id: 0, host : "10.0.0.71:27017" },{ _id: 1, host : "10.0.0.72:27017" },{ _id: 2, host : "10.0.0.73:27017" }]})# 查看集群状态prod:SECONDARY> rs.status()# 创建用户prod:SECONDARY> db.getSiblingDB("admin").createUser( { user:"sa",pwd:"1qaz2wsx",roles:[{"role": "root", "db": "admin"}] })# 用户认证prod:SECONDARY> db.getSiblingDB("admin").auth('sa','1qaz2wsx')
2. Mongo Shell 的使用
常用命令:
| 命令 | 说明 |
|---|---|
| show dbs | 显示数据库列表 |
| use |
切换数据库,如果不存在创建数据库 |
| db.dropDatabase() | 删除数据库 |
| show tables/collection | 显示当前数据库的集合列表 |
| db.集合名.stats() | 查看集合详情 |
| db.集合名.drop() | 删除集合 |
| show users | 显示当前数据库的用户列表 |
| show roles | 显示当前数据库的角色列表 |
| show profile | 显示最近发生的操作 |
| load(“xxx.js”) | 执行一个JavaScript脚本文件 |
| help | 查看mongodb支持哪些命令 |
| db.help() | 查询当前数据库支持的方法 |
| db.集合名.help() | 显示集合的帮助信息 |
| db.version() | 查看数据库版本 |
2.1 数据库操作
# 查看所有库show dbs# 切换到指定数据库,不存在则创建use test# 删除当前数据库db.dropDatabase()
2.2 集合操作
# 查看集合show collections# 创建集合## 语法db.createCollection(<name>,[option])## 示例db.createCollection("test",capped=true,size=5)# 删除集合db.emp.drop()
option 参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| capped | 布尔 | (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合, 当达到最大值时,它会自动覆盖最早的文档。 |
| size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。如果capped 为true,也需要指定该字段。 |
| max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
2.3 创建用户
# 设置管理员用户名密码需要切换到admin库use admin# 创建管理员用户db.createUser({user:"adminUser",pwd:"123456",roles:["root"]})# 创建应用数据库用户db.createUser({user:"appUser",pwd:"123456",roles:["dbOwner"]})# 创建对应数据库的读写权限用户db.createUser({user: "testUser",pwd: "123456",roles: [{ role: "readWrite", db: "test" }]})# 查看所有用户信息show users#删除用户db.dropUser("testUser")
**内置角色:**
| 权限名 | 描述 |
|---|---|
| read | 允许用户读取指定数据库 |
| readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile | | dbOwner | 允许用户在指定数据库中执行任意操作,增、删、改、查等 | |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删 除和管理用户 | |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 | | readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 | | readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 | | userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 | | dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 | | root | 只在admin数据库中可用。超级账号,超级权限 |
注意:默认情况下,MongoDB 并不会启用鉴权,需要以鉴权模式启动 MongoDB。
mongod -f /mongodb/conf/mongo.conf --auth
启用鉴权之后,连接 MongoDB 的相关操作都需要提供身份认证:
mongo 127.0.0.1:27017 -u adminUser -p 123456 --authenticationDatabase=admin
