百度空间 | 百度首页 
 
查看文章
 
中小规模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的邮箱名称,之后的参数表示要备份的数据库名称。

类别:技术追峰 | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2009-02-17 09:43 | 回复
mysqldump --databases支持一次dump多个库. 要能把gmail ftp proxy之类的工具就好了,直接用ftp上传就好
 
2
2009-02-18 00:11 | 回复
回复zzzhc:恩,那样相当方便了。之前也有听说过有工具能把gmail当成一个网络硬盘来使用,相比用那种工具应该好实现你这样的想法。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu