自动备份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 {} \;
阿辛
不错啊,博客啥的用挺好的,如果是大型网站呢,数据库达到大几百M或几个G的时候,用这个怎样?有没有什么好的方法传授下啊
David Yin
数百兆的数据库,完全没有问题。几个G的数据就不能用这个办法了。
UFO videos
程序不错。
咱都是手工备份的。
张美工网站用户体验
本站已经PR4,请站长将友链放在首页
David Yin
做的不错,好的。
北京万家乐热水器维修
好东西,收藏了,谢谢博主的分享
Jackie
有一个小小的问题,就是> 与 > 的问题,在第22行。
天缘博客
这个方法很好,实际上G数据照样备份,不过只能做差异备份,肯定不能全部压,几百M也够呛的。
David Yin
这是代码显示程序的关系,应该是>。
kiril
您好,请问这个脚本在哪里可以下载到?谢谢,你的博客很不错,支持原创!
harvey
很好的方法啊,谢谢博主。
但是我是小菜鸟,不太会用请教一下
MYSQL="$ (which mysql)"
07
MYSQLDUMP=" $ (which mysqldump)"
08
BAK="/home/yourname/backup/mysql"
09
GZIP=" $ (which gzip)"
这里的which mysql,which mysqldump,which gzip 应该怎么填写,譬如,我要备份的数据库名为ABC
David Yin
不需要改,直接用就可以了。这些个which有自己的意思。
harvey
谢谢david回复,我刚试过,还是出现问题;麻烦帮忙分析一下
[root@AAA lnmp]# /bin/bash /root/lnmp/backup.sh
which: no mysql in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
which: no mysqldump in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
: command not foundh: line 15:
: command not foundh: line 17:
: command not foundh: line 18:
'root/lnmp/backup.sh: line 20: syntax error near unexpected token `do
'root/lnmp/backup.sh: line 20: `do
[root@AAA lnmp]#
David Yin
看信息是,找不到mysql和mysqldump命令。