黄宽的blog

宁可十年不将军,不可一日不拱卒



数据库定时备份

        数据库定时备份,围绕两样东西展开,一个是shell程序(一般别人更愿意叫shell脚本),一个是定时任务(crontab)。很简单的一个小程序,shell负责导出数据库,打包好,然后删除没用的,定时任务完全可以理解为,让系统每隔多久执行一下的一个任务,这玩意就叫定时任务。下面分开说这两样东西,最后把定时备份这段也弄上来。

        shell到底是什么,该怎么写,我的理解是linux命令的集合,比如你想echo一个1,紧接着再写一个echo 2,你需要1和2同时出现,这时你可以将echo1和echo2写进shell脚本里,执行这个脚本,脚本会将里面的echo1和echo2当作一个命令集合来运行。

        shell编程属于一门语言,有变量,运算,和控制结构。在这里就不讲太详细了,这些都是死的。shell的格式,.sh作为文件名后缀,文件开始声明shell程序,#!/bin/bash,第二行开始写程序。shell脚本可以通过两种方式来运行,一种是直接选中当前文件,比如./test.sh,还有一种是调用解释器来执行shell程序,比如 /bin/bash ./test.sh。shell程序里应该都用绝对路径,shell里面有各种表达式如数学表达式大于小于的写法和规范,还有U文件表达式的写法如文件是否存在和规范,且还可以传参数到shell脚本里面使用,就像php里的$_GET或$_POST一样使用,还有各种系统变量。语言只是工具,语言的规范和各种表达式或插件或函数只是工具的用法,程序的好坏不取决于语言,而是取决于想象力。

        定时任务更简单了,crontab -e,表示增加一个定时任务,那定时任务怎么写呢,刚开始五个米字符,代表定时任务时间格式分时日月周,中间需要有空格,* * * * * 后面写执行的命令,建议用第二种调用shell脚本的方式,可以避开权限的问题。*/1 * * * * 这个代表每分钟执行一次。

        #!/bin/bash#这里是声明这是个shell脚本用bin/bash来启动
        mydate=`date +%Y%m%d`#定义一个变量
        mypath=/var/testcode#定义目录路径
        mydatabase=test#定义数据库的名字
        expiration=`date -d "-7 day" +%Y%m%d`#定义七天前时间
         mysqldump -uroot -p123456 $mydatabase > $mypath/$mydate.$mydatabase.sql
        cd $mypath
        tar czf $mypath/$mydate.$mydatabase.tar.gz $mydate.$mydatabase.sql

        rm $mypath/$mydate.$mydatabase.sql
        if [ -f $mypath/$expiration.tar.gz ]#判断文件是否存在
        then
        rm -rf $mypath/$expiration.tar.gz
        fi

        以上是数据库备份的shell程序,这个程序会将当天的数据库备份打包,删掉7天前的备份。crontab -e 新建定时任务,定好时间,比如这个可以每天凌晨4点钟执行,可以写成 * 4 * * * /bin/bash /var/testcode/a.sh。当然,定时任务对于phper来说更多的是定时运行某一些php脚本。其实都差不多。


作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接