====== MongoDB 架构 ======
[[https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/|安装 Mongodb@5.0 ubuntu]] [[https://www.mongodb.com/docs/v5.0/tutorial/install-mongodb-on-os-x/|mac OX]]
[[https://www.mongodb.com/developer/products/mongodb/mongodb-on-raspberry-pi/|树莓派只能安装4.4版本]]
sudo systemctl restart mongod
===== 安全 =====
[[https://zhuanlan.zhihu.com/p/37837627|防止被黑客攻击]] 主要措施
* 启动认证登录
* 设定复杂密码
* 修改端口
* 限制内网访问
通过 MongoDB 自带的 bindip 参数在我的实践中并不管用,这里采用的是 Linux 自带的iptables 功能,限制允许访问 MongoDB 端口的IP地址:
# 拒绝所有访问27027端口的请求
$ sudo iptables -I INPUT -p tcp --dport 27027 -j DROP
# 允许本地访问mongo端口
$ sudo iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27027 -j ACCEPT
$ sudo iptables-save
{{tag>database mongo}}
===== 搭建副本 =====
参考文章: [[https://jelly.jd.com/article/5f990ebbbfbee00150eb620a|MongoDB 副本集之入门]]
==== 主机设定 ====
设定主机名字:''hostnamectl set-hostname serverpi'' 为''serverpi'' ,存储在 ''/etc/hostname'' \\ 编辑 ''/etc/hosts'' 使得服务器之间互相认识
217.160.61.19 serverionos
192.168.0.136 servcerpi
...
==== 配置用例 ====
修改''mongod.conf'' 文件,并启动案例。详细请参阅以下上篇文章:[[https://segmentfault.com/a/1190000039403622|文章一]] [[https://www.cnblogs.com/gjc592/p/13454845.html|文章二]] [[https://www.cnblogs.com/operationhome/p/10744712.html|文章三]]
/usr/bin/mongod -f /home/mongodb/33720/etc/mongod.conf
/usr/bin/mongod -f /home/mongodb/33721/etc/mongod.conf
db.shutdownServer({force: ,timeoutSecs: }) #关闭服务, 这种方式启动的案例 systemctl 不认识
此文章提及到主节点[[https://www.jianshu.com/p/73b5ad930f47|人工降级]]为副本集。
===== 数据备份 =====
==== mongodump ====
mongodump --uri="mongodb://user:pw@192.168.0.157:33720" --authenticationDatabase admin -d Stock -o ~/projects/Backup
mongorestore --uri="mongodb://user:pw@143.47.185.127:33720" --authenticationDatabase admin -d Stock ~/projects/Backup/Stock
注意备份前锁写操作 ''db.fsyncLock()'' 以及备份结束后开通写操作 ''db.fsyncUnlock()''
==== 压缩文件备份 ====
将目录压缩到一个文件当中 ''%%tar -czf /home/ubuntu/Backup/`date +%F`_mongo_all.tar.gz /home/ssd/mongodb%%''
解压到原来的目录 ''%%tar -xzf /home/ubuntu/Backup/2021-07-17_mongo_all.tar.gz -C /%%''
:!: //解压的参数写根目录就可以了,它会按照压缩时的目录解压// 。
利用系统 crontab 定时任务,制定一个每周和每月的备份计划。编写备份数据的脚本如下,
#/usr/bin/sh!
mongo --port 33720 -u goldentianya -p 's#;zb_OfJW]P' <
然后制定计划任务
crontab -e # 系统会建立/修改一个临时脚本文件。在文件中输入
# 每周日或每月1号的凌晨2点执行数据库备份
0 2 1 * 0 /home/mongobackup/dobachup.sh