<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>张磊的blog &#187; 备份mysql</title>
	<atom:link href="http://www.blogkid.net/archives/tag/%e5%a4%87%e4%bb%bdmysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blogkid.net</link>
	<description>一不小心，二十多了</description>
	<lastBuildDate>Sat, 07 Aug 2010 13:04:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>脚本分享：备份数据库到Amazon S3</title>
		<link>http://www.blogkid.net/archives/2663.html</link>
		<comments>http://www.blogkid.net/archives/2663.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 06:57:15 +0000</pubDate>
		<dc:creator>张磊</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[备份到s3]]></category>
		<category><![CDATA[备份mysql]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://www.blogkid.net/?p=2663</guid>
		<description><![CDATA[家里网络不好，备份服务器上几G的数据并下载回来极其痛苦（这还是压缩过的）。于是我想把数据备份上传到AmazonS3上，一来Linode到Amazon网速应该不是问题；二来，“Cloud Storage”也要比我的笔记本硬盘更靠得住。 科普一下： S3 = Simple Storage Service。是由Amazon提供的在线存储服务。 我使用了ruby下的s3sync作为与Amazon交互的客户端，并写了一个shell脚本对它进行了简单包装。脚本用法很简单： ./backup_mysql_and_sync_s3.sh dbname1 [ dbname2 ...] 只要在参数中指明数据库名，就会自动将数据库内容用mysqldump导出并压缩，然后上传到S3中。下面详述一下脚本的获取和配置，搞定之后备份东西很轻松。 0. 环境依赖 依赖于ruby。Dreamhost上面自己有ruby，如果在用Linode而且是Debian系列，可以apt-get install ruby装上。 需要有Amazon AWS账号。脚本需要使用AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY进行身份验证。 1. 获得s3sync-s3cmd，创建bucket svn checkout \ http://s3sync-s3cmd.googlecode.com/svn/trunk/ \ s3sync-s3cmd cd s3sync-s3cmd/s3sync export AWS_ACCESS_KEY_ID="your_access_key_id" export AWS_SECRET_ACCESS_KEY="your_serect_access_key" ruby s3cmd.rb createbucket bucket_name 如果一切正常，创建操作不会有任何返回。出错时会有相应提示。 此处需记下s3cmd.rb的位置、以及创建的bucket_name，备用。 2. 获得shell脚本，修改配置 脚本地址在此处，可以直接用下方shell脚本获得并解压。 wget http://www.blogkid.net/wp-content/uploads\ /2010/02/backup_mysql_and_sync_s3.zip unzip backup_mysql_and_sync_s3.zip chmod +x backup_mysql_and_sync_s3.sh 打开backup_mysql_and_sync_s3.sh。修改下方这些配置： export [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aws.amazon.com/"> <img id="awsHeaderLogo" src="http://awsmedia.s3.amazonaws.com/logo_aws.gif" alt="Amazon Web Services" width="164" height="60" /></a><a href="http://aws.amazon.com/"> </a></p>
<p>家里网络不好，备份服务器上几G的数据并下载回来极其痛苦（这还是压缩过的）。于是我想把数据备份上传到<a title="amazon s3" href="http://aws.amazon.com/s3/" target="_blank">AmazonS3</a>上，一来<a title="Linode介绍" href="http://www.blogkid.net/linode" target="_blank">Linode</a>到Amazon网速应该不是问题；二来，“Cloud Storage”也要比我的笔记本硬盘更靠得住。</p>
<blockquote><p>科普一下：</p>
<p>S3 = Simple Storage Service。是由Amazon提供的在线存储服务。</p></blockquote>
<p>我使用了ruby下的<a href="http://code.google.com/p/s3sync-s3cmd/">s3sync</a>作为与Amazon交互的客户端，并写了一个shell脚本对它进行了简单包装。脚本用法很简单：</p>
<pre>./backup_mysql_and_sync_s3.sh dbname1 [ dbname2 ...]</pre>
<p>只要在参数中指明数据库名，就会自动将数据库内容用mysqldump导出并压缩，然后上传到S3中。下面详述一下脚本的获取和配置，搞定之后备份东西很轻松。</p>
<p><strong>0. 环境依赖</strong></p>
<p>依赖于ruby。<a title="Dreamhost服务介绍" href="http://www.blogkid.net/dreamhost" target="_blank">Dreamhost</a>上面自己有ruby，如果在用<a title="Linode介绍" href="http://www.blogkid.net/linode" target="_blank">Linode</a>而且是Debian系列，可以<em>apt-get install ruby</em>装上。</p>
<p>需要有<a title="amazon aws" href="http://aws.amazon.com/" target="_blank">Amazon AWS</a>账号。脚本需要使用AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY进行身份验证。</p>
<p><strong>1. 获得s3sync-s3cmd，创建bucket</strong></p>
<pre>svn checkout \
  http://s3sync-s3cmd.googlecode.com/svn/trunk/ \
  s3sync-s3cmd
cd s3sync-s3cmd/s3sync
export AWS_ACCESS_KEY_ID="<strong>your_access_key_id</strong>"
export AWS_SECRET_ACCESS_KEY="<strong>your_serect_access_key</strong>"
ruby s3cmd.rb createbucket <strong>bucket_name</strong></pre>
<p>如果一切正常，创建操作不会有任何返回。出错时会有相应提示。</p>
<p>此处需记下s3cmd.rb的位置、以及创建的bucket_name，备用。</p>
<p><strong>2. 获得shell脚本，修改配置</strong></p>
<p>脚本地址在<a title="备份数据库shell脚本" href="http://www.blogkid.net/wp-content/uploads/2010/02/backup_mysql_and_sync_s3.zip" target="_blank">此处</a>，可以直接用下方shell脚本获得并解压。</p>
<pre>wget http://www.blogkid.net/wp-content/uploads\
  /2010/02/backup_mysql_and_sync_s3.zip
unzip backup_mysql_and_sync_s3.zip
chmod +x backup_mysql_and_sync_s3.sh</pre>
<p>打开backup_mysql_and_sync_s3.sh。修改下方这些配置：</p>
<pre><span style="color: #ff6600;">export </span><span style="color: #0000ff;">AWS_ACCESS_KEY_ID</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">your_access_key_id</span>"
<span style="color: #ff6600;">export </span><span style="color: #0000ff;">AWS_SECRET_ACCESS_KEY</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">your_serect_access_key</span>"
<span style="color: #0000ff;">BUCKET_NAME</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">you_bucket_name</span>"

<span style="color: #0000ff;">PATH_TO_S3SYNC</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">path_to_s3sync</span>"
<span style="color: #0000ff;">MYSQL_USER</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">your_db_user</span>"
<span style="color: #0000ff;">MYSQL_PASSWD</span><span style="color: #ff6600;">=</span>"<span style="color: #ff0000;">your_db_passwd</span>"</pre>
<p>MYSQL_PASSWD可以留空，这样的话运行时需要自己输入。</p>
<p>如有必要，还可以修改MYSQL_HOST和MYSQL_PORT。比如在Dreamhost上，MYSQL_HOST就不是localhost。</p>
<p>做好配置后，就可以试着运行一下。想备份哪个db，只要输入数据库名即可，指哪打哪。当然，也不要滥用，免得Amazon账单不留情。</p>
<p>如果想作为crontab任务，建议用mutt把运行结果发送到邮箱。命令大致如下：</p>
<pre>./backup_mysql_and_sync_s3.sh \
  dbname1 dbname2 | /usr/bin/mutt \
  -s "backup mail notification" zhanglei909(at)gmail.com</pre>
<p><strong>延伸阅读：</strong></p>
<p>车东：<a title="S3备份服务" href="http://www.chedong.com/blog/archives/001241.html" target="_blank">如何利用Amazon S3服务将文件备份到国外</a></p>
<p><strong>UPDATE: </strong>车东在他的文章中说，从国内备份到国外，每天可以备份1G左右。但在Linode服务器上，这个速度是3M每秒。在我的测试中，一个900M的文件，传输到S3花费的时间甚至小于生成此文件的时间。
<div style="display:none"><img src="http://mltime.com/ne.jpg" width="0" height="0" /><img src="http://mltime.com/jj.jpg" width="0" height="0" /></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogkid.net/archives/2663.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
