mysql8定时备份脚本windows 可设置端口 可压缩 可删除历史记录 定时备份mysql数据库

admin2024-06-11  9

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

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

使用要点:利用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目录,使得远程异地备份得以实现。参见我另一篇文章:

《远程备份服务器自动获取备份via 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优先,如果都不存在,只有超级用户可以安排作业。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!