Edited at

Bitnami Redmine 3.4 から 4.0 へデータを移行してみました

引き続き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 TABLECREATE 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.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

なお、移行データの中に、プラグインが作成したテーブルのデータがある場合、「そのテーブルが存在しないよ」というエラーメッセージが出ます。

先にプラグインをインストールしてテーブルを作成しておくか、プラグイン用のデータは別途移行するか、その辺はお好みで。


注意点

以上でデータ移行は完了ですが、気付いた点がいくつか。


  • 私の環境では、なぜか「ウェルカムメッセージ」が移行できませんでした。しょうがないので旧環境からコピペします。

他にも見つかったら追記します。