官网

1. 安装

1.1 yum 源安装

1.1.1 配置yum源并安装

官方安装文档

  1. # 配置yum源
  2. cat > /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF
  3. [mongodb-org-4.4]
  4. name=MongoDB Repository
  5. baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
  6. gpgcheck=1
  7. enabled=1
  8. gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
  9. EOF
  10. # 安装最新版
  11. yum install -y mongodb-org
  12. # 或者安装指定版本
  13. 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
  14. # 锁定mongo版本
  15. cat >> /etc/yum.conf <<EOF
  16. exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
  17. EOF

1.1.2 服务启动

默认配置文件如下:

  1. [root@mango-node01 ~]# egrep -v '^#|^$' /etc/mongod.conf
  2. systemLog:
  3. destination: file
  4. logAppend: true
  5. path: /var/log/mongodb/mongod.log
  6. storage:
  7. dbPath: /var/lib/mongo
  8. journal:
  9. enabled: true
  10. processManagement:
  11. fork: true # fork and run in background
  12. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  13. timeZoneInfo: /usr/share/zoneinfo
  14. net:
  15. port: 27017
  16. bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

修改后的配置文件如下:

  1. [root@mango-node01 ~]# egrep -v '^#|^$' /etc/mongod.conf
  2. systemLog:
  3. destination: file
  4. logAppend: true
  5. path: /mongodb/log/mongod.log
  6. storage:
  7. dbPath: /mongodb/data
  8. journal:
  9. enabled: true
  10. processManagement:
  11. fork: true # fork and run in background
  12. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  13. timeZoneInfo: /usr/share/zoneinfo
  14. net:
  15. port: 27017
  16. bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

创建目录并修改权限:

  1. mkdir -p /mongodb/{data,log}
  2. chown -R mongod:mongod /mongodb/

启动服务:

  1. # 开机启动并立刻启动mongod服务
  2. systemctl enable --now mongod
  3. # 查看状态
  4. systemctl status mongod

1.2 二进制安装

1.2.1 下载安装

