本文记录了服务器数据库备份、压缩、加密、发送记录邮件的一套流程。
需求:服务器的数据库自动在增长,但是难保某个时候发生意外导致数据库崩溃。所以需要做定时备份。
使用要点:利用MySQL中提供的mysqldump功能导出数据库,利用gzip进行压缩,利用gpg进行对称加密,最后使用php脚本发送记录邮件。
1、sender.php
用于php编译,发送记录邮件
PHP代码如下:
<?php
require_once("phpmailer/class.phpmailer.php");
$file = system("/backup/autobackup >> /backup/log");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.163.com";
$mail->SMTPAuth = true;
$mail->Username = "这里填上发送邮箱用户名";
$mail->Password = "这里填上发送邮箱密码";
$mail->From = '填发件人@163.com';
$mail->FromName = '填自己的名字';
$mail->CharSet = 'utf-8';
$mail->Encoding = "base64";
$mail->AddAddress("test","TEST");
$mail->AddReplyTo('test',"TEST");
$mail->WordWrap = 50;
//$mail->AddAttachment($file); //这里可以添加上备份文件,但是为了安全不建议这么做。
$mail->IsHTML(false);
$date = date("Y-m-d", time());
$mail->Subject = "BACKUP-DB".$date;
$mail->Body = 'DB-BACKUP-'.$date.'CONTENT-IS-'.$file;
$mail->AltBody ='text/html';
$mail->Send();
?>
2、autobackup脚本
用于备份-压缩-加密
代码如下:
filename=`date +%Y%m%d`
echo "============================================"
date
/opt/mysql/bin/mysqldump 数据库名 -u账户名 -p密码 | gzip > /var/www/html/mysql\_backup/$filename.gz
cd /var/www/html/mysql\_backup/
encryptPasswd="加密密码"
echo ${encryptPasswd} | gpg --yes -c --passphrase-fd 0 $filename.gz > /var/www/html/mysql\_backup/$filename.gz.gpg
rm $filename.gz
find /var/www/html/mysql\_backup/ -mtime +20 -name "*.gz.gpg" -exec rm -rf {} \;
echo /var/www/html/mysql\_backup/$filename.gz.gpg
date
注意此处-u -p后面没有空格。
此处两个date输出两次时间以便记录所耗费时间。加密完以后会删除原有gz压缩文件。
find -exec命令用于删除20天前的备份文件,及时清空文件防止服务器硬盘耗费过大。
最后输出备份文件所在地址。
可以将文件备份于FTP目录,使得远程异地备份得以实现。参见我另一篇文章:
3、设置定时
在redhat下面,输入crontab -u root -e
利用crontab实现定时,这行命令用vi打开cron的配置文件,修改后会自动刷新,也可以运行
/etc/rc.d/init.d/crond restart
进行重启。
配置文件修改方法如下:
0 20 * * * wget http://localhost/test
0 4 * * * php /backup/sender.php
效果是每天4:00进行备份 发送记录邮件。
参考http://www.chinaunix.net/old_jh/6/271992.html这篇文章,这边摘取如下:crontab -l -u [-e|-l|-r] 第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。
命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab;
命令行中-l选项的作用是显示用户crontab文件的内容。
使用命令crontab -u user -e命令编辑用户user的cron(c)作业。用户通过编辑文件来增加或修改任何作业请求。
执行命令crontab -u user -r即可删除当前用户的所有的cron作业。
作业与它们预定的时间储存在文件/usr/spool/cron/crontabs/username里。username使用户名,在相应的文件中存放着该用户所要运行的命令。命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。文件里的每一个请求必须包含以spaces和tabs分割的六个域。前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,称为命令字段,其中包括了crontab调度执行的命令。
第一道第五个字段的整数取值范围及意义是:
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
/usr/lib/cron/cron.allow表示谁能使用crontab命令。如果它是一个空文件表明没有一个用户能安排作业。如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。