MongoDB笔记: 常见问题
安装
在Centos7下以tgz形式安装.
下载安装包
现在最新的版本是4.2.2, 但是客户端Robot3T现在对4.2的支持不太好, 所以还是使用4.0版本, 下载的是最新的4.0.14: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.14.tgz
安装步骤
# 解压
tar zxvf mongodb-linux-x86_64-rhel70-4.0.14.tgz
# 移动到/opt/mongodb
mv mongodb-linux-x86_64-rhel70-4.0.14 /opt/mongodb/
cd /opt/mongodb/
# 将其软链到 /opt/mongodb/latest
ln -s mongodb-linux-x86_64-rhel70-4.0.14 latest
在/opt/mongodb/latest/下创建配置文件 mongod.conf, 这里没有启用用户名验证, verbosity一开始可以设为2, 安装启动没问题再改回0
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
systemLog:
destination: file
path: "/data/mongodb/mongod.log"
verbosity: 0
logAppend: true
net:
bindIp: "172.17.5.10"
port: 27017
创建相应的用户, 目录, 并设置好权限
# 将mongodb的可执行文件软链到bash路径中
ln -s /opt/mongodb/latest/bin/* /usr/local/bin/
# 创建用户
useradd mongod
# 创建对应的目录并设置用户
cd /data/
mkdir -p mongodb/data
chown -R mongod:mongod mongodb/
创建systemd服务文件, 并添加到开机启动中
vi /lib/systemd/system/mongodb.service
systemctl list-unit-files
systemctl enable mongodb.service
systemctl start mongodb
systemctl status mongodb
mongodb.service的内容
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target [Service]
User=mongod
Group=mongod
ExecStart=/usr/local/bin/mongod --quiet --config /opt/mongodb/latest/mongod.conf [Install]
WantedBy=multi-user.target
备份脚本
备份后压缩, 并只保留最新的60个备份文件
#!/bin/sh MAXIMUM_BACKUP_FILES=60
BASE_FOLDER="/data/backup/mongo_dump"
# mongodb config
DB_HOSTNAME="172.17.5.10"
DB_PORT="27017"
DB_USERNAME=""
DATABASES=(
"rikyplus"
)
EXCLUDED_TABLES=(
) #=========
echo "MongoDB Backup Task" CURRENT_DATE=$(date +%Y%m%d-%H%M)
DUMP_FOLDER="${DB_HOSTNAME}_${CURRENT_DATE}"
BACKUP_FOLDER="${BASE_FOLDER}/${DUMP_FOLDER}"
mkdir $BACKUP_FOLDER count=0
while [ "x${DATABASES[count]}" != "x" ];do
count=$(( count + 1 ))
done
echo "[+] ${count} databases will be dumped..." # do the dump
for DATABASE in ${DATABASES[@]};do
echo "[+] Dumping: ${DATABASE}" IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}";do
IGNORED_TABLES_STRING+=" --excludeCollection=${TABLE}"
done
echo -n " Began: ";echo $(date)
if $(mongodump -h ${DB_HOSTNAME}:${DB_PORT} -d ${DATABASE} -o ${BACKUP_FOLDER} ${IGNORED_TABLES_STRING});then
echo " Dumped successfully"
else
echo " Failed dumping this database"
fi
echo -n " Finished: ";echo $(date)
done # Compress to tar ball
echo
echo "[+] Packaging and compressing the backup folder..."
if $(tar -czf ${BACKUP_FOLDER}.tar.gz -C ${BASE_FOLDER} ${DUMP_FOLDER});then
rm -rf ${BACKUP_FOLDER}
echo " Compressed successfully"
else
echo " Failed compressing this dump"
fi
echo -n " Finished: ";echo $(date) # Remove the oldest one
BACKUP_FILES_MADE=$(ls -l ${BASE_FOLDER}/*.tar.gz | wc -l)
BACKUP_FILES_MADE=$(( $BACKUP_FILES_MADE - 0 ))
echo
echo "[+] There are ${BACKUP_FILES_MADE} backup files" if [ $BACKUP_FILES_MADE -gt $MAXIMUM_BACKUP_FILES ];then
REMOVE_FILES=$(( $BACKUP_FILES_MADE - $MAXIMUM_BACKUP_FILES ))
echo "[+] Remove ${REMOVE_FILES} old backup files."
ALL_BACKUP_FILES=($(ls -t ${BASE_FOLDER}/*.tar.gz))
EXPIRED_FILES=("${ALL_BACKUP_FILES[@]:${MAXIMUM_BACKUP_FILES}:${BACKUP_FILES_MADE}}")
echo "[+] Removing the expired backup files..."
for FILE in ${EXPIRED_FILES[@]};do
rm -f ${FILE}
done
fi echo -n " Finished: ";echo $(date)
系统配置
设置ulimit
MongoDB的文件机制
- 每个Collection会单独创建一个数据文件(collection-xxxxxx.wt)
- 每个索引会单独创建一个文件(index-xxxxxx.wt)
- 每个Collection至少需要一个数据文件和一个默认索引(_id索引)
这样每创建1个Collection会占用2个文件句柄, 还需要包含MongoDB自身需要使用的句柄(内部文件如wiredTiger.wt之类, 加上网络连接), 所以Collection的数量是受系统限制的. MongoDB推荐的方式是分片, 不是分库分表. 会造成的问题比如重启时间会很长, 这不是MongoDB推荐的使用方式.
在句柄消耗达到系统上限后, 会报directory-sync: open: Too many open files错误, 并导致mongod崩溃退出. 增加限制需要修改/etc/security/limits.conf (或者 /etc/security/limits.d/20-nproc.conf), 增加或修改为以下内容
* soft nofile
* hard nofile
* soft nproc
* hard nproc
root soft nproc unlimited
需要重启, 用 ulimit -n 检查
MongoDB笔记: 常见问题的更多相关文章
- MongoDB笔记2018.2.6
MongoDB笔记2018.2.6 1.先简单接触下linux,大部分教程是在linux环境下的操作,要不然看不懂教程 2.找教程或视频 教程推荐菜鸟教程 学习MongDB前需要懂一定的Mysql语法 ...
- Mongodb 笔记09 备份、部署MongoDB
备份 1. 只有在有信心能在紧急情况下完成迅速部署的情况下,备份才是有用的.所以,无论选择了哪种备份技术,一定要对备份及恢复备份的操作进行练习,知道了然于心. 2. 通常情况下,应对副本集的非主节点( ...
- MongoDB笔记(三)启动命令mongod的参数
上一节有关访问权限的笔记,是由启动命令mongod的参数auth引发的有关问题,这节就来看看mongod的其他参数 MongoDB启动命令mongod参数说明: 基本配置 --quiet # 安静输出 ...
- MongoDB笔记
mongodb简介 MongoDB 是一个基于分布式文件存储的数据库.存储的是Bson结构的文档(二进制的JSON),内部执行引擎为JS解释器,把文档存储为BSON结构,在查询时,转换为JS对象,可以 ...
- 初学mongodb笔记
先下载下mongodb,这里官网下载,https://www.mongodb.com/download-center?jmp=nav,根据自己的系统选择下载, 然后解压一下:会有这个文件夹\mongo ...
- YII2操作mongodb笔记(转)
componets配置: 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://test: ...
- Mongodb 笔记08 了解应用的动态、数据管理、持久性
了解应用的动态 1. 了解正在进行的操作:db.currentOp() , 可以加过滤条件,从而只显示符合条件的结果. 1). 寻找有问题的操作:db.currentOp() 最常见的操作就是用来寻找 ...
- Mongodb 笔记07 分片、配置分片、选择片键、分片管理
分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...
- Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理
副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...
随机推荐
- EFCore 中执行存储过程返回DataSet DataTable
在项目中由于需求,需要返回复杂的数据,需要执行存储过程,但是在DONETCORE2.0中,看官网文档执行的sql的有点操蛋,满足不了需求,就想到了ADO.NET 于是找资料,也没有合适的,就动手自己封 ...
- MySQL DataType--定点数(Fixed-Point Types)学习
DECIMAL和NUMERIC MySQL支持两种定点数类型:DECIMAL和NUMERIC,而NUMERIC实现为DECIMAL,因此MySQL中DECIMAL和NUMERIC等价相同. 如使用下面 ...
- python(写入excel操作-xlwt模块)
一.安装xlwt模块 pip install xlwt 二.excel写入操作 这种方式只能新增或者覆盖文件写入 import xlwt # 创建一个workbook 设置编码 workbook = ...
- LeetCode初级算法--其他02:有效的括号
LeetCode初级算法--其他02:有效的括号 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- Django项目中使用qq第三方登录。
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
- linux下安装cryptography兼论查找合适pip的whl文件技巧
cryptography这个包,如果源码安装,需要GCC之类的编译,在生产环境不太现实. 所以选择了whl文件安装. 但在官方提供的whl文件里,没有我们熟悉的cp36-cp36m这样的命名文件,肿么 ...
- python测试开发django-rest-framework-65.序列化(ModelSerializer)
前言 serializers.Serializer可以对modle模型中的字段序列化,并且必须写create和update两个方法.ModelSerializer可以看成是Serializer的一个升 ...
- python笔记38-使用zmail发各种邮件案例代码
前言 本篇介绍使用zmail发各种格式的邮件,并运行成功的代码,小伙伴们只需更换自己的邮箱就可以运行起来了 content_text发送纯文本 先从最简单的发送纯文本的邮件开始,调通发送邮件的代码. ...
- Python练习题——用列表的方法输出杨辉三角
def main(): num = int(input('请输入行数: ')) yh = [[]] * num #创建num行空列表 for row in range(len(yh)): #遍历每一行 ...
- 【http】Coolie 属性
expires属性 指 定了coolie的生存期,默认情况下coolie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户推出浏览器后这些值也会丢失,如果想让 cookie存在一段时间,就要为e ...