# mongodb - 备忘录
# 好记性不如烂笔头
因为用 mongodb 只是兴趣使然,所以偶尔要用的时候,经常记不住一些常用知识点。比如想不起日志在哪里 - -
# 1. 启动关闭和登录
# 指定配置文件
mongod -f /etc/mongod.conf
# 登录指定端口
mongo --port 27017
2
3
4
5
# 1.备份与恢复
备份很重要
- 带权限的备份命令如下
mongodump -h 127.0.0.1:27018 --username "test" --password "123456" --authenticationDatabase="test" -d "test" -o /data/back
- -h 指定ip端口
- -d 指定要备份的数据库
- -o 输出路径
- 恢复数据
mongorestore -h 127.0.0.1:27018 --username "test" --password "123456" --authenticationDatabase="test" --db "test" --drop /data/back
- --db 需要恢复的数据库实例。
- --drop 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
- <path> 默认最后一个参数是:备份数据所在位置。
# 2.日志系统
mongodb 中主要有四种日志:系统日志,Journal日志,oplog日志,慢查询日志。
# 系统日志
系统日志,它记录 mongodb 启动和停止的操作,连接和删库(狗头),以及服务器在运行过程中发生的任何异常信息;配置系统日志也非常简单,在运行 mongod 的时候增加一个参数 logpath,就可以设置;
mongod -logpath='/var/log/mongodb/mongod.log' -logappend.
也可以在 mongodb 的 config 文件中配置;linux 下 conf 位置 /etc/mongod.conf
。
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
2
3
4
5
# Journal日志
开启 Journal 日志可以为 mongodb 增加额外的可靠性保障。开启后,mongodb 先在内存保存写操作,并记录 journal 日志到磁盘,然后定期集中提交(默认是100ms),最后在正式数据库执行更改。为了保证 journal 日志文件的一致性,写日志是一个原子操作。
如果开启了 journal 日志功能,mongodb 会在数据目录下创建一个 journal 文件夹,用来存放日志。同时这个目录也会有一个 last-sequence-number 文件。如果 mongodb 安全关闭的话,会自动删除此目录下的所有文件,如果是崩溃导致的关闭,不会删除日志文件。在MongoDB进程重启的过程中,journal日志文件用于自动修复数据到一个一致性的状态。
可以通过 storage.smallFiles
参数来配置 journal 日志文件的大小。
开启方式:
mongod -journal
或者在 mongodb 的 config 文件中配置:
# Where and how to store data.
storage:
journal:
enabled: true
2
3
4
# Oplog主从日志
mongodb 的高可用复制策略有一个叫做 Replica Set. Replica Set 复制过程中有一个服务器充当主服务器,而一个或多个充当从服务器,主服务将更新写入一个本地的 collection 中,这个 collection 记录着发生在主服务器的更新操作。并将这些操作分发到从服务器上。这个日志是 Capped Collection 。利用如下命令可以配置:mongod -oplogSize=1024
单位是M
# 慢查询日志
慢查询记录了执行时间超过了所设定时间阀值的操作语句。慢查询日志对于发现性能有问题的语句很有帮助,建议开启此功能并经常分析该日志的内容。要配置这个功能只需要在 mongod 启动时候设置 profile 参数即可。例如想要将超过5s的操作都记录,可以使用如下语句:
mongod --profile=1 --slowms=5
profile 有三个值:0,1,2。它们表示的意义如下:
0 – 不开启
1 – 记录慢命令 (默认为>100ms)
2 – 记录所有命令
2
3
也可以在客户端调用 db.setProfilingLevel(级别,时间)
db.setProfilingLevel( level , slowms );
db.setProfilingLevel( 1 , 10 );
2