プロジェクト

全般

プロフィール

操作

20260707 サーバ移行06 gitbucket

javaは21をインストール、tomcatをインストールするときにjava-1.8.0-openjdk-headless.x86_64なるものが依存関係で入ってくる。
java21-openjdk.x86_64のインストール時にjava-21-openjdk-headless.x86_64も入っているのだが…
いつものようにmysqldump

旧サーバーで実行:

mysqldump -u root -p gitbucket > gitbucket.sql

新サーバーに持っていく。

サーバの文字コード違いでDBマイグレーションエラー

元々MySQL 5.7で動いていたサーバでデフォルト文字セットがutf8(今でいうutf8mb3)、
新サーバーのMySQL 8.0はデフォルト文字セットがutf8mb4という違いが原因でDBマイグレート中にエラーが発生、マイグレートに失敗した。

新サーバーで実行

mysqldump -u root -p gitbucket < gitbucket.sql

systemctl start tomcatするとエラー発生(/var/log/tomcat/localhost.2026-07-08.logに吐かれた)結果は以下の通り:

08-Jul-2026 06:42:52.252 重大 [main] org.apache.catalina.core.StandardContext.listenerStart クラス [gitbucket.core.servlet.InitializeListener] のリスナインスタンスにコンテキスト初期化イベントを送信中の例外です
        java.sql.SQLTransientConnectionException: (conn=10497) Referencing column 'USER_NAME' and referenced column 'USER_NAME' in foreign key constraint 'IDX_PROTECTED_BRANCH_RESTRICTION_FK0' are incompatible.

Geminiに聞くと文字コードの違いのエラーだそう。自分でALTER TABLE作って文字コード変えてやろうにもエラーが発生を確認。
Geminiは次のコマンドを提案:

# dump.sql の中の utf8 をすべて utf8mb4 に置換する
sed -i 's/utf8/utf8mb4/g' gitbucket.sql

これを実行してgitbucket.sqlを流し込んでやったらあっさり成功。
注:上記sedコマンドはデータの中にUTF8という言葉がないことを前提にやっています。もしあったら、スキーマだけじゃなくてデータも書き換わるので注意しましょう。

2026-07-12追記

dumpからの復旧完全には成功していなかった。詳細は以下に。
202600712 サーバ移行07 gitbuckeのVIEWが移行できてなかった

sylow castle さんが約1ヶ月前に更新 · 4件の履歴