💭

RedmineのDBをPostgreSQLからMariaDBに移行

2022/04/01に公開2

TL;DR

  • Redmine 4.2.5にて、yaml_dbを利用することでPostgreSQL(14.2)からMariaDB(10.4.24)に移行できました

経緯

GCPのVMの無料枠(e2-small,Mem:1GB,HDD:30GB)で以下のDockerコンテナクラスタ(docker-compose)でredmineを運用しています。

環境が激poorなこともありますが、たまにアクセスするとページが表示されるまで10秒近く待たされることも。そこで、より軽量と思われるMySQL系のMariaDB(10.4.24)に移行しました。パフォーマンスが改善されたかどうかは、現在様子見です。

以下の手順を踏みました。

  1. コンテナクラスタを停止
  2. docker-compose.ymlにMariaDBコンテナを追加し、redmineコンテナから接続できるようnetwork設定し、rootた上で起動
  3. docker-compose execコマンドでredmineコンテナに接続
    1. apk-add mariadb-clientを実行してクライアントツールをインストール
    2. /usr/src/redmine/config/database.ymlのバックアップを取得した上で、記述をMariaDBに接続できるよう(adapterはmysql2)
    3. mysqlコマンドでMariaDBコンテナに接続し、Install Redmineの手順を参考にDBを作成
    4. Install Redmine](https://www.redmine.org/projects/redmine/wiki/redmineinstall)の手順を参考にrake db:migrateでDBを初期化
    5. /usr/src/redmine/Gemfilegem "yaml_db"の記述を追加してgem bundle updateを実行。エラーとなるが、途中yaml_dbのインストールが成功していればOK
    6. /usr/src/redmine/config/database.ymlを更にバックアップした上で、前にバックアップしていたPostgreSQL用の設定に戻してRAILS_ENV=production bundle exec rake db:data:dumpを実行。/usr/src/redmine/db/data.ymlにバックアップが作成される
    7. /usr/src/redmine/config/database.ymlをMariaDBの設定に戻し、RAILS_ENV=production bundle exec rake db:data:loadを実行。
    8. mysqlコマンドでMariaDBコンテナに接続し、データがリストアされていることを確認
  4. docker-compose.ymlのPostgreSQLコンテナの記述を削除し、redmineコンテナからMariaDBコンテナに接続するよう設定を修正した上で起動。

参考サイト: https://hnron.hatenablog.com/entry/2015/08/18/012738

GitHubで編集を提案

Discussion

okojyo21okojyo21

フォローありがとうございます。自分はRedmineを会社内イントラ仮想サーバーでDockerにてセットアップし使っていますが、最初DBをSQLiteで利用していたものを途中からPostgreSQLに変更しました。当初、各所の内部のインクリメントカウンターがずれてしまって補正するのが大変でしたが、yaml_dbなるライブラリで移行できるのは便利ですねー。

tack41tack41

okojyo21 様
コメントありがとうございます。記事参考にさせていただきました。VB.netの振り返りの記事も読み応えがありました。
私はVPSでですが、同様にDockerで構築したものを利用してます。DB移行は相当大変になることを覚悟していましたが、yaml_dbが抽象化層になっていることで楽に移行できました。Redmineの隠れたメリットかもしれませんね。