2011/05/09日再次更新,脚本还是有变量问题,已修正!
以前,比尔盖子写了一篇关于应用Shell Script和Cron Job来自动备份和优化数据库(远程数据库)的方法,如果想查看比尔盖子写这个脚本的原因和和文章,请猛击这里。
两大问题
不过,这段脚本其实是不能用的,因为在语法上出现了一点小小的问题,对,就是那个$stamp变量的写法问题。
但是,困住比尔盖子的并不是这个问题,而是这段脚本根本就无法执行!
PS:如果您不想看比尔盖子解决问题的过程,只想得到一个能用的Script,请直接看“新的解决方案“部分!
(1)执行问题
一执行就会出现Mysql Server Access Denied的提示,一开始是怀疑Godaddy禁止连接,后来发现我将此脚本中的命令一行一行的输入到Shell里面,执行是成功的。
(2)计划任务执行问题
而到了计划任务的时间,比尔盖子就会收到root寄来的邮件,说什么Permissions Denied——还是权限不足。难道是Godaddy还限制了Cron Job计划任务的权限?
就这样,比尔盖子也懒得管它了,一直过了八个月,现在我的邮箱里已经有800多封root寄来的“权限不足报错”的邮件了。
以为问题解决
最近读到了《鸟哥的Linux私房菜》,看到了《Linux文件权限概念》这一章,里面说:“Windows下,一个文件可不可执行要看扩展名,而Linux下文件可不可执行完全看有没有x权限。”
于是马上想到我的Script权限不足的原因可能就在这里!果然如此:只有我自己有rw权限,其它的权限什么都没有,赶紧将权限设置为770!
第二天,我收到了root寄来的邮件。这回Script终于可以执行了,但是执行的结果和我在Shell里面的一样,报错Mysql Server Access Denied。
问题终于解决
今天在学校机房弄了半天,终于发现了这个$stamp变量的问题,于是重写了一个变量,但是依旧Mysql Server Access Denied。有将脚本分行写成Script,一行一行测试,结果发现我新建的脚本上的命令没有任何修改,但是却能执行;而原来脚本上一模一样的内容居然报错!
不但这样,而且当我在服务器上尝试压缩一个文件的时候,明明这个文件在SFTP的列表上是存在的,但是就是提示“No such file or directory”!于是使用ls -l查看一下,发现文件名由“database_backup”变成了”database?_backup”,原来是该死的中文字符编码问题!
回家之后用Linux上的vim重写了(准确的说是重新抄写)了这个Script,上传到服务器,并赋予其“rwxrwx—“的权限,尝试使用Bash执行,成功!
结论
引起比尔盖子困扰的是一下三大问题:
一.文件格式问题
因为Windows下的换行符就和Linux不一样,而且也很难保证这是字符编码没有问题,所以说bash读取到有Windows换行符的文件(脚本)就会误判,导致无法识别真正的命令!
二.变量语法问题
这里面的$stamp变量的语法不正确,导致了备份文件名不正确!
三.权限问题
没有赋予文件(脚本)x权限从而导致脚本没有权限被计划任务执行。
新的解决方案
这回比尔盖子重写了脚本,脚本更加规范,另外,还要强调一次:因为Windows下的换行符就和Linux不一样,所以最好使用Linux编写此脚本,否则请连接到主机远程编写脚本!
#!/bin/bash
# Program:
# This script can backup Biergaizi's website data!
cd /home/content/44/6531044/backup #切换到备份目录,请按实际情况修改
mysqlcheck -hdiscuzmaogou.db.6531044.hostedresource.com -o discuzmaogou -udiscuzmaogou -pAmaogou4260 >>log #将这里的“数据库地址“等替换成自己的!输出信息保存在log文件
export today=`date '+%Y-%m-%d'` #获得当前日期并写入$today变量
mysqldump -hdiscuzmaogou.db.6531044.hostedresource.com -udiscuzmaogou -pAmaogou4260 discuzmaogou>db_backup_$today.sql #将这里的“数据库地址“等替换成自己的! 将数据库内容转存为SQL文件,文件名为“db_backup_日期.sql
bzip2 -z -9 -f db_backup_$today.sql #压缩SQL文件并删除原SQL文件,压缩后文件名为“db_backup_日期.bz2
这样,只要将脚本加入Corn Job,定期下载储存备份文件的那个目录就行了,备份的文件名会自己变哦!
2015年08月09日 — 18:44
@比尔盖子
GoDaddy 赢了
2015年08月04日 — 16:15
为何不 SSH 进去 dos2unix 呢
2015年08月06日 — 13:40
没有。
2011年05月19日 — 22:39
支持博主 下回 来了希望你有更好的文章