プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/11/02

Redmine のバックアップとリストア

update2021/05/17 event_note2019/11/02 2:19

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/

/. をつけるとディレクトリの中身だけがコピーされます。