Docker 上で動かしている Redmine のバックアップとリストアを行いましたので、その手順をまとめておきます。
環境
- Docker for Windows
- Redmine 3.4.5
DB は MySQL を使用しています。
バックアップ
MySQL のバックアップ
MySQL のバックアップを行うコマンドは以下です。
mysqldump -u MySQLユーザー名 -pMySQLパスワード Redmineデータベース名 > バックアップファイル名
例えば以下のような感じです。
mysqldump -u root -ppassword redmine > redmine.sql
今回は docker で Redmine を動かしているので、以下のように docker exec
で実行します。
docker exec MySQLのコンテナ名 bash -c "mysqldump -u MySQLユーザー名 -pMySQLパスワード Redmineデータベース名" > バックアップファイル名
例えば以下のような感じです。
docker exec redmine-mysql bash -c "mysqldump -u root -ppassword redmine" > redmine.sql
上記のコマンドを実行すると、docker exec
を実行したホストのディレクトリにバックアップファイルが作成されます。
添付ファイルのバックアップ
添付ファイルは /usr/src/redmine/files
にあり、これをコピーすればいいだけなので、docker cp
でコンテナからホストにコピーします。
docker cp Redmineのコンテナ名:/usr/src/redmine/files コピー先
例えば以下のような感じです。
docker cp redmine:/usr/src/redmine/files ./
リストア
MySQL のリストア
リストアを行うコマンドは以下です。
mysql -u MySQLユーザー名 -pMySQLパスワード Redmineデータベース名 < バックアップファイル名
例えば以下のような感じです。
mysql -u root -ppassword redmine < redmine.sql
今回は docker で Redmine を動かしているので、バックアップと同じように docker exec
で実行します。
※ちょっと上手くいかなかったので、バックアップファイルを一度ホストからコンテナにコピーしてからリストアを行いました。
docker cp バックアップデータ MySQLのコンテナ名:コピー先
docker exec MySQLのコンテナ名 bash -c "mysql -u MySQLユーザー名 -pMySQLパスワード Redmineデータベース名 < バックアップファイル名"
例えば以下のような感じです。
docker cp redmine.sql redmine-mysql:/
docker exec redmine-mysql bash -c "mysql -u root -ppassword redmine < redmine.sql"
files のリストア
添付ファイルはバックアップしたデータを /usr/src/redmine/files
にコピーすればいいだけなので、docker cp
でホストからコンテナにコピーします。
docker cp バックアップデータ Redmineのコンテナ名:/usr/src/redmine/
例えば以下のような感じです。
docker cp files/. redmine:/usr/src/redmine/
/.
をつけるとディレクトリの中身だけがコピーされます。