自动备份数据库并发送到电子邮箱的脚本
将网站数据库备份后留在本地硬盘上,并不是一个可靠的方案。我就把压缩后的文件发送到电子邮件信箱里。Gmail的附件目前最大25兆,QQ邮箱是50兆,所以本方法不适合大型商业网站,个人独立博客比较合适的说。
下面贴出脚本,本方法需要先安装mutt邮件客户端。
请注意,有些老点的文章中给出的示例,在邮件地址前面没有 — 符号,这会造成新版本的mutt提示 No recipients specified. 只要加上 — 符号就可以了。
还有一个注意的地方,如果连续发送很多数据库文件并保存在Sent文件中,很快就会消耗大量的本地硬盘空间。让mutt默认不保存已发送邮件的方法是修改 /etc/Muttrc文件,或者在当前用户home目录下,修改或建立一个隐藏文件 .muttrc (注意这两个M的大小写), 修改或增加这样一行 set record=”/dev/null” (一般默认为 set record=”~/Sent”),就可以让Mutt不保存已发送邮件从而节省空间了。
View Code BASH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/bin/sh sendfiletogmail () { FilePath=$1 FileName=$2".bz2" mutt -s "Database Backup File ${FileName}" -a${FilePath}"/"${FileName} -- yourMailBox@gmail.com < "/path/to/emailbody.txt" } backup () { DBName=$@ BackupPath="/path/to/"${DBName} BackupName=${DBName}-`date "+[%z%Z]%Y-%m-%d-%H-%M-%S"`".sql" if [[ -d "${BackupPath}" ]] || mkdir ${BackupPath}; then if mysqldump -uroot -pYourPasswd \ --default-character-set=utf8 --opt --master-data=1 \ --single-transaction --flush-logs \ ${DBName} > ${BackupPath}"/"${BackupName}; then echo ${BackupName}"Backup success!" bzip2 -q -s ${BackupPath}"/"${BackupName}; sendfiletogmail ${BackupPath} ${BackupName} else echo ${BackupName}"Backup Failed@@@@@@@@@@@@@@@@@@@@@@@@" fi fi find ${BackupPath}"/" -ctime +7 -exec rm {} \; } #Call the function to backup database assigned below backup yourDBnamd_db |