查看文章 |
中小规模mysql数据库备份的gmail解决方案
2009-02-08 02:50
假设有一台linux服务器,只有一块硬盘,跑着几个中小规模的mysql数据库,你会考虑怎么来实现数据库的备份呢?在本机备份吗?当然。但是,这样总归是稳定的,因为操作系统总有那么些几率出现崩溃,硬盘也不总是很稳定地工作,也许有一天一些意外就会让它“猝死”。因此,找一处别的地方来备份数据库中的数据总是有必要的。如果你对google够信任,那么完全可以用它来解决这个问题。 基本的原理如下: 1、用mysqldump把相应数据库的数据导入到一个文件,如果文件够小,可以直接以邮件正文的形式发送给gmail。这加上mail之类的命令也就两三行shell命令能搞定。 2、如果文件较大,把他们压缩一下,如果只有10M以内的大小,那么完全可以以附件的形式发到一个gmail邮箱,轻松搞定。 3、如果文件更大,则可以把较大的数据库单独提出来,最后做成几个大小小于10M的压缩包,分几次发给gmail。 4、如果再大的话,则应该考虑增量备份了,先备份原始数据,接下来只把每天数据库更新的二进制文件备份一下即可。 这里推荐一个在linux下支持发送附件的邮件客户端工具——mutt。mutt是一款unix操作系统下小巧而强大的基于文本的邮件客户端工具,目前稳定版本是1.4.2.3。使用它的命令极其简单,比如: echo "邮件正文" | mutt username@gmail.com -s "邮件主题" -a attachment.tar.gz 其中username@gmail.com指要发往的邮箱,attachement.tar.gz指要发送的附件。 以下是一个简单的用来备份数据库的shell脚本back_db_2_gmail.sh: #!/bin/bash function usage() { echo "usage:" echo " backupdb email dbname [,dbname]" echo " example: backupdb username@gmail.com db1 db2" } if [ $# -le 1 ] then usage exit 0 fi #第一个参数表示要备份到的gmail邮箱名称 email="$1" shift #之后的参数表示要备份的所有数据库名称 dbname="$*" now=`date +%Y-%m-%d` sqlname=$now.sql tarname=$now.tar gzipname=$now.tar.gz #mysql的帐号 user=mysql.user #mysql的密码 password=mysql.pass for db in $dbname do mysqldump -u$user -p$password $db > $sqlname.$db done tar cf $tarname $sqlname.* gzip $tarname echo "" | mutt $email -s "the backup of $dbname on $now" -a $gzipname rm $gzipname $sqlname.* -f echo "backup $dbname to $email over on $now" 这个脚本使用方法非常简单:./back_db_2_gmail.sh username@gmail.com db1 db2 其中第一个参数表示gmail的邮箱名称,之后的参数表示要备份的数据库名称。 |
最近读者: