Redmine 0.8.3.stable(mysql)のデータをRedmine 3.2.0.stableへ移行する。


はじめに

現在稼動しているRedmine 0.8.3のデータを、Redmine 3.2.0へデータ移行を行います。
今回はRedmine 3.2.0サーバはこちらで構築したものを使います。

1.移行準備

この作業は現在稼動しているサーバで行います。

1-1.データベースのバックアップ

mysqldumpコマンドでファイルをバックアップします。

コマンド
# mysqldump --user root —password=[パスワード] --single-transaction --opt --default-character-set=binary [DB名] > ./redmine_backup.sql
1-2.添付ファイルのバックアップ

redmineをインストールしたディレクトリにfilesというディレクトリがあるので、その配下のファイルをtarなどでまとめます。

コマンド
# tar czvf redline-file.tar.gz /var/www/redmine/files
1-3.設定内容の確認

redmineをインストールしたディレクトリにconfigというディレクトリがあるので、その配下にあるymlファイルの情報をメモしておきます。
例.
・database.ml
・email.yml
・settings.yml
etc...

2.移行作業

この作業は移行先となる新サーバで作業を行います。

2-1.データベースの作成

DBへ接続し、新規データベースを作成します。

コマンド
mysql> create database redminedb default character set utf8;
2-2.リストア

データベースを作成したら、旧サーバでバックアップしたデータをリストアします。

コマンド
# mysql -h [DBホスト名] -P 3306 -u dbuser -p[パスワード] redminedb < redmine_backup.sql
2-3.設定ファイルの修正

旧サーバでメモしたymlファイルの情報を反映させます。
注意点としては旧サーバでemail.ymlに記載していた内容はconfiguration.ymlに記載されます。
また、DBの接続先ホスト名が変わる場合はdatabase.ymlを修正も必要です。

2-4.マイグレーション

redmineを置いたディレクトリへ移動し、rakeコマンドでマイグレーションを実行します。

コマンド
# cd /var/www/redmine/

# rake db:migrate RAILS_ENV="production"
-----
StandardError: An error has occurred, all later migrations canceled:

undefined method `inherit_members?' for #<Project:0x00000005368260>/var/www/redmine/vendor/bundle/ruby/2.0/gems/activemodel-4.2.5/lib/active_model/attribute_methods.rb:433:in `method_missing'
-----

エラーが発生しました。どうやらinherit_membersが定義されていないということのようなので作成します。

コマンド
# mysql -h [DBホスト名] -P 3306 -u dbuser -p

mysql> use redminedb;

mysql> alter table projects add column inherit_members boolean default false;
2-5.再度マイグレーション
コマンド
# rake db:migrate RAILS_ENV="production"
-----
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Duplicate column name 'inherit_members': ALTER TABLE `projects` ADD `inherit_members` tinyint(1) DEFAULT 0 NOT
-----

またエラーが発生しました。次はinherit_membersが重複してるという内容です。先ほど作成しろと言われて作成したのですが。。。
とりあえず、今度は先ほど作成したinherit_membersを削除します。

コマンド
# mysql -h [DBホスト名] -P 3306 -u dbuser -p

mysql> use redminedb;

mysql> alter table projects drop column inherit_members;
2-6.再々度マイグレーション

気を取り直してもう一度マイグレーションを実行。

コマンド
# rake db:migrate RAILS_ENV="production"

無事マイグレーションが完了しました。

2-7.クリーンナップ

キャッシュとセッションファイルをクリアします。

コマンド
# rake tmp:cache:clear
# rake tmp:sessions:clear
2-8.Apacheの起動

最後にApacheを起動します。

コマンド
# /etc/init.d/httpd start

以上で移行が完了です。

3.最後に

基本はDBで扱う情報の持ち方を修正することなんだろうなと作業していて思いました。なのでどのバージョンへの移行も、この手順で対応できるのではないかなと思います。
ポイントは「rakeコマンドでマイグレーションを行った際に出力されるエラーをよく見て、columnの追加や削除を行う。」だと思います。