@xirang.ca -> 访问嘻来嚷往国际版

收藏与分享

热度:623°C

噪音:23分贝

利用cPanel Cron jobs定时备份和优化网站程序以及数据

分类:信息时代 | 编程开发  标签: | | | | |

当广大Wordpresser欢欣鼓舞地升级到2.9,享受着在线图片编辑器、回收站等一系列新功能的时候,却发现Wordpress的生理周期突然失调了——以前她能够自动地定时为我们发布文章、清除缓存、备份数据库等等等等,而现在这一切都需要我们手工完成。经过在Wordpress官方论坛一番搜寻,发现原来这是Wordpress 2.9的大BUG——定时模块失效……

又,最近在国内互联网“扫黄打非”的狂风暴雨下,个人网站的站长们被弄得一个个诚惶诚恐,一觉醒来说不定域名就“被”停止解析,服务器就“被”关停!所以,及时备份网站的程序和数据对于当下的中国站长们极为重要,然而Wordpress 2.9偏偏又在这当口来一个定时模块失效,这的确是雪上加霜!

CPanel

不过,如今最优秀的主机面板cPanel已经越来越普及了,如果您有幸用上了采用cPanel面板的主机,那么其中的Cron jobs模块就是雪中送炭了。您不但可以使用Cron jobs结合Linux bash shell脚本更加细致地控制各种自动定时作业——备份数据库优化数据库备份网站程序,还可以永久性地省掉几个Wordpress插件,提高Wordpress的运行速度。

定时自动备份MySQL数据库

Cron jobs如右图所示,首先请在您的cPanel面板中的Advanced部分找到Cron jobs。点击进入,您就会看到Cron jobs的操作页面,不过先别着急,我们要首先编写备份网站数据库的Linux bash shell脚本。

我们需要首先用mysqldump命令导出整个数据库至一个文本文件,然后用压缩工具将数据文件压缩打包,最后用mutt命令将数据库压缩包发送至您指定的电子邮件地址。

现在我们开始,请用远程登录软件(如SecureCRT、Putty)或者FTP软件(如FileZilla、FireFTP)连接到您的主机,并创建一个存储备份脚本和临时文件的文件夹,比如我在我的主机根目录建立了一个backup目录。根据cPanel主机的文件夹格式,该目录的绝对路径应为/home/cPanel登录名/backup。

下面以/home/xirangus/backup目录为例。请打开任意一个文本编辑软件,录入如下内容。[XXX]处请更换为您的真实数据(去掉[和])。

1
2
3
4
5
6
cd /home/xirangus/backup #切换到工作目录
stamp=$(date + %y%m%d) #获取当前日期
mysqldump -u[数据库用户名] -p[数据库密码] [数据库名] >  db_backup_$stamp.sql #导出数据库
bzip2 -z -9 -f db_backup_$stamp.sql #压缩数据库
mutt [电子邮件地址] -a db_backup_$stamp.sql.bz2 -s "Database Backup" #邮件发送
rm db_backup_$suffix.sql.bz2 #移除临时文件

其中第4行采用了bzip2来压缩数据,如果您的主机不支持bzip2,请更换为使用tar或zip等命令来压缩数据,具体情况请咨询您的主机商。

脚本录入完毕后,请将其保存,比如我将其命名为dbbackup.sh。然后上传到刚刚建立的/home/xirangus/backup目录下,并更改该脚本文件的权限为755

大功快要告成,现在请点击cPanel中的Cron jobs图标,选择Standard进入标准模式。将/home/xirangus/backup/dbbackup.sh填入Command to run中,并选择定时运行方式,如下图。

Add Cron Jobs/添加定时工作项目

这里的时间是以服务器的时区为准,所以您需要自己换算一下。嘻来嚷往所在的Just Host的数据中心位于美国中部时区,比中国标准时间晚14个小时,所以按照上图设置,每天中国标准时间晚上8点,嘻来嚷往的数据库备份邮件就会自动被发送到我的邮箱里。

