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

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

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

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

    service mongodb restart
    service mongodb status

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

       查官方和乡下资料,折腾了半天没有解决,想着升级一下得了。apt 源中提供的最新版本只到 3.2.10,没法再升了,只能找找官方的看看。

       卸载原有版本

    apt purge mongodb
    apt autoremove

       在官方网站查到的最新版本安装方法如下

    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 的。这东西也不好卸载重装啊,依赖它的软件太多了。想想算了,还是按最终方案,先把数据导出,升级后再导入吧。

       装回原来版本

    apt install mongodb

    service mongodb start
    service mongodb status

       网上找到的 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/

       在配置文件中禁用基于角色的访问控制并重启后,在终端执行

    mongodump -d dbname -o bkpdirectory

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

       忽然想起,既然是导出数据再升级,何必非要先安装 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,启动起来了。

       然后就是还原备份了。

    mongorestore -d dbname --dir bkpdirectory

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

       删除原来的数据文件

    rm -R /opt/data/bkp

       然后回到正题,在配置文件中添加内存限制。在 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" | 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

参考:https://www.cnblogs.com/yiduobaozhiblog1/p/9934933.html


Share Tweet Send
0 Comments
Loading...
You've successfully subscribed to 隔窗听雨
Great! Next, complete checkout for full access to 隔窗听雨
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.
豫ICP备19045256号-1