服务器定时自动备份MySQL数据库

本文记录了服务器数据库备份、压缩、加密、发送记录邮件的一套流程。

需求:服务器的数据库自动在增长,但是难保某个时候发生意外导致数据库崩溃。所以需要做定时备份。


使用要点:利用MySQL中提供的mysqldump功能导出数据库,利用gzip进行压缩,利用gpg进行对称加密,最后使用PHP脚本发送记录邮件。


1、sender.php

用于php编译,发送记录邮件

PHP代码如下:

[php]  view plain  copy
  1. <?php  
  2.         require_once("phpmailer/class.phpmailer.php");  
  3.   
  4.         $file = system("/backup/autobackup >> /backup/log");  
  5.   
  6.         $mail = new PHPMailer();  
  7.         $mail->IsSMTP();  
  8.         $mail->Host = "smtp.163.com";  
  9.         $mail->SMTPAuth = true;  
  10.         $mail->Username = "这里填上发送邮箱用户名";  
  11.         $mail->Password = "这里填上发送邮箱密码";  
  12.         $mail->From = '填发件人@163.com';  
  13.         $mail->FromName = '填自己的名字';  
  14.         $mail->CharSet = 'utf-8';  
  15.         $mail->Encoding = "base64";  
  16.         $mail->AddAddress("test","TEST");  
  17.         $mail->AddReplyTo('test',"TEST");  
  18.         $mail->WordWrap = 50;  
  19.   
  20.         //$mail->AddAttachment($file); //这里可以添加上备份文件,但是为了安全不建议这么做。  
  21.   
  22.         $mail->IsHTML(false);  
  23.         $date = date("Y-m-d", time());  
  24.         $mail->Subject = "BACKUP-DB".$date;  
  25.         $mail->Body = 'DB-BACKUP-'.$date.'CONTENT-IS-'.$file;  
  26.         $mail->AltBody ='text/html';  
  27.   
  28.         $mail->Send();  
  29. ?>  



2、autobackup脚本

用于备份-压缩-加密

代码如下:

[plain]  view plain  copy
  1. filename=`date +%Y%m%d`  
  2. echo "============================================"  
  3. date  
  4. /opt/mysql/bin/mysqldump 数据库名 -u账户名 -p密码 | gzip > /var/www/html/mysql\_backup/$filename.gz  
  5. cd /var/www/html/mysql\_backup/  
  6. encryptPasswd="加密密码"  
  7. echo ${encryptPasswd} | gpg --yes -c --passphrase-fd 0 $filename.gz > /var/www/html/mysql\_backup/$filename.gz.gpg  
  8. rm $filename.gz  
  9. find /var/www/html/mysql\_backup/ -mtime +20 -name "*.gz.gpg" -exec rm -rf {} \;  
  10. echo /var/www/html/mysql\_backup/$filename.gz.gpg  
  11. date  

注意此处-u  -p后面没有空格。

此处两个date输出两次时间以便记录所耗费时间。

加密完以后会删除原有gz压缩文件。

find -exec命令用于删除20天前的备份文件,及时清空文件防止服务器硬盘耗费过大。

最后输出备份文件所在地址。

可以将文件备份于FTP目录,使得远程异地备份得以实现。参见我另一篇文章:

《远程备份服务器自动获取备份via FTP》


3、设置定时

在redhat下面,输入

[plain]  view plain  copy
  1. crontab -u root -e  

利用crontab实现定时,这行命令用vi打开cron的配置文件,修改后会自动刷新,也可以运行

[plain]  view plain  copy
  1. /etc/rc.d/init.d/crond restart  

进行重启。

配置文件修改方法如下:

[plain]  view plain  copy
  1. 0 20 * * * wget http://localhost/test  
  2. 0 4  * * * php /backup/sender.php  

效果是每天4:00进行备份 发送记录邮件。

参考http://www.chinaunix.net/old_jh/6/271992.html这篇文章,这边摘取如下:

[plain]  view plain  copy
  1. crontab -l -u [-e|-l|-r] 第一个命令行中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。   
  2.   
  3. 命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab;   
  4.   
  5. 命令行中-l选项的作用是显示用户crontab文件的内容。   
  6.   
  7. 使用命令crontab -u user -e命令编辑用户user的cron(c)作业。用户通过编辑文件来增加或修改任何作业请求。   
  8.   
  9. 执行命令crontab -u user -r即可删除当前用户的所有的cron作业。   
  10.   
  11. 作业与它们预定的时间储存在文件/usr/spool/cron/crontabs/username里。username使用户名,在相应的文件中存放着该用户所要运行的命令。命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。文件里的每一个请求必须包含以spaces和tabs分割的六个域。前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,称为命令字段,其中包括了crontab调度执行的命令。   
  12.   
  13. 第一道第五个字段的整数取值范围及意义是:   
  14.   
  15. 0~59 表示分   
  16.   
  17. 1~23 表示小时   
  18.   
  19. 1~31 表示日   
  20.   
  21. 1~12 表示月份   
  22.   
  23. 0~6 表示星期(其中0表示星期日)   
  24.   
  25. /usr/lib/cron/cron.allow表示谁能使用crontab命令。如果它是一个空文件表明没有一个用户能安排作业。如果这个文件不存在,而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先,如果都不存在,只有超级用户可以安排作业。  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值