
前段时刻,小我私人小措施 因处事器磁盘空间被占满,导致MongoDB挂了。整理了一些无用的数据后,重启MongoDB,竟然无法启动,一番折腾(20分钟)后,总算修复了。这让我意识到:固然是小我私人小项目,但也必需按期备份啊,不然数据丢了很忧伤的说。
碎碎念
我不是MongoDB好手,之以是选择MongoDB,是由于需求不明晰——MongoDB很得当不明晰需求场景的开拓。
小我私人对Elasticsearch更认识,Elasticsearch也很得当不定需求的营业开拓;但小我私人处事器只有1G内存,用Elasticsearch得进级处事器,得花许多几何钱啊啊啊。
MongoDB备份较量简朴,只需用内置的 mongodump 即可,呼吁名目如下:
- mongodump -h {mongodb主机名}:{端口} -u {账号} -p {暗码} -d {数据库名称} -o {存储路径}
然而,笔者为MongoDB配置的暗码是带有非凡字符的,譬喻 @#$ 之类,直接以如上情势执行呼吁,会报错!
以是笔者选择不带 -p 参数执行呼吁,即:
- mongodump -h {mongodb主机名}:{端口} -u {账号} -d {数据库名称} -o {存储路径}
然后,呼吁提醒符会提醒输入暗码。譬喻
- # mongodump -h 127.0.0.1 -u user -d itmuch -o /tmp/somepathEnter password:
至此已实现MongoDB的备份。然而,手动备份照旧挺贫困的,怎么实现备份的自动化呢?
自动备份
正常来说,自动备份是较量简朴的——只需将手动备份的呼吁做成Shell剧本,并配置按时使命即可。然而,笔者的场景,呼吁是必要交互式输入暗码的啊!
怎么才气自动输入暗码呢?expect 登场了——一款提供自动交互的器材。
安装expect
- yum install -y expect
编写expect剧本
expect语法很是简朴,和Shell险些一样。笔者的剧本编写如下:
- #!/bin/expect
- # spawn是expect的语句,执行呼吁前需添加该字眼
- set DATE [exec date "+%Y-%m-%d"]
- set DIR /xxxxx/dbbak-$DATE
- spawn rm -rf $DIR
- spawn echo 'removing...$DIR'
- spawn mongodump -h {host:port} -u {user} -d {dbname} -o $DIR
- # 交互获取是否返回password:要害字
- expect "password:"
- # 将暗码发送已往,留意最后的换行不能少,不然得人工输入回车。
- send "暗码r"
- # 逗留在长途节制台,没有这行就会直接返回当地节制台,而不等shell执行完
- interact
注释很全面了,智慧的你阅读必定没有压力。最终备份出来的文件会存放在 /xxxxx/dbbak-备份日期 目次中。
自动备份
笔者操作Linux按时使命实现自动执行。
- crontab -e
在新窗口中添加如下内容:
- 0 0 1 * * ? /usr/bin/expect 上面expect shell的完备路径
本来觉得这样就可以按时执行了,然而却无法正常执行。
百度后,将剧本修改为如下,终于可以正常执行了。
- #!/bin/expect
- # spawn是expect的语句,执行呼吁前需添加该字眼
- set DATE [exec date "+%Y-%m-%d"]
- set DIR /xxxxx/dbbak-$DATE
- spawn rm -rf $DIR
- spawn echo 'removing...$DIR'
- spawn mongodump -h {host:port} -u {user} -d {dbname} -o $DIR
- # 交互获取是否返回password:要害字
- expect "password:"
- # 将暗码发送已往,留意最后的换行不能少,不然得人工输入回车。
- send "暗码r"
-
- set timeout 120
- expect eof
-
- exit
总结
本文没什么难点,都是一些细节——
- 由于暗码含有非凡字符,以是必要交互式输入暗码;
- 由于要交互式输入暗码,以是行使了expect
写出来首要是总结下踩到的坑,其它,expect是一款通用的提供自动交互的器材,用来实现ssh的自动登录、sftp的自动登录、mysql的自动登录等。剧本的套路都和本文展示的布局根基相同。 【编辑保举】 - 10个顶级Mongodb GUI器材,以图形方法打点数据库
- 10个顶级Mongodb GUI器材,以图形方法打点数据库
- 七步操纵!教你正确改换MySQL数据库字符集
- 高可用数据库主从复制延时的办理
- 办理线上数据库死锁,就是这么简朴!
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|