定时自动优化MySQL数据库

频繁地对数据库进行各种操作,会使数据库产生一些错误和冗余数据而导致性能下降,因此及时修复和优化数据库也是非常必要的。我们可以采用mysqlcheck命令对MySQL数据库进行修复和优化。脚本文件如下。

1
2
mysqlcheck -u[数据库用户名] -p[数据库密码] –auto-repair –database [数据库名] #检查并自动修复数据库
mysqlcheck -u[数据库用户名] -p[数据库密码] -o –database [数据库名] #优化数据库

如何让Cron jobs自动运行脚本就不再赘述了。

定时自动备份网站程序

有了前面数据库的列子,备份程序文件就简单多了,稍稍修改一下脚本文件就行了。还是以Wordpress为例吧,一般我们修改得最多的就是主题文件,所以我们就让Cron jobs定时备份Wordpress的themes文件夹吧。直接给出脚本文件。

1
2
3
4
5
6
cd /home/xirangus/backup #切换工作目录
stamp=$(date + %y%m%d) #获取当前日期
tar -cvf theme_$stamp.tar /home/xirangus/public_html/wp-content/themes #打包主题目录
bzip2 -z -9 -f theme_$stamp.tar #压缩
mutt [电子邮件地址] -a theme_$stamp.tar.bz2 -s "Themes Backup" #邮件发送
rm theme_$stamp.tar.bz2 #移除临时文件

虽然tar命令可以使用-j参数进行bzip2的打包+压缩,但是不能指定压缩级别,所以我还是采用了tar先打包,接着使用bzip2最高级别压缩的方式。

就介绍这么多吧,如果您熟悉Linux,那么您还可以尽情发挥,让Cron jobs完成更多的自动定时作业,使网站的运行更加高效和有保障。

著作权信息(站外使用本文请保留以下内容)


文章作者:Tim
原始站点:嘻来嚷往 – IF YOU SEE SOMETHING, SAY SOMETHING.
原文标题:利用cPanel Cron jobs定时备份和优化网站程序以及数据
发表日期:2010年01月03日
原文链接:http://xirang.ca/2010/01/backup-and-optimize-website-by-cpanel-cron-jobs
版权协议:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可,作品中的文字和图像若非明确指出著作权归属则均受到该协议法律文本的保护。站外使用请严格遵守协议,嘻来嚷往站保留诉诸法律的权利!如有异议请与站长联系
BY-NC-ND



Related Posts with Thumbnails

噪音已达23分贝

为什么现在才看到.啊,悔呀!

实在是不好意思,晚写了半个月。。。

Tim,今天刚出2.9.1,修复Bug了~

不过话说回来,Tim真实全才啊~

过奖过奖。我就是啥都会点,但都不精通……

为什么我的运行起来,第一个显示就是cd /home/xxx/backup NO SUCH FILE OR DIR..
我在脚本的开头加上#!/bin/sh后就显示 /bin/sh: /home/lives/backup/backupsql.sh: /bin/sh^M: bad interpreter: No such file or directory
请问这是怎么回事,难道是服务器不允许在非网站目录下列目录

你确认你输入的目录结构正确?

确定的,因为我在CPANEL的文件管理里面还看到这个了,因为我用的是复制,如果在CRON的界面里输对了,这里就是对了
我又看了一遍没有问题,对了。您的网站没有邮件通知,为什么我没有接到邮件?

有邮件通知,是不是被扔在垃圾邮件里了。。。

我的CPANEL信息
主目录 /home/lives
寄存样式 plan-2
服务器名 dacia
cPanel 构建 11.24.5-STABLE
cPanel Build 38506
主题 x3
Apache 版本 2.2.11 (Unix)
PHP 版本 5.2.8
MySQL 版本 5.1.30
系统结构 i686
操作系统 Linux
专用 IP 地址 174.132.170.181
到发件箱的路径 /usr/sbin/sendmail
到 PERL 的路径 /usr/bin/perl
内核版本: 2.6.28.9
cPanel Pro 1.0 (RC1)
维护状态 单击查看

