远程备份mysql到amazon的s3

  • 内容
  • 评论
  • 相关

之前有篇文章是讲述远程备份mysql数据库的,这次我们讲一下如何将数据库远程备份到amazon的上s3,amazon s3全称是Amazon Simple Storage Service,字面意思很好理解,主要是用来做存储的。我们可以将本地的数据库导出后打包,然后上传到这里。
首先使用这个s3我们需要s3ync来和amazon s3通信,s3ync又需要ruby的支持,因此我们需要安装ruby。

yum –y install ruby
//查看一下ruby是否成功安装
ruby –v
//下载安装s3sync
wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
tar xvzf s3sync.tar.gz
rm s3sync.tar.gz
cd   s3sync(certs的路径可以任意选择)
mkdir certs
cd certs
wget http://mirbsd.mirsolutions.de/cvs.cgi/~checkout~/src/etc/ssl.certs.shar
sh ssl.certs.shar
cd ..

安装完之后我们就可以使用上传脚本了:

#!/bin/bash
cd /path/s3sync/
date=$(date +%Y%m%d)
#先优化一下表,你也可以分析一下表,将分析结果写入一个日志
mysqlcheck -o -uusername -ppasswd dbname
mysqldump -uusername -ppasswd dbname > /tmp/$date.sql
cd /tmp/back/
tar -zcPf dbname.${date}.tar.gz /tmp/$date.sql
#这个路径根据你解压的不同而已,例如你要是 su - root 登陆,可能是/root/s3sync
cd /path/s3sync/
//导入相关信息,这些从你的账户中可以获得
export AWS_ACCESS_KEY_ID=YOURID
export AWS_SECRET_ACCESS_KEY=YOURKEY
export SSL_CERT_DIR=/path/s3sync/certs
//将你的文件通过s3sync上传到到s3的指定bucket目录,这个目录可以在web控制台建立
ruby s3sync.rb -r --ssl /tmp/back/ new-bucket-0745e300:/bucketname 
#ruby s3sync.rb -r --ssl --delete /tmp/back/ new-bucket-0745e300:/bucketname
#注意 --delete这个参数的作用覆盖上传,也就是相当于s3上的文件先被删除掉然后再上传新文件。大部分情况下不需要这个参数。 
rm -rf /tmp/$date.sql /tmp/back/dbname.${date}.tar.gz

这里有个地方需要注意的就是s3sync在你的服务器时间不正确的情况下会报错,类似:

S3 command failed:
list_bucket prefix /data max-keys 200 delimiter /
With result 403 Forbidden
S3 ERROR: #
s3sync.rb:290:in `+': can't convert nil into Array (TypeError)
	from s3sync.rb:290:in `s3TreeRecurse'
	from s3sync.rb:346:in `main'
	from ./thread_generator.rb:79:in `call'
	from ./thread_generator.rb:79:in `initialize'
	from ./thread_generator.rb:76:in `new'
	from ./thread_generator.rb:76:in `initialize'
	from s3sync.rb:267:in `new'
	from s3sync.rb:267:in `main'
	from s3sync.rb:735

因此如果遇到这个错误,请检查服务器时间,正确的设置一下即可。

评论

0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注