服务器, 未分类

使用sendmail与uuencode实现定时发送数据库备份到邮箱

crontab

自从上次误删数据后,我就给服务器开启了定时异地备份功能。实现方法简简单单,并不高级,cron jobs+scp。

不过天朝网络有点抽,最近与备份服务器使用SCP传输文件的速度非常慢,传一个打包的数据库都要好几十分钟,unbearable!

正欲物色新的服务器做备份时,想到自己的网易邮箱是无限容量的,既然如此,就拿来接收备份邮件吧!

总体思路如下:导出数据库,打包网站文件,通过uuencode编码,使用PIPE,数据流重定向至mail命令中然后发到我的网易邮箱中。

首先安装sendmail(安装了就忽略吧):

安装sharutils(uuencode和uudecode):

mail命令:

一般安装sendmail后会以deamon方式在后台运行,如果没启动,就执行:

先测试一下能不能把邮件发出去:

CPU Information Mail

 

能收到的话,就无任何问题,如果发不出去,或者发送很慢,就需要检查一下hostsname了,看看hostname是否已经在hosts里面解析。

接下来写一个执行备份的Shell Script,以备份MySQL为例,首先是导出数据库,可以使用MySQL自带的mysqldump:

请注意-p后面要紧跟着的密码,不能有空格,如果要导出所有数据库,数据库名称就是

还可以使用gzip压缩,在数据库名称后面添加

没使用gzip导出的话,个人建议使用zip或者tar压缩一下。如果要安全些的话,还可以用zip的-P参数设置解压密码。

然后使用uuencode编码,使用pipe把数据重定向至mail,发送到邮箱:

下面提供一个完整Shell Script的供各位参考:

此Shell Script会自动使用用户名root,密码root导出所有数据库到/tmp,并且使用gzip压缩,文件名以执行该Shell Script的时间命名,然后使用zip压缩,设置解压密码为unzippassword,再用uuencode编码,mail发送到my@email.com,最后删除导出的数据库文件。

写好该Shell Script,保存到一个地方。并且赋予执行(x)权限。

最后就是添加一个CRON JOB,执行

会自动运行nano/vi/vim编辑cron的配置文件,假如要每三十分钟执行一次备份任务,就在最后一行添加以下代码:

然后保存。

顺便提一下:cron的配置文件,第一列是分钟(0-59),第二列代表小时(0-23),第三列代表天(1-31),第四列代表月(1-12),第五列代表周(0-7),第六列是执行的命令。

注意:周的0和7都是星期天

Ubuntu/Debian的crontab说明:

crontab

 

如果毫无问题的话,就可以实现每过三十分钟,自动发送一次备份文件到你的邮箱中了。

如果是备份网站文件的话,同样可以使用该方法,不过文件太大的话,个人建议用split分割一下。

split使用方法:

 

4 Comments

Comments are closed.