按理说没问题的啊。你的脚本文件和目录更改权限了么?检查一下。

也设了的,脚本已经在运行了,只是找不到目录,然后我没有使用cd命令,我直接在下面把路径加上,也不行,我再瞧瞧吧,谢谢您。
邮件是在垃圾邮件里,因为我使用了转发功能,垃圾邮件看不到,刚才把它调到收件箱里了,我用的是gmail,您为什么不换个邮件发呢,好像很多人用gmail的

我怀疑你的主机商禁用了脚本的某些功能。你可以试试把脚本中的换行处添加;号,然后把换行都删去变成一行,填入Command to run中,看看是否能运行。

我也是昨天才发现GMail把嘻来嚷往的回复通知邮件判断成Spam的,已经做了一些更改,理论上应该不会被丢到垃圾箱了。

嗯,我试试,谢谢您的回复

db_backup_.sql
db_backup_.sql.bz2
你好,我生成的文件名是这样的,好像没有获得当前日期?

这样是不是第二次运行脚本的时候会把第一次生成的数据库替换掉?

不知道有什么办法解决么?

PS:如果文件名能自动加1也行,日期反正看生成时间也行
db_backup_01.sql
db_backup_02.sql
….
db_backup_99.sql

date 后面应该有空格

你好,还是有点疑问,我的是cpanel X的面板,这个选择standard进入标准模式,没有找到,还有“并更改该脚本文件的权限为755。”这个也不知如何设置,请教。
本人新手,刚学习。谢谢

cPanel自带的文件管理器、FTP客户端或者Shell Access都能更改权限。至于你找不到standard我就不清楚了。

/home/xxxxxx/fullbackup.php: line 1: ?php: No such file or directory
/home/xxxxxx/fullbackup.php: line 3: =: command not found
/home/xxxxxx/fullbackup.php: line 4: =: command not found
/home/xxxxxx/fullbackup.php: line 5: =: command not found
/home/xxxxxx/fullbackup.php: line 6: =: command not found
/home/xxxxxx/fullbackup.php: line 8: =: command not found
/home/xxxxxx/fullbackup.php: line 9: =: command not found
/home/xxxxxx/fullbackup.php: line 10: =: command not found
/home/xxxxxx/fullbackup.php: line 11: =: command not found
/home/xxxxxx/fullbackup.php: line 13: =: command not found
/home/xxxxxx/fullbackup.php: line 15: =: command not found
/home/xxxxxx/fullbackup.php: line 17: =: command not found
/home/xxxxxx/fullbackup.php: line 20: syntax error near unexpected token `{‘
/home/xxxxxx/fullbackup.php: line 20: `if ($secure) {‘
这几天收到都是这样的错误,是因为我的版本不同吗?

fullbackup.php??Shell只能运行Shell脚本,不能运行PHP脚本。

恩恩,再试。

发现一个问题:
stamp=$(date + %y%m%d) #获取当前日期
上面这一行应该改成下面这样(加号右边应该没有空格,我个人习惯用%Y,大写Y是四位数年份)
stamp=$(date +%y%m%d) #获取当前日期

另外mysqldump的数据库用户名密码一般应该是Cpanel的用户名密码
不能使用Cpanel中为单个数据库分配的账号

备份成功,但同时也提醒我有错误,请帮看下是怎么回事?

/home/myweb/public_html/backup/dbbackup.sh: line 1: cd: command not found
/home/myweb/public_html/backup/dbbackup.sh: line 2: date+%y%m%d: command not found
mysqlcheck: Got error: 1044: Access denied for user ‘mysql’@'localhost’ to database ‘–auto-repair’ when selecting the database
mysqlcheck: Got error: 1044: Access denied for user ‘mysql’@'localhost’ to database ‘–database’ when selecting the database

制造噪音 [如何设定头像]

Switch to our mobile site