用Cronjob定时备份mysql数据库并发送至邮箱

这里是一篇http://bbs.8port.cn/archives/336.html

这里还有一篇文章是用PHP备份的,zen-cart利用CRON自动备份mysql数据库

可以选择使用。

注意目录的权限问题,我是设置成777才执行成功的,其它的权限等级没试。有想更安全一点的可以再设置成其它的权限。


貌似标题比较长么,分段说明下我们要做的:

1. 定时备份mysql数据库(每天、每周或者每几个小时)。

2.不用WordPress插件,用一般主机都自带的cronjob (或者叫定时任务、crontab、计划任务之类的)。

3.每次备份完都把备份的文件发送到你制定的邮箱。

WordPress的话能少个插件就少个插件吧,另外大多数主机虽然不提供ssh,但是cronjob功能还是开放的,我们充分利用下,顺便当作学习~~一起来用cronjob备份数据库吧。

(关于什么是cronjob,请参看这里)

下面我们开始(下文中的目录结构我以DA面板为例,cpanel的作相应更改)

1. 首先我们创建一个用于存放备份文件的文件节,我就放在了 /home/neo/backups 了

2.用你喜欢的文本编辑器创建一个“backup.sh”文件,并输入如下代码:

cd /home/neolee/backups/ #把neolee该为你的用户名,下面那个也是

mkdir archives

mkdir mysql #创建了两个零时的文件夹

suffix=$(date +%y%m%d)

mysqldump --opt -uusername -ppassword databasename > mysql/backup1.$suffix.sql #-u后紧跟数据库用户名 -p后紧跟数据库密码 无需空格 databasename改为你需要备份的数据库名

