<?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>OTCHY.NET &#187; dump</title>
	<atom:link href="http://www.otchy.net/tag/dump/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.otchy.net</link>
	<description>Otchy の技術ネタ。JavaScript 率と Twitter 率がやや高く、他にも PHP/Java/Perl などなど。共通点は Web。</description>
	<lastBuildDate>Wed, 01 Feb 2012 14:39:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL のダンプを Gmail でお手軽に定期バックアップ</title>
		<link>http://www.otchy.net/20090105/mysql-backup-gmail/</link>
		<comments>http://www.otchy.net/20090105/mysql-backup-gmail/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 04:28:15 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=23</guid>
		<description><![CDATA[用意するもの

perl
cron
sendmail (もしくは sendmail ラッパを持った他の MTA)
zip
Gmail アカウント
jcode.pl
mimew.pl

対象者

「用意するもの」に書かれて [...]]]></description>
			<content:encoded><![CDATA[<h4>用意するもの</h4>
<ul>
<li>perl</li>
<li>cron</li>
<li>sendmail (もしくは sendmail ラッパを持った他の MTA)</li>
<li>zip</li>
<li>Gmail アカウント</li>
<li><span style="text-decoration: line-through;"><a href="http://srekcah.org/jcode/" target="_blank">jcode.pl</a></span></li>
<li><a href="http://www.cc.rim.or.jp/~ikuta/mime_pls/document.html#mimew.pl" target="_blank">mimew.pl</a></li>
</ul>
<h4>対象者</h4>
<ul>
<li>「用意するもの」に書かれているものの意味が分かる</li>
<li>perl スクリプトを作成して実行権限を与える方法が分かる</li>
<li>作成したスクリプトを cron に登録する事が出来る</li>
</ul>
<p>上記にあてはまらない方は、知識を身につけてから再度お越し下さい。</p>
<h4>設置</h4>
<p>下記のスクリプトを作成して、パスとかを適宜修正します。<br />
※cron から動かすためにパスは全てフルパスで。</p>
<pre class="height_middle">#!/usr/bin/perl

<span style="text-decoration: line-through;">require "/path/to/library/jcode.pl";
</span>require "/path/to/library/mimew.pl";

#### Setting
$sendmail = '/usr/sbin/sendmail';
$tmp = '/tmp';
$mysqldump = '/usr/bin/mysqldump';
$zip = '/usr/bin/zip';
$debug = 0;

$dbname = 'your_db_name';
$dbuser = 'your_db_username';
$dbpass = 'your_db_password';

$from = 'mail@from.address';
$to = 'mail@to.address';
$subject = 'Subject of mail';

$boundary = 'BOUNDARYBOUNDARYBOUNDARYBOUNDARY';

#### Header
$header = &lt;&lt;"EOH";
Content-Type: Multipart/Mixed; boundary="$boundary"
Content-Transfer-Encoding: Base64
From: $from
To: $to
Subject: $subject
EOH

#### Backup
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$filename = sprintf($dbname . '_%04d%02d%02d%02d%02d%02d.dump', $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
`$mysqldump -u $dbuser --password=$dbpass --skip-lock-tables --skip-extended-insert $dbname &gt; $tmp/$filename`;
`$zip $tmp/${filename}.zip $tmp/${filename}`;
unlink("$tmp/${filename}");

#### File
$filename = "$tmp/${filename}.zip";
open(FILE, $filename);
binmode FILE; # For Win
while (read(FILE, $buf, 1024)) {
        $contents .= $buf;
}
close(FILE);
$base64 = &amp;bodyencode($contents);
$base64 .= &amp;benflush();

#### Body
$body = &lt;&lt;"EOB";
--$boundary
Content-Type: application/octet-stream; name="$filename"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$filename"

$base64
--$boundary--
EOB

if ($debug) {
        open(MAIL, "&gt;&gt; dbbackup.txt");
} else {
        open(MAIL, "| $sendmail -t");
}
print MAIL qq($header);
print MAIL qq(\n\n);
print MAIL $body;
close(MAIL);

unlink($filename);</pre>
<p>スクリプトを試しに動かしてみて、問題ないようならcron に以下を設定します。<br />
※毎日 3:00 AM にメールを送る場合。</p>
<pre>00 3 * * * /path/to/script/script_name.pl</pre>
<p>これで、DB のダンプが zip 圧縮されて Gmail のメールボックスに毎日たまっていきます。<br />
やったね！</p>
<h4>カスタマイズのヒント</h4>
<p>mysqldump コマンドのオプション &#8211;skip-extended-insert は、ダンプ時に INSERT 文を 1 行ずつはき出す設定です。<br />
ダンプデータをエディタで開いて見る事があるので、可読性を高めるために指定していますが、リストアの速度は劣るので、用途によっては外しましょう。</p>
<p>バックアップデータは Windows で扱う事が多いので、zip を使っていますが、tar に変えてもいいでしょう。</p>
<p>mysqldump の部分を色々と変えれば、PostgreSQL 等の他の DB はもとより、様々なバックアップ用途に使う事が出来ます。<br />
Otchy は、SVN のバックアップにも使用してます。</p>
<p>zip コマンドを工夫すれば、複数ファイルのバックアップも出来るでしょう。</p>
<p>Gmail のアドレスは、userid+suffix@gmail.com の様に、任意のサフィックスを付けても同じメールボックスで受け取る事が出来ます。<br />
たとえば、userid+dbbackup@gmail.com 宛にバックアップを送信するようにして、userid+dbbackup でフィルタすれば、バックアップメールだけ受信トレイに入れずにそのままアーカイブ出来るので、バックアップメールも邪魔にならずに済みます。</p>
<h4>備考</h4>
<p><span style="text-decoration: line-through;">今更、jcode.pl ？と思われるかもしれませんが、「おけば動く」という事と、昔からお世話になっていて慣れている、という理由で選択してます。<br />
</span> 特に必要性を感じなかったので Subject の日本語化には対応してません。</p>
<p><strong>[追記]</strong>すごい事に気がついた！jcode.pl 使ってない！途中で日本語使うのやめちゃったんだな＜過去のおれ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20090105/mysql-backup-gmail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

