MongoDB

简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的 官方网站:https://www.mongodb.com/ 官方文档:https://docs.mongodb.com/manual/

下载与安装

官方安装教程open in new window

CentOS 7

添加yum镜像源

创建文件/etc/yum.repos.d/mongodb-org-4.2.repo内容如下:

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

使用yum安装mongo

任意路径输入以下命令开始下载安装

sudo yum install -y mongodb-org

耐心等待安装完成,然后输入以下命令检查是否安装成功

mongod --version

Windows

待补充

MacOS

待补充

常用操作

启动

推荐使用配置文件来启动mongo,配置文件mongod.conf.yaml示例

# mongod.conf
 
# for documentation of all options, see:
#  http://docs.mongodb.org/manual/reference/configuration-options/
 
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /home/mongo/mongod.log
 
# Where and how to store data.
storage:
  dbPath: /home/mongo/data
  journal:
    enabled: true
  #  engine:
  #  mmapv1:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
# how the process runs
processManagement:
  fork: true # fork and run in background
  pidFilePath: /home/mongo/mongod.pid # location of pidfile
#  timeZoneInfo: /usr/share/zoneinfo
 
# network interfaces
net:
  port: 27017
  bindIpAll: true
 
security:
  #  keyFile: mongod.key
  authorization: "enabled"
#operationProfiling:
 
#replication:
#  replSetName: xxx
 
#sharding:
 
## Enterprise-Only Options
 
#auditLog:
 
#snmp:

以上为单节点数据库配置文件,其中以下配置项可对应修改为自己的:

  • storage.dbPath - 数据存放路径

  • systemLog.path - 数据库日志存放路径

  • processManagement.pidFilePath - pid存放路径

  • net.port - 占用端口

  • storage.wiredTiger.engineConfig.cacheSizeGB - 表示WiredTiger 引擎最大占用的内存大小,若和其他程序部署在同一台服务器上,需要限制此数值的大小(默认为机子内存的一半)

如果是副本集部署,需要开启以下配置:

  • security.keyFile

  • replication.replSetName

以上配置文件构建好就可以启动数据库了。执行以下命令从配置文件所在路径启动数据库:

mongod -f ./mongod.conf.yaml

停止

停止数据库需要先进入数据库,鉴权后使用命令db.shutdownServer()即可停止。

非常不建议使用kill类似的命令直接杀死进程,如果数据正在写入,可能有无法恢复的风险。

更多重启命令参数请参考官方文档open in new window

可以将命令写成一个脚本文件,执行脚本文件来实现停止

#!/bin/bash
mongo --port 27017 <<EOF
use admin;
db.auth('xxx', 'xxx');
db.shutdownServer();
exit
EOF

终端连接

mongodb默认端口为27017

数据库

  • 显示当前数据库: db
  • 显示数据库列表: show dbs
  • 切换指定数据库: use dbName, 如使用admin数据库: use admin
  • 给数据库添加用户: db.createUser({user: 用户名, pwd:密码, roles:[{role:角色权限, db:数据库名}]})
    • 示例,给parking数据库创建只读用户:db.createUser({user:"reader", pwd:"PassWord@123!", roles:[{role:"read", db:"parking"}]})
    • 角色权限:read-只读、readWrite-读写、root-超级管理员、readAnyDatabase-任意数据库读取、readWriteAnyDatabase-任意数据库独写
  • 查看当前数据库所有集合: show collections
  • 数据据库鉴权: db.auth(username,password) , 如:db.auth("reader","PassWord@123!")
  • 查看指定集合文档: db.collectionName.find({}), 如查看parking_batch_task集合文档: db.parking_batch_task.find({}).limit(1)
  • 删除,需要切换到某个数据库:use dbName
    • 删除数据库: db.dropDatabase()
    • 删除某个集合:db.collectionName.drop()

常用工具

https://docs.mongodb.com/database-tools

数据导出

使用 mongoexport工具(安装mongo附带安装此工具)实现数据导出。

配置项说明(更多配置项请输入mongoexport --help查看):

  • --host: 连接的数据库地址
  • -u: 连接用户名
  • -p: 连接密码
  • --authenticationDatabase : 鉴权的数据库(和-u -p对应)
  • --db: 需要导出数据的数据库名
  • --collection: 需要导出的集合名称
  • -o: 导出生成的文件名称

示例:

mongoexport --host 127.0.0.1:27017 -u admin -p xxx --authenticationDatabase admin --db parking --collection parking_batch_task -o parking_batch_task.json

数据导入

使用 mongoimport工具(安装mongo附带安装此工具)实现数据导入。

配置项说明(更多配置项请输入mongoimport --help查看):

  • --host: 连接的数据库地址
  • -u: 连接用户名
  • -p: 连接密码
  • --authenticationDatabase : 鉴权的数据库(和-u -p对应)
  • --db: 需要导入数据的数据库名
  • --collection: 需要导入数据的集合名称
  • --file: 需要导入的文件名称(json或csv格式),

示例:

mongoimport --host 127.0.0.1:27017 -u admin -p xxx --authenticationDatabase admin --db parking --collection parking_batch_task --file=parking_batch_task.json

如果是副本集连接只需将配置项host修改即可,格式为: 副本集名称/节点1,节点2,如: name/172.16.0.1:27017,172.16.0.2:27017

示例:

mongoimport --host name/172.16.0.1:27017,172.16.0.2:27017  -u admin -p xxx --authenticationDatabase admin --db parking --collection parking_batch_task --file=parking_batch_task.json

数据库备份

使用 mongodump工具(安装mongo附带安装此工具)实现数据库备份。

配置项说明(更多配置项请输入mongodump --help查看):

  • --host: 连接的数据库地址
  • -u: 连接用户名
  • -p: 连接密码
  • --authenticationDatabase : 鉴权的数据库(和-u -p对应)
  • --db: 需要导出数据的数据库名
  • --collection: 需要导出的集合名称
  • --out: 备份的文件放指定的文件夹名称(没有会创建)

示例:

mongodump --host 127.0.0.1:27017  -u admin -p xxxx --authenticationDatabase parking --db parking --out parking_dump

数据库恢复

使用 mongorestore 工具(安装mongo附带安装此工具)来实现数据的恢复。

配置项说明(更多配置项请输入mongorestore --help查看):

  • --host: 连接的数据库地址
  • -u: 连接用户名
  • -p: 连接密码
  • --authenticationDatabase : 鉴权的数据库(和-u -p对应)
  • --db: 需要导出数据的数据库名
  • --collection: 需要导出的集合名称
  • --dir: 备份的文件放指定的文件夹名称

示例:

mongorestore --host 127.0.0.1:27017  -u admin -p xxx --authenticationDatabase parking --db parking --dir ./parking_dump/

日志切割

mongodb不支持自动日志切割,都需要手动操作。要么借助linux自带的logrotate进行切割,要么使用mongoDB命令。(当然我们也可以写一个定时的脚本,加入切割日志的指令来实现自动切割)

  • 进入admin数据库,并鉴权:use admin ; db.auth("xxx", "xxx")

  • 通过命令进行日志切割:db.runCommand({logRotate:1})

可以将上诉命令写成一个简单的脚本mongo_logrotate.sh

#!/bin/bash
mongo <<EOF
use admin;
db.auth('admin', 'xxx');
db.runCommand({logRotate:1});
exit
EOF

然后每次执行此脚本即可手动切割日志: sh mongo_logrotate.sh

上次更新:
Contributors: zhouqh