Shell脚本自动备份MySQL到FTP并定期清理过期备份
以前公司用的一个网上找的MySQL自动备份到FTP的Shell脚本,一直用着不错。但是问题就是随着备份文件的越来越多,不得不定期清理FTP上的老备份文件,十分的不便。
实际上MySQL备份无需保留太长时间的,如果能有自动清理旧的备份文件的功能就好了。不过网上找了一下,虽然也有这方面的脚本,不过可能不太符合我的需求吧。于是只能自己手动改下以前的那个Shell脚本来实现咯。
首先我们要确定保留备份的时间,我觉得一个月的备份保留就足够了。因为基本不会出现1个月后要恢复1个月之前备份的情况。(如果有请自己手动备份,毕竟自动备份还是不能取代手动备份的部分)。那么我们的思路就出来了:在上传以当天日期为文件名的备份的时候,顺便删除下一个月之前的同日期备份,就可以确保服务器上保留的是最近一个月的备份了。
然后我们需要知道Linux下的一个命令:date。这是个可以查看当前服务器的时间日期信息的命令。当然这里我们需要知道的是这个命令的参数,毕竟我们需要得到的是日期部分。
输入下面这个命令,可以看到“年-月-日”的输入,类似“2011-09-09”:
date+%Y-%m-%d
那么,如果我们要得到1个月之前的日期怎么办呢?使用下面的这条命令就可以得到:
date-dlast-month+%Y-%m-%d
怎么样?简单吧。实际备份的时候,因为之前脚本使用的是“m-d-Y”的形式,也就是“月-日-年”的形式,所以我稍微做了下调整。但是下面这个Shell脚本中的是按照“年-月-日”来产生文件名的。
于是,给出整个备份Shell脚本,需要的朋友只需要填写下有中文说明的部分,即可在自己的Linux服务器上使用。使用办法:复制到某个目录下,然后给予执行权限,再在cron中设置每天指定时间运行即可。(关于这部分,请自行查找相关说明,这里不再复述)
带自动清理功能的MySQL备份到FTP的Shell脚本如下:
#!/bin/bash MyUSER="db_username" #数据库用户名,建议使用root账户或者拥有全局权限的用户名 MyPASS="db_password" #数据库密码 MyHOST="localhost" #数据库服务器 #Linuxbinpaths,changethisifitcan'tbeautodetectedviawhichcommand MYSQL="$(whichmysql)" MYSQLDUMP="$(whichmysqldump)" CHOWN="$(whichchown)" CHMOD="$(whichchmod)" GZIP="$(whichgzip)" #数据库备份的路径 DEST="/home/backup" #Maindirectorywherebackupwillbestored MBD="$DEST/mysql" #Gethostname HOST="$(hostname)" #Getdataindd-mm-yyyyformat NOW="$(date+%d-%m-%Y)" OLD="$(date-dlast-month+%d-%m-%Y)" #Filetostorecurrentbackupfile FILE="" #Storelistofdatabases DBS="" #DONOTBACKUPthesedatabases IGGY="test" rm-rf$MBD [!-d$MBD]&&mkdir-p$MBD||: #Onlyrootcanaccessit! $CHOWN0.0-R$DEST $CHMOD0600$DEST #Getalldatabaselistfirst DBS="$($MYSQL-u$MyUSER-h$MyHOST-p$MyPASS-Bse'showdatabases')" cat>ftpcc.sh<<EOF cd$MBD ftp-i-n<<! openblog.renhao.org#在这里填写FTP服务器的域名或IP userftp_userftp_pass#在这里填写FTP用户名和密码,注意空格分隔 binary mput*.gz EOF fordbin$DBS do skipdb=-1 if["$IGGY"!=""]; then foriin$IGGY do ["$db"="$i"]&&skipdb=1||: done fi if["$skipdb"="-1"];then FILE="$MBD/$db.$HOST.$NOW.gz" echo"delete$db.$HOST.$OLD.gz">>ftpcc.sh #doallinonejobinpipe, #connecttomysqlusingmysqldumpforselectmysqldatabase #andpipeitouttogzfileinbackupdir:) $MYSQLDUMP-u$MyUSER-h$MyHOST-p$MyPASS$db|$GZIP-9>$FILE fi done cat>>ftpcc.sh<<EOF close bye ! EOF shftpcc.sh rmftpcc.sh
这样的Shell脚本运行后,可以得到每个MySQL库的独立备份文件,且以gz格式压缩以便节省空间。