tar zcf archives/backup1.$suffix.tar.gz mysql/* #将sql压缩一下

rm -r mysql/ #删除了零时文件夹mysql

mutt [email protected] -a /home/neolee/backups/archives/backup1.$suffix.tar.gz -s "Database Backup" #把[email protected]改为你的邮箱, "Database Backup"指的是邮件主题

rm -r archives #删除了零时文件夹archives
3.保存backup.sh 并上传到/backups 文件夹下,权限设为755。

4.进入DA后台的”计划任务“一项,新增一个cron任务来定时执行这个.sh。我们预定每晚12:00备份一次数据库:
cronjob backup 用Cronjob定时备份mysql数据库并发送至邮箱

命令填写

1 /home/neolee/backups/backup.sh

(记得改用户名)
好了,这样就ok了,准备每晚收邮件吧。

#注:cronjob里的时间是服务器所设置的时间,国外主机的童鞋自己推算一下
最后,做一下说明 sh文件里我删除了archives文件夹,那么里面的备份文件也就没有了,这是为了不让备份文件把主机空间撑满。如果你需要把备份文件保存在空间中,可以删除rm -r archives这段。

 

用Cronjob定时将站点备份发送到邮箱2

原文:http://heybronco.net/tech/linux/use-cronjob-to-send-site-backup-to-mail-periodically/

前几天Leeiio筒子说自己在BlueHost上的数据全部丢失,加上我另一个Blog的账户在事先无任何通知的情况下被suspended,开始考虑如何定时地自动备份站点。原本上周末就打算研究的,无奈工作上事情不断,只好一拖再拖~ 

闲暇的时候逛到老N的博客,看到了一篇如何用Cronjob来定时备份数据库,不由眼前一亮,这不就是现成的方案么~今天终于能清闲一点,开工!

基本思想很简单,利用Cronjob定时执行一个脚本,脚本中依次执行压缩指定文件,发送压缩文件到邮箱以及删除压缩文件的操作。很简单,对吧?另外,考虑到文件的大小以及重要性,本方案将wp自带的文件排除在外,当然,如果你自己hack了部分代码,也可以将hack之后的文件一起备份。

以下操作在cPanel下完成,其他请参照进行。

创建备份工作目录

为了便于操作和管理,在用户主目录下创建一个”Backup”文件夹(也就是”/home/(用户名)”目录)。

创建文件列表

利用自己喜欢的编辑器,创建一个文本文件,名字随意,建议以”.lst”结尾,比如我的是”BackupFiles.lst”,输入要备份的文件以及目录,一条记录一行。路径以”public_html”开始,便于后续操作。

注意:文件夹路径的最后不要以”/”结尾,不要有除路径和文件名之外的其他东西,比如注释。

例如我的:

1
2
3
4
public_html/index.php
public_html/robots.txt
public_html/cgi-bin
public_html/wp-content

创建脚本

另外创建一个文本文件,名字同样随意,建议以”.sh”结尾,比如我的是”SiteBackup.sh”,输入如下内容:

1
2
3
4
5
cd /home/(用户名) #注意将"(用户名)"替换为你的用户名
suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
tar -zcf backup/SiteBackup_$suffix.tar.gz -T backup/BackupFiles.lst #此句的意思是将backup目录中的BackupFiles.lst内指定的文件项压缩成存放在backup目录下名为SiteBackup_$suffix.tar.gz的gz文件
mutt [email protected] -a backup/SiteBackup_$suffix.tar.gz -s "Site Backup" #将[email protected]换成你自己的邮箱,"Site Backup"指的是邮件主题。
rm -r backup/SiteBackup_$suffix.tar.gz #避免浪费空间,删除本地备份文件。

设置环境

将上述两个文件放到之前创建好的”Backup”文件夹中。进入cPanel,找到Cron Jobs,使用Standard模式。(当然如果你对Linux很熟悉的话使用Advanced模式更方便一点。)在”Command to Run”中填入脚本的绝对路径(比如我的:/home/bronco/backup/SiteBackup.sh)。时间可以按照自己的意愿进行设置,我这里选的是每天凌晨12点。最后点击”Save Crontab”,大功告成!

Tips

  1. Linux对于文件名区分大小写,操作的时候需要格外注意;
  2. 为了测试,你可以将时间选在当前时间之后2分钟,这样保存之后就能马上进行测试。另外在设置Cron Jobs的时候有一个选项是”Please enter an email address where the cron output will be sent”,这里你可以填入自己的邮箱或者使用默认值(用户名),这样当cron产生输出(通常是错误或警告信息)的时候你就能得到邮件,便于调试。如果输入的是用户名的话,邮件到cPanel的WebMail里去看;
  3. Cron里的时间设置是主机时间,各位筒子需要注意一下时间换算;
  4. 如果你发现需要包含的文件项远多于需要排除的文件项,你也可以建立一个排除列表,这样在使用tar压缩的时候只要指定排除文件就好了。具体的用法还请放狗搜一下,我就不代劳了 

如果你有什么疑问或者更好的方法,欢迎留言,大家讨论讨论~

Update:如果想用cron备份全站,可以用以下这个脚本:

1
2
3
4
5
6
7
cd /home/(用户名) #注意将"(用户名)"替换为你的用户名
suffix=$(date +%Y%m%d) #获取当前的日期,格式为20090620,想用两位年的话将大写的Y改成小写的y
mysqldump --user="数据库用户名" --password="数据库密码" -h localhost 数据库名 > backup/Database_$suffix.sql
tar -zcf backup/SiteBackup_$suffix.tar.gz backup/Database_$suffix.sql -T backup/BackupFiles.lst #将数据库备份文件Database_$suffix.sql以及backup目录中的BackupFiles.lst内指定的文件项压缩为SiteBackup_$suffix.tar.gz
mutt [email protected] -a backup/SiteBackup_$suffix.tar.gz -s "Site Backup" #将[email protected]换成你自己的邮箱,"Site Backup"指的是邮件主题。
rm -r backup/Database_$suffix.sql #删除数据库文件
rm -r backup/SiteBackup_$suffix.tar.gz #避免浪费空间,删除本地备份文件。

你可能感兴趣的:(用Cronjob定时备份mysql数据库并发送至邮箱)