はじめに
現在稼動している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の追加や削除を行う。」だと思います。