
数据库定时备份,围绕两样东西展开,一个是shell程序(一般别人更愿意叫shell脚本),一个是定时任务(crontab)。
很简单的一个小程序,shell负责导出数据库,打包好,然后删除没用的。
定时任务完全可以理解为,让系统每隔多久执行一下的一个任务,这玩意就叫定时任务。
下面分开说这两样东西,最后把定时备份这段也弄上来。
shell
shell 到底是什么,该怎么写,我的理解是linux命令的集合。
比如你想 echo 一个1,紧接着再写一个 echo 2,你需要1和2同时出现。
这时你可以将 echo 1和 echo 2写进 shell 脚本里,执行这个脚本,脚本会将里面的 echo 1和 echo 2当作一个命令集合来运行。
shell 编程属于一门语言,有变量,运算,和控制结构。
在这里就不讲太详细了,这些都是死的。
shell 的格式:
.sh 作为文件名后缀,文件开始声明 shell 程序,#!/bin/bash
,
第二行开始写程序。
shell 脚本可以通过两种方式来运行,一种是直接选中当前文件
比如 ./test.sh
,还有一种是调用解释器来执行 shell 程序
比如 /bin/bash ./test.sh
。
建议用第二种调用shell脚本的方式,可以避开权限的问题。
shell程序里应该都用绝对路径,shell里面有各种表达式如数学表达式大于小于的写法和规范,还有文件表达式的写法如文件是否存在和规范,且还可以传参数到shell脚本里面使用,就像 php 里的$_GET
或$_POST
一样使用,还有各种系统变量。
对我来说,语言只是工具,语言的规范和各种表达式或插件或函数只是工具的用法,程序的好坏不取决于语言,而是取决于想象力
定时任务
定时任务更简单了,crontab -e,表示增加一个定时任务,那定时任务怎么写呢。
刚开始五个米字符,代表定时任务时间格式 分时日月周.
中间需要有空格,* * * * * 后面写执行的命令.
*/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脚本。
其实都差不多。
原文链接:数据库定时备份-服务器
网友评论