自动备份MySQL数据库的脚本

在写2010 Blog继续优化的15个法则的时候,David Yin提到第九点关于备份的必要,这个脚本就分享给大家,有需要的取用就是。

9)设置好自动备份系统,数据库和程序。数据是最要紧的,比如SEO Blog就是在服务器端每天凌晨自动导出mysql数据库,然后同整个Blog的页面内容一起打包,再备份到远程的备份服务器。记得,是每天。

在下面的脚本中,你需要自己修改几个参数,一个是你的脚本所运行的服务器上储存的数据库备份目录,这里我假定是"/home/yourname/backup/mysql"。当然需要你的MySQL服务器用户名和密码。

脚本首先做的是把MySQL数据库备份到本地目录,然后通过FTP传递到远程备份服务器上,按日期目录存放。FTP服务器的账户信息也需要,以便远程存储。

在远程服务器上的目录结构类似:

\db-backup\21-10-2009\mysql.21-10-2009-02:02:40.gz
有多少个数据库就有多少个文件。

异地存储的好处就不多说了,大家都明白。 脚本保存好后,就是添加该脚本到Cron任务列中,让它每天晚上执行,或者是你的服务器负载最低的时候执行,我是放到半夜2点开始。


#!/bin/bash
### MySQL Server Login Info ###
MUSER="username"
MPASS="password"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/home/yourname/backup/mysql"
GZIP="$(which gzip)"
### FTP SERVER Login info ###
FTPU="ftp username"
FTPP="ftp password"
FTPS="ftp server"
NOW=$(date +"%d-%m-%Y")

[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=$BAK/$db.$NOW-$(date +"%T").gz
 $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done

lftp -u $FTPU,$FTPP -e "mkdir /db-backup/$NOW;cd /db-backup/$NOW; mput /home/yourname/backup/mysql/*; quit" $FTPS

find /home/yourname/backup/mysql -ctime +4 -exec rm {} \;

作者: David Yin
原载: SEO 网站优化推广
版权所有。转载时必须以链接形式注明作者和及本声明。