[サーバ構築] RaspberryPi2でMySQLの定期的バックアップ

RaspberryPi2でWordPressを運用しているのですが、ブログの記事データを保持するMySQLのデータベースはすべてSDカード内部に保存されています。
今後もずっと運用していくことを考えると、SDカードの寿命により記事データそのものを失ってしまうリスクが考えられます。

そこで、別のディスクにブログのデータベースをバックアップするようにしました。
今回はこのメモ書きです。

DBのバックアップ

MySQLのDBバックアップはmysqldumpコマンドによるダンプ出力で実現できます。

mysqldump --password=パスワード データベース名 > ダンプファイル名

今回はコマンドを自動実行させたいので、パスワード入力を求められないように–passwordオプションでパスワードを記載するようにしました。
(セキュリティ的にはあまりよろしくないですが今回はこの方法で行きます)

記事数が多くなるとそれだけダンプファイルも肥大化していくので、gzipで圧縮するようにすれば良いかと思います。

mysqldump --password=パスワード データベース名 | gzip > ダンプファイル名

ダンプファイルの出力先は同じSDカード上ではまずいので、別ディスク上にマウントされたディレクトリに出力するようにすればよいでしょう。

バックアップの定期実行

mysqldumpコマンドを毎回手動で叩いてもよいですが、ここは楽することを考えて自動化したいところです。
Linuxではcrontabを使えばコマンドの定時実行が実現できます。

これを使ってmysqldumpコマンドを毎日指定した時刻に実行するようにしたいと思います。

以下コマンドでcrontabを編集します。

crontab -e

今回は以下のような設定としました。

17 *    * * *   cd ~/tool/cron && run-parts --report ~/tool/cron/cron.hourly
25 6    * * *   test -x /usr/sbin/anacron || ( cd ~/tool/cron/ && run-parts --report ~/tool/cron/cron.daily )
47 6    * * 7   test -x /usr/sbin/anacron || ( cd ~/tool/cron/ && run-parts --report ~/tool/cron/cron.weekly )
52 6    1 * *   test -x /usr/sbin/anacron || ( cd ~/tool/cron/ && run-parts --report ~/tool/cron/cron.monthly )

crontabが実行するファイルは、ホームディレクトリ以下としました。
ディレクトリは各自のお好みによって変えてください。

最後に、mysqldumpコマンドを実行してバックアップを保存するシェルを~/tool/cron/cron.daily配下に置きます。
シェルは以下のようにしました。

#!/bin/bash

mysqldump --password=パスワード データベース名 | gzip > ダンプ出力先ディレクトリ/dump_`date +%Y%m%d%H%M%S`.gz

出力するファイルは上書きしないように末尾に日時をつけるようにしました。
これでひとまずダンプができるようになりました。