安装

在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笔记: 常见问题的更多相关文章

  1. MongoDB笔记2018.2.6

    MongoDB笔记2018.2.6 1.先简单接触下linux,大部分教程是在linux环境下的操作,要不然看不懂教程 2.找教程或视频 教程推荐菜鸟教程 学习MongDB前需要懂一定的Mysql语法 ...

  2. Mongodb 笔记09 备份、部署MongoDB

    备份 1. 只有在有信心能在紧急情况下完成迅速部署的情况下,备份才是有用的.所以,无论选择了哪种备份技术,一定要对备份及恢复备份的操作进行练习,知道了然于心. 2. 通常情况下,应对副本集的非主节点( ...

  3. MongoDB笔记(三)启动命令mongod的参数

    上一节有关访问权限的笔记,是由启动命令mongod的参数auth引发的有关问题,这节就来看看mongod的其他参数 MongoDB启动命令mongod参数说明: 基本配置 --quiet # 安静输出 ...

  4. MongoDB笔记

    mongodb简介 MongoDB 是一个基于分布式文件存储的数据库.存储的是Bson结构的文档(二进制的JSON),内部执行引擎为JS解释器,把文档存储为BSON结构,在查询时,转换为JS对象,可以 ...

  5. 初学mongodb笔记

    先下载下mongodb,这里官网下载,https://www.mongodb.com/download-center?jmp=nav,根据自己的系统选择下载, 然后解压一下:会有这个文件夹\mongo ...

  6. YII2操作mongodb笔记(转)

    componets配置: 'mongodb' => [ 'class' => '\yii\mongodb\Connection', 'dsn' => 'mongodb://test: ...

  7. Mongodb 笔记08 了解应用的动态、数据管理、持久性

    了解应用的动态 1. 了解正在进行的操作:db.currentOp() , 可以加过滤条件,从而只显示符合条件的结果. 1). 寻找有问题的操作:db.currentOp() 最常见的操作就是用来寻找 ...

  8. Mongodb 笔记07 分片、配置分片、选择片键、分片管理

    分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...

  9. Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理

    副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...

随机推荐

  1. 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程

    版权声明:本文为CSDN博主「C_成」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_41692307 ...

  2. MySQL MHA--在线主库切换(Online master switch)

    在线主库切换(Online master switch)条件 1.所有节点正常运行,无论时原主还是新主或者其他从库 if ( $#dead_servers >= 0 ) { $log->e ...

  3. maven打包成可运行的jar

    在pom.xml添加 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</ ...

  4. C++学习(1)—— 初识C++

    1. 变量 作用:给一段指定的内存空间起名,方便操作这段内存空间 语法:数据类型 变量名称=变量初始值​ #include<iostream> using namespace std; i ...

  5. LeetCode初级算法--其他02:有效的括号

    LeetCode初级算法--其他02:有效的括号 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  6. mysql类似to_char()to_date()函数mysql日期和字符相互转换方法date_f

    mysql 类似to_char() to_date()函数mysql日期和字符相互转换方法 date_format(date,'%Y-%m-%d') -------------->oracle中 ...

  7. js插件---WebUploader 如何接收服务端返回的数据

    js插件---WebUploader 如何接收服务端返回的数据 一.总结 一句话总结: uploadSuccess有两个参数,一个是file(上传的文件信息),一个是response(服务器返回的信息 ...

  8. 微信小程序之执行环境

    明白了小程序中的 JavaScript 同浏览器以及NodeJS有所不同后,开发者还需要注意到另外一个问题,不同的平台的小程序的脚本执行环境也是有所区别的. 小程序目前可以运行在三大平台: iOS平台 ...

  9. Android 网络服务介绍

    1. 介绍 Android网络服务主要包括如下四个部分 - ConnectivityService: 提供数据连接管理服务,包括移动数据.WIFI.以太网等 - NetworkPolicyManage ...

  10. javax validation--参数基础校验

    Bean Validation 1.1当前实现是hibernate validator 5,且spring4才支持.接下来我们从以下几个方法讲解Bean Validation 1.1,当然不一定是新特 ...