データベース - MySQL - mysql-server 8.0 → 8.4


 


1. 概要
2. 選定
3. バックアップ
4. config
5. アップグレード
6. 実機で
7. 参考サイト

1. 概要

 とうとう、この日がやってきました。  「MySQL 8.0」は、2026年12月31日でサポートが終了します。  おそらくは、「ports」からも消えてしまうと思われます。  いまのうちにアップグレードしないと、あせることになります。

2. 選定

 でまぁ、何にアップグレードすべきかということになります。  2026年6月23日時点で。

ls -ld /usr/ports/databases/mysql*-server

drwxr-xr-x 3 root wheel 7  6月  9 07:12 /usr/ports/databases/mysql80-server
drwxr-xr-x 3 root wheel 7  6月  9 07:12 /usr/ports/databases/mysql84-server
drwxr-xr-x 3 root wheel 7  6月  9 07:12 /usr/ports/databases/mysql96-server
drwxr-xr-x 3 root wheel 7  6月  9 07:12 /usr/ports/databases/mysql97-server
 という状況にありますが。  「Gemini」伍長に相談すると。 ・MySQL 8.4 8.0 の直系後継 LTS (長期サポート 2029年まで) ・MySQL 9.6 開発・評価用、寿命が短い ・MySQL 9.7 最新機能の評価用。8.4 からのジャンプアップは互換性リスクが高い  ちゅうことなので、「MySQL 9.x」は、安定していないので、「MySQL 8.4」へアップグレードすることにします。

3. バックアップ

 「root」ユーザ権限で。  バックアップ用のディレクトリを作成しておきます。

mkdir -pv /var/mybackup

cd /var/mybackup
 論理バックアップ。

mysqldump -u root -p --all-databases --routines --triggers --events > mysqldump.sql
 「MySQL 5.7」から「MySQL 8.0」への移行時は、システムテーブルの構造にそこまで破壊的な変更があったので、複雑なオプションが必要でしたが。  「MySQL 8.0」「MySQL 8.4」間はそこまでひどくないようなので、比較的簡単なオプションでよいようです。  オプションは、下記のものを確実にエクスポートするためのオプションです。 ・--routines ストアドプロシージャ ・--triggers トリガー ・--events イベントスケジュール  いったん「mysql-server」を停止。

service mysql-server stop
 物理バックアップ。

tar -cvf /var/mybackup/mysql_physical_backup.tar /var/db/mysql /var/db/mysql_secure /var/db/mysql_tmpdir
 「tar」の中のファイルは、下記で確認できます。

tar -tvf mysql_physical_backup.tar

4. config

 「MySQL 8.4」のコンフィグレーションを設定しておきます。

cd /usr/ports/databases/mysql84-server

make config

 デフォルトのままで。


cd /usr/ports/databases/mysql84-client

make config

 こちらもデフォルトのままで。

5. アップグレード

 「mysql-client」「mysql-server」の「ports」と「pkg」のバージョンを変更します。

pkg set -o databases/mysql80-client:databases/mysql84-client

Change origin from databases/mysql80-client to databases/mysql84-client for mysql80-client-8.0.46? [y/N]:
 y Enter で答えます。

pkg set -o databases/mysql80-server:databases/mysql84-server

Change origin from databases/mysql80-server to databases/mysql84-server for mysql80-server-8.0.46? [y/N]:
 y Enter で答えます。  本体をアップグレードしますが・・・。  「server」からアップグレードしようとしたら、「client」のバージョンが合わないからとエラーになるので、「client」から。

portupgrade -f mysql80-client -o databases/mysql84-client
 上記の一連の終わりに。

--->  Installing the new version via the port
===>  Deinstalling for mysql84-client
===>   mysql84-client not installed, skipping
===>  Installing for mysql84-client-8.4.10
===>   Registering installation for mysql84-client-8.4.10 as automatic
Installing mysql84-client-8.4.10...
This is the mysql CLIENT without the server.
for complete server and client, please install databases/mysql84-server

===>  Cleaning for mysql84-client-8.4.10
--->  Cleaning out obsolete shared libraries
 と出力されました。  「for complete server and client, please install databases/mysql84-server」ちゅうので。  「server」もちゃんとしなさいねちゅうことですね。  では、「server」を。

portupgrade -f mysql80-server -o databases/mysql84-server
 すんなり終わりました。  そのまま、サーバを起動します。

service mysql-server start
 これもすなおに起動できました。  バージョンを確認します。

mysql -u root -p

SELECT VERSION();

+-----------+
| VERSION() |
+-----------+
| 8.4.10    |
+-----------+
 ログを見ると。

2026-07-07T22:10:38.726834Z 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'.
2026-07-07T22:10:39.422109Z 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed.
2026-07-07T22:10:41.209460Z 4 [System] [MY-013381] [Server] Server upgrade from '80046' to '80410' started.
2026-07-07T22:10:44.342573Z 4 [System] [MY-013381] [Server] Server upgrade from '80046' to '80410' completed.
 という行がありまして。  起動時に、データやサーバを、「8.0」から「8.4」へと移行しているらしいのです。  「MySQL 5.7」から「MySQL 8.0」へのアップグレード時は、大変な思いをしましたが。  今回は、それに比べれば、楽々でありました。

6. 実機で

 前項まででやっているのは、仮想環境での操作で、それは、「MySQL 8.0」を「FreeBSD 15.1 RELEASE」へインストールして、起動した後で、データベースの作成もなく、そのまま、「MySQL 8.4」へアップグレードしたためか、問題なくアップグレードできました。  実機は、ずいぶん前の「FreeBSD」で「MySQL 5.7」を「MySQL 8.0」にアップグレードしたもので、運用中のシステムのバージョンは「FreeBSD 15.0 RELEASE」であります。  実機で、実際にアップグレードした際は、前項までの項目以外に手を入れる必要がありました。  アップグレード後に、起動すると、コンフィグレーションファイルの設定の問題でこけました。  以下の 3行の設定に関して。  (手を入れているので、行番号はあえて書きません)

master-info-repository          = TABLE
relay-log-info-repository       = TABLE
expire_logs_days                = 30
 非推奨というより、「MySQL 8.4」では解釈できない項目となっているので、コメントアウトもしくは削除する必要があります。  3行を無効にすることで、無事起動できました。

7. 参考サイト

 本ページは、「Gemini」伍長を参考にさせていただきました。

audiobook.jp
健康サポート特集
Amazonギフトカード
earthcar(アースカー)
U-NEXT
サウンドハウス
ハイスピードプラン
EaseUS
それがだいじWi-Fi
ベルリッツ
薬屋の独り言
TikTok Shop 【リピート用プログラム】
損保との違い
JETBOY
アフィリエイトのアクセストレード
【usus ウズウズ】
5G CONNECT
ネットオークションの相場、統計、価格比較といえばオークファン
葬送のフリーレン Prime Video