- 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」伍長を参考にさせていただきました。
|