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数据库中的一个固定集合.备份节点通过查询整个集合就可 ...
随机推荐
- Nginx 配置文件nginx.conf中文详解
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
- Mariadb/MySQL多实例实战
Mariadb/MySQL多实例实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装MySQL程序 无论你喜欢哪种方式安装均可,关于源码安装,yum安装或者二进制安装,可以 ...
- MongoDB CPU利用率很高,怎么破(转)
经常有用户咨询:MongoDB CPU 利用率很高,都快跑满了,应该怎么办? 遇到这个问题,99.9999% 的可能性是「用户使用上不合理导致」,本文主要介绍从应用的角度如何排查 MongoDB CP ...
- src挖掘过程之信息收集
信息收集 1.厂商域名 2.厂商ip段 3.厂商业务信息 域名收集 1.基于SSL证书查询 2.第三方网站接口查询 3.Github 4.DNS解析记录 5.子域名枚举等 基于 ...
- SQL进阶系列之9用SQL处理数列
写在前面 关系模型的数据结构里,并没有顺序的概念,但SQL处理有序集合也有坚实的理论基础 生成连续编号 --生成连续编号 CREATE TABLE Digits (digit INTEGER PRIM ...
- python笔记42-http请求命令行工具(httpie)
前言 通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观. python有一个给人类使用的requests库,非常的简单方便. ...
- Python 多版本安装模块
自己安装的是 3.7.3 版本的,但是在安装其他软件的时候自带有Python,但是版本都不一样,有2.7的有3.7的. 自己平时用没有问题,配置的环境都是自己的 3.7.3 的,在用其他软件的Pyth ...
- 《团队作业第三、四周》五阿哥小组Scrum 冲刺阶段---Day4
<团队作业第三.四周>五阿哥小组Scrum 冲刺阶段---Day3 一.项目燃尽图 二.项目进展 20182310周烔今日进展: 主要任务一览:聊天软件主界面 20182330魏冰妍今日进 ...
- Linux学习笔记——管道PIPE
管道:当从一个进程连接数据流到另一个进程时,使用术语管道(pipe).# include <unistd.h> int pipe(int filedes[2]); //创建管道 pipe( ...
- c语言的可变参数实例
可变参数函数实现的步骤如下: 1.在函数中创建一个va_list类型变量 2.使用va_start对其进行初始化 3.使用va_arg访问参数值 4.使用va_end完成清理工作 接下来我们来实现一个 ...