异想天开

What's the true meaning of light, Could you tell me why

阿里云主机备份脚本

日期:2014-09-13 15:35:33
  
最后更新日期:2014-09-13 15:35:33
【技术文章,非码农勿入】
博客放在阿里云主机上面,写了个数据备份的脚本。每一个星期,备份数据表,加密后,发送到指定邮箱。
用cron作定时任务。
[code lang="cpp"]
[root@AY140614130459144355Z bz_complie]# crontab -l
5 6 */7 * * /usr/local/src/back_up.sh &
[/code] 整体工作分为几个脚本实现,back_up.sh为最后的封装脚本。mydbdump.sh脚本将数据表dump到一个本地文件,back_up.sh本身利用openssl加密该文件。mailto.sh 脚本发送到指定邮箱。clear.sh删除数据文件以及加密后的数据文件。
[code lang="cpp"]
#!/usr/bin/expect
set PWD /usr/local/src/bz_complie
cd $PWD
puts "dump sql ...\n"
set timeout 5
spawn /bin/sh mydbdump.sh
expect {
"]" {
exit 1
}
expect eof
}

puts "success excute mysqldump\n"
#假设密码为123456
spawn openssl enc -aes-128-cbc -in /usr/local/src/bz_complie/blog_bak.sql -out /usr/local/src/bz_complie/blog_bak.sql.aes_128_cbc
expect {
"assword:" {
send "123456\r";exp_continue
}
}
puts "aes blog.sql\n"

spawn /bin/sh mailto.sh
expect {
expect eof
}

spawn /bin/sh clear.sh
expect {
expect eof
}
puts "excute clear.sh\n"
[/code]

mydbdump.sh
[code lang="cpp"]
#!/bin/sh
PWD='/usr/local/src/bz_complie'
cd $PWD
mysqldump --skip -u数据库名 -p'数据库密码' 数据库 > ./blog_bak.sql
[/code]

mailto.sh
[code lang="cpp"]
#!/bin/sh
PWD='/usr/local/src/bz_complie'
cd $PWD
#foot.txt主要是在邮件里面显示时间
if [ -f ./foot.txt ];then
echo "hello world"
else
echo "weekly back up for bz" > ./foot.txt
date >> ./foot.txt
fi

#这里利用mailx命令发送邮件,-a参数添加附件 foot.txt重定向为邮件正文
if [ -f ./blog_bak.sql.aes_128_cbc ]; then
echo "mail to server... "
mailx -v -~ -s "auto back up for weekly " -a ./blog_bak.sql.aes_128_cbc 272651211@qq.com < ./foot.txt
else
echo "no blog_bak.sql.aes_128_cbc"
fi

[/code]

clear.sh
[code lang="cpp"]

#!/bin/sh
PWD='/usr/local/src/bz_complie'
cd $PWD
rm -f ./foot.txt
rm -f ./blog_bak.sql
rm -f ./blog_bak.sql.aes_128_cbc
[/code]
备注:
1.为什么使用expect,同时还夹杂shell脚本
比如设置用expect设置当前目录,这类功能,不知道,所以用了这种组合方式。第二是倾向于模块化。
2.mailx命令
该命令需要安装,同时需要配置用户名和密码,也就是用这个配置了的用户邮箱向其他邮箱发送邮件。
[code lang="cpp"]
set from=***@qq.com smtp=smtp.qq.com
set smtp-auth-user=***@qq.com smtp-auth-password=446*61e323c84f4d
set smtp-auth=login
[/code]
为避免该邮箱密码泄露,建议另外申请一个邮箱。