daybreaksnow's diary

私を私と呼びたい

[Redmine]Redmineのマイグレーションを行う

CentOS6からCentOS7にRedmineマイグレーションし、利用するDBMSMySQLからPostgreSQLに変更した際の作業。

マイグレーション
  • CentOS6
  • Redmine2.4
  • MySQL 14.14
マイグレーション
  • CentOS7
  • Redmine3.4.2
  • PostgreSQL9.2

手順

マイグレーションに失敗してもよいよう、検証用マシンを用意して以下の手順で行った。

Redmineのアップグレード

1. 検証機にマイグレーション元と同じRedmineの環境を用意、DBのダンプ、添付ファイルを復元
過去の記事の通り
[Linux]RedmineのDBのバックアップを取る - daybreaksnow's diary
2. 検証機のRedmineマイグレーション先のRedmineのバージョンにアップグレード
こちらを参考
アップグレード — Redmine Guide 日本語訳
2-1. Redmineのダウンロード、解凍、配置

wget http://www.redmine.org/releases/redmine-3.2.4.tar.gz
tar xvzf redmine-3.2.4.tar.gz
mv redmine-3.2.4 /var/lib/redmine-3.2.4

2-2. DB設定のコピー

cp -a /var/lib/redmine/config/configuration.yml /var/lib/redmine-3.2.4/config/configuration.yml
cp -a /var/lib/redmine/config/database.yml /var/lib/redmine-3.2.4/config/database.yml 

2-3. 添付ファイルコピー

cp -ar /var/lib/redmine/files/ /var/lib/redmine-3.2.4/

2-4. プラグインコピー

cp -ar /var/lib/redmine/plugins/ /var/lib/redmine-3.2.4/ 

2-5. 依存するツールをインストール

bundle install --without development test
bundle exec rake generate_secret_token

2-6. DBのマイグレーション

bundle exec rake db:migrate RAILS_ENV=production

2-7. プラグイン用DBのマイグレーション

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

2-8. キャッシュクリア

bundle exec rake tmp:cache:clear tmp:sessions:clear

2-9.「RackBaseURI /redmine-3.2.4」の行を追加

vi /etc/httpd/conf.d/passenger.conf

2-10. httpdに公開

ln -s /var/lib/redmine-3.2.4/public redmine-3.2.4

2-7.のプラグイン用DBのマイグレーションでタグ付けプラグインがこけたので、そのプラグインは削除して実行した(対して使っていなかったので)

データベースの移行

MySQLダンプをPostgreSQL用に変換して取得することを考えていたが、RailsのDBはyaml_dbを使うとプレインテキストでバックアップが取れるということなのでyaml_dbを使った。
参考:
yaml_dbを使ってMySQLからPostgreSQLにRedmineを移行した - 烏龍茶より麦茶派です

1. yaml_dbのインストール
1-1. /var/lib/redmine/Gemfileに以下の行を追加

gem "yaml_db"

1-2. /var/lib/redmineで以下のコマンドを実行

bundle update
bundle install --without development test

2. yaml_dbでダンプを取る

RAILS_ENV=production bundle exec rake db:data:dump

これでredmine/db/data.ymlができる。これをマイグレーション先の同ディレクトリに持っていく
3. マイグレーション先で復元

RAILS_ENV=production bundle exec rake db:data:load

ここで2-7.で削除したプラグインが使っていたテーブルが復元できないと言われたので、手動でdata.ymlからそのテーブルの情報を削除した。