数据库定时备份-服务器
Posted vultr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库定时备份-服务器相关的知识,希望对你有一定的参考价值。
数据库定时备份,围绕两样东西展开,一个是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脚本。其实都差不多。
以上是关于数据库定时备份-服务器的主要内容,如果未能解决你的问题,请参考以下文章