对 MongoDB 内存占用进行限制以及从 3.2 升级到 4.0 原 荐

栏目: 数据库 · 发布时间: 5年前

内容简介:前几天往 MongoDB 中写入了几个 G 的数据,发现 MongoDB 内存占用太 TMD 高了。不使用的时候也不释放,搞得交换空间都整了好几 G,其他进程的服务访问起来也慢得要死。没办法啊,人穷,能省就省。今天本来是准备想办法限制一下 MongoDB 的内存占用,可惜很多事情不折腾不行啊。系统中安装的是 Debian 9 官方 apt 源提供的 MongoDB 包,是 3.2 的。在配置文件中设置 wiredTigeredCacheSizeGB = 0.5 后,终端输入服务无法启动,显示状态是 dead

前几天往 MongoDB 中写入了几个 G 的数据,发现 MongoDB 内存占用太 TMD 高了。不使用的时候也不释放,搞得交换空间都整了好几 G,其他进程的服务访问起来也慢得要死。没办法啊,人穷,能省就省。今天本来是准备想办法限制一下 MongoDB 的内存占用,可惜很多事情不折腾不行啊。

系统中安装的是 Debian 9 官方 apt 源提供的 MongoDB 包,是 3.2 的。在配置文件中设置 wiredTigeredCacheSizeGB = 0.5 后,终端输入

service mongodb start
service mongodb status

服务无法启动,显示状态是 dead,启动日志提示 wiredTigeredCacheSizeGB 只能是整数。

查官方和乡下资料,折腾了半天没有解决,想着升级一下得了。Debian 9 的提供的最新版本只到 3.2.10,没法再升了,只能找找官方的看看。在官方网站查到的最新版本安装方法如下

curl https://www.mongodb.org/static/pgp/server-4.0.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
apt update
apt install mongodb-org

可惜,直接安装 4.0 不兼容啊。指定数据目录为原来的数据目录后,启动不起来,试了 3.6 也不行。

看网上有人说需要先升 3.4,再升 3.6,最后才能升到 4.0。到官网找到 3.4 的安装说明,只有针对 Debian 8 的包,试试

curl https://www.mongodb.org/static/pgp/server-3.4.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | tee /etc/apt/sources.list.d/mongodb-org-3.4.list
apt update
apt install mongodb-org=3.4.20 mongodb-org-server=3.4.20 mongodb-org-shell=3.4.20 mongodb-org-mongos=3.4.20 mongodb-org-tools=3.4.20

安装不上,错误信息显示找不到 libssl1.0.1,系统安装的 libssl 版本太高了,1.1 的。这东西也不好卸载重装啊,其他依赖它的软件太多了。想想算了,还是先把数据导出出了,升级后再导入吧。

网上找到的 MongoDB 导入导出以及数据库备份的文章

-------------------MongoDB数据导入与导出-------------------

1、导出工具:mongoexport

1、概念:
    mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
2、语法:
    mongoexport -d dbname -c collectionname -o file --type json/csv -f field
    参数说明:
        -d :数据库名
        -c :collection名
        -o :输出的文件名
        --type : 输出的格式,默认为json
        -f :输出的字段,如果-type为csv,则需要加上-f "字段名"
3、示例:
    sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json -f  "_id,user_id,user_name,age,status"

2、数据导入:mongoimport

1、语法:
    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
    参数说明:
        -d :数据库名
        -c :collection名
        --type :导入的格式默认json
        -f :导入的字段名
        --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
        --file :要导入的文件

2、示例:
    sudo mongoimport -d mongotest -c users --file /home/mongodump/articles.json --type json

-------------------MongoDB备份与恢复-------------------

1、MongoDB数据库备份

1、语法:
    mongodump -h dbhost -d dbname -o dbdirectory
    参数说明:
        -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
        -d: 需要备份的数据库实例,例如:test
        -o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。
2、实例:
    sudo rm -rf /home/momgodump/
    sudo mkdir -p /home/momgodump
    sudo mongodump -h 192.168.17.129:27017 -d itcast -o /home/mongodump/
    -

2、MongoDB数据库恢复

1、语法:
    mongorestore -h dbhost -d dbname --dir dbdirectory

    参数或名:
        -h: MongoDB所在服务器地址
        -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
        --dir: 备份数据所在位置,例如:/home/mongodump/itcast/
        --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
2、实例:
mongorestore -h 192.168.17.129:27017 -d itcast_restore --dir /home/mongodump/itcast/

很好,成功备份到其他目录了。

忽然想起,既然是导出数据再升级,何必非要先安装 3.6,先装 4.0 试试再说不是更好?咱的数据结构不复杂,说不定会兼容。

安装完成后,重新在配置文件中指定数据目录。为防意外,先移动原来的数据文件,创建一个新文件夹,然后再启动

mv /opt/data/mongodb /opt/data/mongodb1
mkdir /opt/data/mongodb

service mongod start
service mongod status

启动不了,看来文件夹不是 MongoDB 用户组还不行。换个方式

rm -R /opt/data/mongodb
mv /opt/data/mongodb1 /opt/data/mongodb

mkdir /opt/data/bkp
mv /opt/data/mongodb/* /opt/data/bkp

service mongod start
service mongod status

OK,启动起来了。

然后就是还原备份了。数据量比较大,备份的时候还算快,可还原就慢了。特别是大的集合,1 M 要六七秒钟,有的数据项数量多但单个比较小,更慢。总共大概花了两个半小时。还好,没出什么问题。

然后回到正题,添加内存限制。在 storage 下面

wiredTiger:
  engineConfig:
    cacheSizeGB: 0.5

最后,重新添加用户。在 admin 集合创建超级用户

db.createUser({user:'name',pwd:'pwd',roles:['userAdminAnyDatabase']})

在数据集合创建一般用户

db.createUser({user:'name',pwd:'pwd',roles:['dbAdmin', 'readWrite']})

在配置文件中启用基于角色的访问控制

security:
  authorization: enabled

完成。

其他在网络上查到的:

MongoDB 3.6 的安装

curl https://www.mongodb.org/static/pgp/server-3.6.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/3.6 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
apt install mongodb-org=3.6.12 mongodb-org-server=3.6.12 mongodb-org-shell=3.6.12 mongodb-org-mongos=3.6.12 mongodb-org-tools=3.6.12

如果不兼容,可以在导入数据的时候指定 --noIndexRestore 参数不导入索引

mongorestore -h host --port port -u username -p password --noIndexRestore

以上所述就是小编给大家介绍的《对 MongoDB 内存占用进行限制以及从 3.2 升级到 4.0 原 荐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

疯狂Java讲义

疯狂Java讲义

李刚 / 电子工业出版社 / 2012-1-1 / 109.00元

《疯狂Java讲义(附光盘第2版)》是《疯狂Java讲义》的第2版,第2版保持了第1版系统、全面、讲解浅显、细致的特性,全面介绍了新增的Java 7的新特性。 《疯狂Java讲义(附光盘第2版)》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、......一起来看看 《疯狂Java讲义》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码