自分用のRedmineをOpenShiftで稼働させていますが、何らかの理由でデータが消えてもらっては困るので、定期的にバックアップを取っています。この記事では、そのバックアップ手順と、バックアップデータをOpenShift上にリカバリーする手順を説明します。
前提
- MySQLデータ、Redmineソースコードをバックアップします。添付ファイルは考慮しません(私が添付ファイルを使用していないだけ)。
- phpMyAdminではなく、mysqldumpでダンプします。phpMyAdminでダンプしたら、なぜかダンプファイルが途中までしか出力されませんでした。
- バックアップしたMySQLデータ、Redmineソースコードを使用して、OpenShift上にリカバリーします。
バックアップ手順
sshでOpenShiftにログインして、そこからmysqldumpを使用します。しかし、いちいちログインするのは面倒なので、以下のようにsshを使用して、ローカルPCにダンプします。
$ ssh -i ~/.ssh/id_rsa $1@$2 “mysqldump -h $3 -u $4 --password=$5 redmine” | gzip >redmine.sql.gz
- 秘密鍵にパスフレーズを設定している場合、Pagentなりssh-agentなりを使うとパスワード入力を省略できます。これは、上記コマンドをcronで定期実行するなどの場合に便利です。
- 変数は以下のように指定します。
- $1, $2…OpenShiftにsshアクセスするときのユーザー名、ホスト名です。OpenShiftの該当アプリケーションのページのRemote Accessで確認できます。
- $3…MySQLホスト名(IPアドレス)です。phpMyAdminで確認できます。
- $4, $5…MySQLユーザー名、パスワードです。OpenShiftの該当アプリケーションのページで確認できます。
- 出力先ファイル名に日時を含めると時間ごとのバックアップになります。
redmine_`date +%Y%m%d-%H%M%S`.sql.gz
リカバリー手順
- バックアップしたMySQLデータ、Redmineソースコードを使用して、OpenShift上にリカバリーします。
- rhcで新規のOpenShiftアプリを作成します。
- Redmineソースコードをpushします。
- MySQLダンプファイルをscpでアップロードして、mysqlでインポートします。
- 該当アプリケーションのページで、アプリケーションを再起動します。
備考
- Redmineをバージョンアップしたいときはどうすれば良い?
- OpenShift以外の環境(例えばローカル)に復旧する方法を考えておいたほうが良い。万が一、OpenShiftが使えなくなってしまうことを考慮して。