GitBucketを4.14.0にバージョンアップするついでにMySQLを5.7.17から8.0.1に上げてみました。

非常に申し訳ないですが、私は自作のGitBucket向けのDocker composeを使用しており、データベースの再構築等が非常に簡単だったのでトライ&エラーでDBをぶっ壊しまくってできましたが、普通にDBをインストールしていればこうはいかないのではないかと思います。思うんですけど、もしかしたら参考になる部分はあるかもしれないので書いてみます。

きっかけ


VPSで動かしてるGitBucketを4.13.0から4.14.0にバージョンアップしたらステータスコード503でエラーが出るんですね。これはおかしいぞ。と。実はテスト環境でも過去何度か遭遇しているエラーでして、その時は都度MySQLのデータを全て削除するという対応をしていたのですが(テスト環境なので別に全て消えても問題なかった)本番環境なのでそうはいかない。

どうもバージョンアップ時のスキーマのマイグレーションに失敗しているのではないかと思うのですが、いろいろ見ているとWikiのData migrationでGitBucketのImport Export機能を使えば解決できるのではないかという感じがしました。で、「ついでだしMySQLのバージョンも上げてしまえ」というスゲー軽いノリでMySQLのバージョンアップを行いました。軽いノリと言ってももちろんバックアップ(GitBucketのバージョンを上げる前に)は事前にとってましたし、Dockerでガンガン環境を再構築できるおかげなんですけどね。

手順


MySQLを5.7.17から8.0.1に上げるにあたって、スクラップビルドしまくったのですが、結局以下の手順で上手くいきました。

  1. GitBucket4.13.0で「System administration -> Data export/import」からデータをExportする。
  2. MySQLのデータを全て消す。データベースファイル丸ごと
  3. DockerのMySQLを8.0.1イメージベースに上げる
  4. 前述の自作Docker composeでbuildしなおす
  5. テーブルのデータがまっさらのGitBucketが出来上がる
  6. ExportしたsqlファイルをMySQLのコンテナに突っ込んでコマンドで直接流し込む
    • WikiのData migrationのページのmysql -u root -p gitbucket < gitbucket-export-xxxxxxxx.sqlのコマンドの部分
  7. 8.0.1にバージョンアップした環境が完成
  8. GitBucketも4.14.0に上げて終了

ハッキリ言ってGitBucket専用のデータベースだったのでできましたが、そうじゃなかったら(他のデータが入っていたら)できなかったと思います。MySQLのデータベースファイルがある状態で5.7.17から8.0.1に上げてもエラーが出まくりましたし、MySQL Workbenchで5.7.17のデータExportして8.0.1にImportしてもこけまくりました。

GitBucketのExport Importではこの辺りがスムーズに行って素晴らしいなって思いました。他にもDBを作り直す前後でキャラクターセットもlaten1からutf8に変更していたのですが、これも上手いこと処理してくれました。こちらも今回とは別で以前WorkBenchのImport Exportでは上手くいきませんでした。

そんな感じで全く参考にならないのですが、上手いこと移行出来て大満足です。GitBucketも4.14.0でアイコンがついていい感じに仕上がってます。ガンガン使っていきたいと思います。