Redmine全文検索プラグイン MariaDB+Mroongaのアップデートエラー対処

# 概要

Redmine 5.0がリリースされたとのことで、せっかくなのでデータベース等のミドルウェア含めアップデートを行うことにしました。ところが少し古いmroongaのバージョンからだとデータ移行できないことが判明したため手順を記録します。

**環境**
- windows 10 Pro
- Bitnami redmine 4.2.3-3 => Bitnami redmine 5.0.2-2
- mariadb-10.4.12-with-mroonga-10.01-winx64 => mariadb-10.9.4-with-mroonga-12.10-winx64
- full_text_serch 1.0.4 (2020年4月頃) => full_text_serch 1.0.4 (2022年12月頃)

Bitnamiインストーラ使わなくても環境構築できる方は適宜スキップ・読み替えてください。


**手順**
1. テスト環境へfts関連をignoreしたdumpファイル展開
1. mrnファイルをテスト環境へコピー
1. full dumpファイル作成しproduction環境の新環境に展開

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/8f8e9311-c8a8-0a93-7782-9d285a53587e.png)


# エラー内容と対処方針

mysqlで単純にフルdumpして展開しようとすると次のエラーが出ます。

```
C:\Bitnami\redmine-4.2.3-3> mysqldump -uroot -p -P3306 bitnami_redmine --default-character-set=utf8 > backup.mariadb
Enter password: *************

C:\Bitnami\redmine-5.0.2-2> mysql -uroot -p -P3307 bitnami_redmine --default-character-set=utf8 < backup.mariadb
Enter password: *************
ERROR 1026 (HY000) at line 828: <fts_targets.tag_ids>: failed to cast to <Int32>: <"\u0001\u0012\u0001\u0010\u0001\u000E\u0001\f\u0001\u0000\u0000\u0000\u0002\
```

full_text_searchのカラムがInt32がInt64になっているのが原因だそうですが、どうもこれはredmineでのmigrationコマンドでは解決できないそうです。
mrnファイルのコピーにより、fts関連のデータは移します。


## 1.テスト環境へfts関連をignoreしたdumpファイル展開

本番環境より、schemaファイルと全文検索プラグイン(fts)テーブルの一部を除外したデータファイルを作成します。
新旧の環境が入り乱れるので注意してください。間違い防止のためテスト環境含めて新環境はポート3307で稼働させています。

```
cd C:\Bitnami\redmine-4.2.3-3
mysqldump -uroot -p -P3306 bitnami_redmine --default-character-set=utf8 --no-data > backup_schema.mariadb
mysqldump -uroot -p -P3306 bitnami_redmine --default-character-set=utf8 --no-create-info --ignore-table=bitnami_redmine.fts_targets > backup_ign-fts.mariadb
```

これをテスト環境に展開します。

```
cd C:\Bitnami\redmine-5.0.2-2
mysql -uroot -p -P3307 bitnami_redmine --default-character-set=utf8 < backup_schema.mariadb
mysql -uroot -p -P3307 bitnami_redmine --default-character-set=utf8 < backup_ign-fts.mariadb
```

これは問題なく展開できるはずです。

## 2.mrnファイルをテスト環境へコピー

ファイルコピーにより、C:\Bitnami\redmine-4.2.3-3\mariadb\data にある *.mrn.* のファイル一式をコピーします。

1. データベースを停止
コピー元の本番環境、テスト環境ともに、データベースを停止します。
　本番環境
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/440e8a9f-14c6-4b96-c3d9-8e67620ffec9.png)
　テスト環境
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/17eb38a6-b3b7-d882-b372-cf569c73e9b5.png)

1. mrnファイルのコピー
コピー元の本番環境のdataフォルダから、引っ越したいデータベースのmrnファイル一式を選択しテスト環境にコピーします。(ｽｸﾘｰﾝｼｮｯﾄのものはデータベース名redmineのものです)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/411accc3-f0ca-c4d3-a213-331477de0e6b.png)

1. 再起動
データベースが起動できることを確認します。schemaが定義されていると、fts関連データはmrnファイルからデータベースに取り込まれるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/e5cb7f69-ee9a-eb4a-bf5a-d161df5f40e7.png)

次に、データベースをmigrationし、redmineが起動できることを確認します。プラグインが5.0に対応しているかどうかは事前に検証しておいてください。

```
cd C:\Bitnami\redmine-5.0.2-2
cd apps/redmine/htdocs
bundle exec rake db:migrate rails_env=production
bundle exec rake redmine:plugins:migrate  rails_env=production
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434780/a302ff3b-e470-6f80-8335-f91f068dc215.png)

## 3.full dumpファイル作成しproduction環境の新環境に展開

テスト環境のmigrationできたデータベースで、フルダンプファイルを作成します。

``` .Test Environment
cd C:\Bitnami\redmine-5.0.2-2
mysqldump -uroot -p -P3307 bitnami_redmine --default-character-set=utf8 > backup_full.mariadb
```

``` . New Envrionment
cd C:\Bitnami\redmine-5.0.2-2
mysql -uroot -p -P3307 bitnami_redmine --default-character-set=utf8 < backup_full.mariadb
```

本番環境の新環境のほうを再起動してデータが移行できていることを確認してください。
この手順で全文検索プラグイン関連のデータも引っ越しできます。

ちなみに比較的新しいバージョンの全文検索プラグインとmroongaから使い始めた方はエラーは発生しないようです。

以上です！