MongoDB
简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的 官方网站:https://www.mongodb.com/ 官方文档:https://docs.mongodb.com/manual/
下载与安装
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类似的命令直接杀死进程,如果数据正在写入,可能有无法恢复的风险。
更多重启命令参数请参考官方文档
可以将命令写成一个脚本文件,执行脚本文件来实现停止
#!/bin/bash
mongo --port 27017 <<EOF
use admin;
db.auth('xxx', 'xxx');
db.shutdownServer();
exit
EOF
终端连接
mongodb默认端口为27017
- 本机连接:mongo
- 本机指定端口号:mongo --port xxx
- 指定特定主机和端口号:mongo --host xxx.xxx.xxx.xxx --port xxx
- 使用连接字符串:mongo "mongodb://ip:port"
- 连接到副本集:mongo "mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=replA"
数据库
- 显示当前数据库:
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-任意数据库独写
- 示例,给parking数据库创建只读用户:
- 查看当前数据库所有集合:
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