さくらインターネットMySQLを自動バックアップしてgmailに送る

さくらインターネットで MySQL のバージョンを 4 から 5 に移行: PHPの種 ブログ
↑なんて感じでさくらインターネットでのMySQLを5に変えたのですが、これでmysqldumpが(文字コード的に)安定したということで、前諦めた自動バックアップを設定しておこうと思いました。

mysqldumpしてメールで送るうんぬんは今までも色んなところでやられていると思いますが、今回困った点としては

  • uuencodeの添付ファイルだとgmailでうまく扱えない

です。


~ | uuencode attached.file | mail -s attached.file hoge@gmail.com

なんてお手軽にしたかったんですが、どうもダメみたい。

で、普通に添付メールとして送れるコマンドを探していたらmuttやらemailやらあるものの、どうにもさくらインターネットのレン鯖に素直に入れられそうになかったので、phpでさくっと作ってみました。とりあえずZend Frameworkで。

このぐらいはワンライナーで作れそうですが、敢えて?のZend Frameworkで。Pear_Mailとかもきっとあるに違いないけど全く調べて無いです。きっとある。

[php]
getOption(‘m’)) {
echo(‘How to : mailto.php -m [mailaddress]’);exit;
}

$mail = new Zend_Mail();
$mail->setBodyText(‘This is the text of the mail.’);
$mail->setFrom(‘somebody@example.com’, ‘Some Sender’);
$mail->addTo($address, ‘Some Recipient’);
$mail->setSubject(‘MYSQL DUMP’);
$mail->createAttachment(file_get_contents(“php://stdin”));
$mail->send();
[/php]

何も考えずにモジュールを持ってくるだけで簡単に作れますね。

Zend_Mail部分はZend Frameworkマニュアルそのまんまなので、本文や差出人とか、自由に変更してくださいね。添付ファイルに名前をつけたい場合は、マニュアルを参考に。

このスクリプトに標準入力からdumpを流し込みます。
スクリプトはmailto.phpと名付けてホームディレクトリに保存しました。

/usr/local/bin/mysqldump --opt -c -h [MySQL SERVER] -u [USERNAME] --password=[PASSWORD] [DB NAME] | gzip | /usr/local/bin/php ~/mailto.php -m [MAILADDRESS]

無事dumpしたgzファイルが添付されましたでしょうか。

上のコマンドが無事成功したなら、さくらコンパネからcronで登録しておきましょう!

ちなみに私はgmail宛に送信して、すぐにゴミ箱に行くようにフィルタリングしています。これなら30日は保存されますし、gmailの容量も食わないですしね。