プロジェクト

全般

プロフィール

20260707 サーバ移行06 gitbucket » 履歴 » リビジョン 3

リビジョン 2 (sylow castle, 2026/07/07 22:21) → リビジョン 3/4 (sylow castle, 2026/07/08 01:02)

# 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という言葉がないことを前提にやっています。もしあったら、スキーマだけじゃなくてデータも書き換わるので注意しましょう。