引き続きBitnami版のRedmineの話題。
4.0.0にバージョンアップする際の、データの移行手順や注意点をまとめてみました。
なお、作業はLinux(Ubuntu)で行っています。
移行手順
Bitnami Redmine 4.0.0-0 のインストール
まずはダウンロードしたbitnami-redmine-4.0.0-0-linux-x64-installer.run
を実行してインストールしましょう。
インストール先は/opt/redmine-4.0.0-0
とします。
データベースのバックアップ
インストールが完了したら、すぐにデータベースをバックアップしておきましょう。失敗した時にインストール直後の状態に戻すためです。
「パスワード」の部分はインストール時に指定したパスワードで。
/opt/redmine-4.0.0-0/mysql/bin/mysqldump --single-transaction -u root -pパスワード bitnami_redmine > /home/me/bitnami_redmine_4_default.dump
旧Redmineのデータベースをダンプ
移行データをダンプして保存します。その際、-t
オプションを付け、DROP TABLE
やCREATE TABLE
を行わないようにします。ファイル名はbitnami_redmine.dump
とします。
/opt/redmine-3.4.x-x/mysql/bin/mysqldump --single-transaction -u root -pパスワード -t bitnami_redmine > /home/me/bitnami_redmine.dump
初期データの削除
Bitnami Redmineをインストールすると、トラッカーやステータスなどの初期データが自動作成されるのですが、インポート時にIDが重複してしまうので、一旦すべて削除します。
下記の8テーブルを空っぽにするSQLを作成します。
TRUNCATE TABLE `email_addresses`;
TRUNCATE TABLE `enumerations`;
TRUNCATE TABLE `issue_statuses`;
TRUNCATE TABLE `roles`;
TRUNCATE TABLE `schema_migrations`;
TRUNCATE TABLE `trackers`;
TRUNCATE TABLE `users`;
TRUNCATE TABLE `workflows`;
で、4.0側のBitnami ConsoleでこのSQLを実行します。
mysql -u root -pパスワード bitnami_redmine < /home/me/truncate.sql
データ移行
お待ちかね、旧Redmineのデータをインポート……と言いたいところですが、このままだと不都合が出ます。
4.0では、多数の日付型フィールドで型がdatetime
からtimestamp
に変更されており、かつtimestamp
型は日付がUTCとして保存されるため、結果的にすべての時刻が9時間ずれます。
詳しくはこちらの記事を。参考になりました。
MySQLのDATETIME型とTIMESTAMP型のタイムゾーン的な違いの話+O/Rマッパーのタイムゾーンの挙動の話
で、どうすりゃいいかというと、先ほどダンプした移行データの頭の方に下記の一文を追記します。
SET SESSION TIME_ZONE = '+09:00';
これで、JSTの時刻をUTCに変換してインポートしてくれます。もちろん、RedmineではJSTで表示されますよ。
では、今度こそインポート。ちなみに-f
オプションを付けると、途中でエラーが発生しても処理を継続します。
mysql -u root -pパスワード -f bitnami_redmine < /home/me/bitnami_redmine.dump
なお、移行データの中に、プラグインが作成したテーブルのデータがある場合、「そのテーブルが存在しないよ」というエラーメッセージが出ます。
先にプラグインをインストールしてテーブルを作成しておくか、プラグイン用のデータは別途移行するか、その辺はお好みで。
注意点
以上でデータ移行は完了ですが、気付いた点がいくつか。
- 私の環境では、なぜか「ウェルカムメッセージ」が移行できませんでした。しょうがないので旧環境からコピペします。
他にも見つかったら追記します。