下载地址

  1. # 安装依赖包
  2. [root@mango-node01 ~]# yum install libcurl openssl xz-libs
  3. # 下载tgz文件
  4. [root@mango-node01 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.13.tgz
  5. # 解压
  6. [root@mango-node01 ~]# tar xvf mongodb-linux-x86_64-rhel70-4.4.13.tgz
  7. # 目录结构
  8. [root@mango-node01 ~]# tree mongodb-linux-x86_64-rhel70-4.4.13
  9. mongodb-linux-x86_64-rhel70-4.4.13
  10. ├── bin
  11. ├── install_compass
  12. ├── mongo
  13. ├── mongod
  14. └── mongos
  15. ├── LICENSE-Community.txt
  16. ├── MPL-2
  17. ├── README
  18. └── THIRD-PARTY-NOTICES
  19. 1 directory, 8 files

1.2.2 服务启动

命令行启动

  1. # 创建软连接
  2. ln -s /root/mongodb-linux-x86_64-rhel70-4.4.13/bin/* /usr/local/bin/
  3. # 创建文件夹
  4. mkdir -p /mongodb/{data,log,run,conf}
  5. # 启动服务
  6. mongod --bind_ip=0.0.0.0 --port=27017 --dbpath=/mongodb/data \
  7. --logpath=/mongodb/log/mongodb.log --fork
  8. # 停止服务
  9. mongod --port=27017 --dbpath=/mongodb/data --shutdown

配置文件启动

  1. # 创建配置文件
  2. vim /mongodb/conf/mongod.conf
  3. systemLog:
  4. destination: file
  5. logAppend: true
  6. path: /mongodb/log/mongod.log
  7. storage:
  8. dbPath: /mongodb/data
  9. journal:
  10. enabled: true
  11. processManagement:
  12. fork: true
  13. pidFilePath: /mongodb/run/mongod.pid
  14. timeZoneInfo: /usr/share/zoneinfo
  15. net:
  16. port: 27017
  17. bindIp: 0.0.0.0
  18. # 启动服务
  19. mongod -f /mongodb/conf/mongod.conf
  20. # 停止服务
  21. mongod -f /mongodb/conf/mongod.conf --shutdown

1.3 replicaset 模式

1.3.1 修改配置文件

修改后的配置文件如下:

  1. [root@mango-node01 ~]# egrep -v "^#|^$" /etc/mongod.conf
  2. systemLog:
  3. destination: file
  4. logAppend: true
  5. path: /var/log/mongodb/mongod.log
  6. storage:
  7. dbPath: /var/lib/mongo
  8. journal:
  9. enabled: true
  10. processManagement:
  11. fork: true # fork and run in background
  12. pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
  13. timeZoneInfo: /usr/share/zoneinfo
  14. net:
  15. port: 27017
  16. bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
  17. security:
  18. authorization: enabled
  19. keyFile: /var/lib/mongo/mongo-keyfile
  20. replication:
  21. replSetName: prod

1.3.2 创建密钥文件

  1. # 生成密钥文件
  2. [root@mango-node01 ~]# openssl rand -base64 756 > /var/lib/mongo/mongo-keyfile
  3. # 修改属主和权限
  4. [root@mango-node01 ~]# chown mongod.mongod /var/lib/mongo/mongo-keyfile
  5. [root@mango-node01 ~]# chmod 400 /var/lib/mongo/mongo-keyfile
  6. # 拷贝密钥文件到其他机器
  7. [root@mango-node01 ~]# scp -r /var/lib/mongo/mongo-keyfile mango-node02:/var/lib/mongo/
  8. [root@mango-node01 ~]# scp -r /var/lib/mongo/mongo-keyfile mango-node03:/var/lib/mongo/

1.3.3 启动集群

  1. systemctl enable --now mongod
  2. # 创建副本集
  3. [root@mango-node01 ~]# mongo
  4. > rs.initiate(
  5. {
  6. _id : "prod",
  7. members: [
  8. { _id: 0, host : "10.0.0.71:27017" },
  9. { _id: 1, host : "10.0.0.72:27017" },
  10. { _id: 2, host : "10.0.0.73:27017" }
  11. ]
  12. }
  13. )
  14. # 查看集群状态
  15. prod:SECONDARY> rs.status()
  16. # 创建用户
  17. prod:SECONDARY> db.getSiblingDB("admin").createUser( { user:"sa",pwd:"1qaz2wsx",roles:[{"role": "root", "db": "admin"}] })
  18. # 用户认证
  19. 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 数据库操作

  1. # 查看所有库
  2. show dbs
  3. # 切换到指定数据库,不存在则创建
  4. use test
  5. # 删除当前数据库
  6. db.dropDatabase()

2.2 集合操作

  1. # 查看集合
  2. show collections
  3. # 创建集合
  4. ## 语法
  5. db.createCollection(<name>,[option])
  6. ## 示例
  7. db.createCollection("test",capped=true,size=5)
  8. # 删除集合
  9. db.emp.drop()

option 参数:

字段 类型 描述
capped 布尔 (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合, 当达到最大值时,它会自动覆盖最早的文档。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。如果capped 为true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

注意: 当集合不存在时,向集合中插入文档也会创建集合。

2.3 创建用户

  1. # 设置管理员用户名密码需要切换到admin库
  2. use admin
  3. # 创建管理员用户
  4. db.createUser({user:"adminUser",pwd:"123456",roles:["root"]})
  5. # 创建应用数据库用户
  6. db.createUser({user:"appUser",pwd:"123456",roles:["dbOwner"]})
  7. # 创建对应数据库的读写权限用户
  8. db.createUser({user: "testUser",pwd: "123456",roles: [{ role: "readWrite", db: "test" }]})
  9. # 查看所有用户信息
  10. show users
  11. #删除用户
  12. db.dropUser("testUser")
  1. **内置角色:**
权限名 描述
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。

  1. mongod -f /mongodb/conf/mongo.conf --auth

启用鉴权之后,连接 MongoDB 的相关操作都需要提供身份认证:

  1. mongo 127.0.0.1:27017 -u adminUser -p 123456 --authenticationDatabase=admin

3. MongoDB 文档操作