1. 在服务器中安装mongo4.0.6
在官网中下载需要的mongo版本
https://www.mongodb.com/download-center/community
2. 安装mongo4.0.6
自行查询相关安装配置,可参考:图文详解Linux系统安装MongoDB4.0过程
3. 数据备份恢复
数据备份:
(1)整库备份:mongodump -h {ip} --port 27017 -d {testdb} -o /data/temp
说明:-h 后为数据库所在服务器; --port 后为端口; -d后为指定库名;-o后为存储位置
(2)collection备份:mongodump -h {ip} -d {testdb} -c {test} -o /data/temp
说明:-c后为具体collection名
数据恢复:
(1)整库恢复:mongorestore -h {ip} -d {testdb} /data/temp
(2)collection恢复:mongorestore -h {ip} -d {testdb} -c {test} /data/temp/{testdb}/{test}.bson
说明:恢复时只需要指定到bson文件即可
4. mongo冗余数据清理
问题:数据备份恢复后所占内容降低,原库中存在冗余数据,怎么通过指令清理冗余数据?
mongodb不会自动释放已经占用的硬盘空间,即使删除collection也不行,除非删除database;
- 数据量小的时候可以通过备份恢复的方式清理mongo中占用的硬盘空间
- 通过执行db.repairDatabase()进行释放
原理:压缩数据库中所有的collections,等同于分别在每个collection上进行压缩命令。减少了磁盘中数据文件的总大小,并且重建了数据库中的所有索引。修复过程中,其他所有操作都无法执行,直到修复完成。
5. 离线备份(shell脚本并通过crontab执行)
#!/bin/sh
DUMP=/home/mongodb/bin/mongodump # mongodump备份文件执行路径
OUT_DIR=/data/mongodb_bak/mongodb_bak_file # 文件备份目录
TAR_DIR=/data/mongodb_bak/mongodb_bak_zip # 文件压缩后备份存放路径
DATE=`date -d "today" +"%Y-%m-%d-%H-%M-%S"` # 获取当前系统时间,作为文件名的一部分
DAYS=7 # 只保留最近7天的备份
TAR_BAK="mongodb_bak_$DATE.tar.gz" # 最终保存的数据库备份文件名
cd $OUT_DIR
rm -rf $OUT_DIR/
mkdir -p $OUT_DIR/$DATE
mkdir -p $TAR_DIR/
$DUMP -o $OUT_DIR/$DATE # 备份全部数据库(根据需求修改)
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE # 压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete # 删除7天前的备份文件
scp $TAR_DIR/$TAR_BAK {ip}:/home/data/mongodb_bak/$TAR_BAK # 通过 scp 发送至另一台服务器
文件传输问题处理:
在进行服务器间数据传输时通过scp方式进行,传输时需要输入服务器密码,可通过ssh(ssh-keygen -t rsa)生成id_rsa.pub文件(/root/.ssh/),如果另一台服务器中root/.ssh/下没有id_rsa.pub文件则复制过去并改名为authorized_keys,如果存在authorized_keys则只需将id_rsa.pub文件中内容附加其中即可。
传输文件指令:scp mongo_bak {ip}:/data/
原文参考:
[1]: https://www.iteye.com/blog/ysj5125094-2128157
[2]: https://blog.csdn.net/Ginny_2017/article/details/88886262
[3]: https://blog.csdn.net/jochen_M/article/details/84074097