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数据库中的一个固定集合.备份节点通过查询整个集合就可 ...
随机推荐
- Solr基础知识二(导入数据)
上一篇讲述了solr的安装启动过程,这一篇讲述如何导入数据到solr里. 一.准备数据 1.1 学生相关表 创建学生表.学生专业关联表.专业表.学生行业关联表.行业表.基础信息表,并创建一条小白的信息 ...
- jquery.widget开发(1)
jquery.widget是挂件,通过挂件模式挂载在jquery对象上,其实本质上也就是用了$.fn.extend和$.extend的扩展. http://blog.sina.com.cn/s/blo ...
- php的多功能文件操作类
本类为文件操作类,实现了文件的建立,写入,删除,修改,复制,移动,创建目录,删除目录,列出目录里的文件等功能,路径后面别忘了加"/" 创建指定路径下的指定文件 * @param s ...
- Xshell连接虚拟机中的Ubuntu
虚拟机中安装好Ubuntu系统后使用cmd测试ping 设置xshell的连接ip 连接 连接失败 安装openssh-server sudo apt install openssh-server 再 ...
- sqliteman install parameter
.安装前准备 系统要求:linux Qt库版本:一般都有 .安装文件 官网自行下载 .安装 )这里用的pscp pscp .\sqliteman-.tar.gz root@192.168.30.140 ...
- 测试MongoDB的自动分片
MongoDB的自动分片: test库分片配置: db.shards.find(){ "_id" : "shard0000", "host" ...
- spring cloud (一) 服务注册中心 Eueka
1 pom.xml 添加依赖包 <dependency> <groupId>org.springframework.cloud</groupId> <arti ...
- python基础---python环境搭建windows版
Python3.7.1标准安装 1.官网下载 官网地址:https://www.python.org/downloads/ 下载3.7.1 下载64/32bitwindows安装文件,下图x86-64 ...
- 2019安徽省程序设计竞赛 D.自驾游(最短路)
这道题最后没过,估计是痛失省一了,现在来补一下,当时思路是对的应该是代码出了问题导致样例没过最后nc的除了2,一直WA 题意: 给一张联通图,有两个导航系统,其中一个系统认为第i条边的权值是Pi,另一 ...
- 深度学习Keras框架笔记之Dense类(标准的一维全连接层)
深度学习Keras框架笔记之Dense类(标准的一维全连接层) 例: keras.layers.core.Dense(output_dim,init='glorot_uniform', activat ...