これは、なにをしたくて書いたもの?
MySQL 8.4がリリースされてから4ヶ月ほど経ったので、そろそろ1度インストールから見ておこうかなということで。
リリース事情のキャッチアップもしていきます。
MySQL 8.4
MySQL 8.4は、MySQLの初めてのLTSリリースです。
今後、MySQLのリリースはLTSとInnovationの2つにわかれます。詳細は以下のブログエントリーを読むのがよいでしょう。
Introducing MySQL Innovation and Long-Term Support (LTS) versions
Innvocationは最新の追加や改善が積極的に行われるリリースです。あるリリース内でも新機能の追加や削除、動作変更なども行われると
されています。一方で、更新は次のInnovationまたはLTSがリリースされた段階で終了します。現在の最新のInnovationリリースは9.0です。
LTSはリリース後は機能追加を押さえ、バグフィックスやセキュリティパッチによる更新が中心のモデルになります。リリース後は機能追加や
削除、動作変更は行われません。更新については5年間(延長はプラス3年)です。LTSは2年ごとのリリースを予定していて、
次のLTSは9.7になる予定だそうです。
このあたりのリリースモデルの考え方は、このブログエントリーをしっかり読んでおいた方がよさそうですね。
Introducing MySQL Innovation and Long-Term Support (LTS) versions
ドキュメントでも、InnovationとLTSについては書かれています。
MySQL :: MySQL 8.4 Reference Manual :: 1.3 MySQL Releases: Innovation and LTS
MySQL 8.4.0のリリースノートはこちら。
MySQL :: MySQL 8.4 Release Notes :: Changes in MySQL 8.4.0 (2024-04-30, LTS Release)
また、MySQL 8.0からの変更点はこちらのページにまとめられています。
MySQL :: MySQL 8.4 Reference Manual :: 1.4 What Is New in MySQL 8.4 since MySQL 8.0
目立った機能追加などはありませんが、設定値の整理やデフォルト値の変更は多くあるようなのでそのあたりは注意ですね。
参考)
漢(オトコ)のコンピュータ道: MySQL 8.4 LTS登場!!
MySQL 8.4 LTS が あらわれた - Speaker Deck
第106回 長期サポート版MySQL 8.4 LTS登場、PostgreSQL 17ベータ版など新リリース目白押し | gihyo.jp
実に6年ぶり!「MySQL」のメジャーバージョン「8.4.0 LTS」が新しいリリーススタイルで登場 | Think IT(シンクイット)
参考に挙げたブログエントリーを見ていると、以下の周辺プロダクトはMySQL 8.0までが最終リリースのようです。
MySQL Workbenchの代替としては、MySQL Shell for VS Codeを使うことになるようです。個人的にはMySQL Workbenchはよく使って
いたんですけどね。
では、MySQL 8.4をaptリポジトリーからインストールしてみます。
MySQL :: Download MySQL APT Repository
MySQL :: A Quick Guide to Using the MySQL APT Repository
環境
今回の環境はこちら。Ubuntu Linux 22.04 LTSです。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy $ uname -srvmpio Linux 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
MySQL 8.4をaptリポジトリーからインストールする
それでは、MySQL 8.4をこちらの手順に沿ってインストールしていきます。
MySQL :: A Quick Guide to Using the MySQL APT Repository
$ curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
インストール。
$ sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
デフォルトでMySQL 8.4がインストールされるように設定されています。

変更する場合は、以下から選ぶことになります。
- mysql-8.0
- mysql-innovation
- mysql-8.4-lts
- mysql-cluster-8.0
- mysql-cluster-innovation
- mysql-cluster-8.4-lts

リポジトリーの情報を更新。
$ sudo apt update
MySQL Serverをインストール。同時にMySQLクライアントもインストールされます。
$ sudo apt install mysql-server
この時、rootユーザーのパスワードを設定するように求められます。
インストールが完了すると、この時点でMySQLサーバーは起動しています。また自動起動も有効になっています。
$ sudo systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-08-18 22:54:24 JST; 35s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 2094 (mysqld)
Status: "Server is operational"
Tasks: 35 (limit: 2219)
Memory: 430.3M
CPU: 1.216s
CGroup: /system.slice/mysql.service
└─2094 /usr/sbin/mysqld
8月 18 22:54:20 myserver systemd[1]: Starting MySQL Community Server...
8月 18 22:54:24 myserver systemd[1]: Started MySQL Community Server.
MySQLクライアントのバージョン。
$ mysql --version mysql Ver 8.4.2 for Linux on x86_64 (MySQL Community Server - GPL)
接続して、サーバーのバージョンを確認してみましょう。
$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.4.2 MySQL Community Server - GPL Copyright (c) 2000, 2024, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select version(); +-----------+ | version() | +-----------+ | 8.4.2 | +-----------+ 1 row in set (0.00 sec)
クライアントもサーバーも、MySQL 8.4.2がインストールされたようです。
サーバーの停止。
$ sudo systemctl stop mysql
起動。
$ sudo systemctl start mysql
MySQL Shellをインストールする
MySQLクライアントは、MySQL Shellに移していった方がよさそうなのでこちらもインストールしておきます。
$ sudo apt install mysql-shell
こちらはMySQL Shell 8.4.1がインストールされました…。
$ mysqlsh --version mysqlsh Ver 8.4.1 for Linux on x86_64 - for MySQL 8.4.1 (MySQL Community Server (GPL))
接続はこちらのコマンドで。
$ mysqlsh root@localhost:3306 --sql
設定ファイルを確認する
設定ファイルはこれだけありそうです。
$ tree /etc/mysql
/etc/mysql
├── conf.d
│ └── mysql.cnf
├── my.cnf -> /etc/alternatives/my.cnf
├── my.cnf.fallback
├── mysql.cnf
└── mysql.conf.d
└── mysqld.cnf
2 directories, 5 files
確認してみます。
/etc/mysql/my.cnf。
$ grep -v '#' /etc/mysql/my.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
/etc/mysql/mysql.cnf。
$ grep -v '#' /etc/mysql/mysql.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
この2ファイル、中身がまったく同じなのですが…?
$ diff /etc/mysql/my.cnf /etc/mysql/mysql.cnf $ echo $? 0
修正する場合は、/etc/mysql/conf.dディレクトリや/etc/mysql/mysql.conf.dディレクトリの中を扱った方がよさそうですね。
/etc/mysql/conf.d/mysql.cnfは、MySQLクライアント用の設定ファイルのようです。
$ grep -v '#' /etc/mysql/conf.d/mysql.cnf [mysql]
/etc/mysql/mysql.conf.d/mysqld.cnfは、MySQLサーバー用の設定ファイルのようです。
$ grep -v '#' /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log
データディレクトリは/var/lib/mysqlですね。
$ sudo ls -l /var/lib/mysql 合計 103508 -rw-r----- 1 mysql mysql 6291456 8月 18 22:59 '#ib_16384_0.dblwr' -rw-r----- 1 mysql mysql 14680064 8月 18 22:53 '#ib_16384_1.dblwr' drwxr-x--- 2 mysql mysql 4096 8月 18 22:57 '#innodb_redo' drwxr-x--- 2 mysql mysql 4096 8月 18 22:57 '#innodb_temp' -rw-r----- 1 mysql mysql 56 8月 18 22:53 auto.cnf -rw-r----- 1 mysql mysql 505 8月 18 22:54 binlog.000001 -rw-r----- 1 mysql mysql 181 8月 18 22:56 binlog.000002 -rw-r----- 1 mysql mysql 158 8月 18 22:57 binlog.000003 -rw-r----- 1 mysql mysql 48 8月 18 22:57 binlog.index -rw------- 1 mysql mysql 1705 8月 18 22:54 ca-key.pem -rw-r--r-- 1 mysql mysql 1108 8月 18 22:54 ca.pem -rw-r--r-- 1 mysql mysql 1108 8月 18 22:54 client-cert.pem -rw------- 1 mysql mysql 1705 8月 18 22:54 client-key.pem -rw-r----- 1 mysql mysql 3456 8月 18 22:56 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 8月 18 22:57 ibdata1 -rw-r----- 1 mysql mysql 12582912 8月 18 22:57 ibtmp1 drwxr-x--- 2 mysql mysql 4096 8月 18 22:54 mysql -rw-r----- 1 mysql mysql 26214400 8月 18 22:57 mysql.ibd -rw-r----- 1 mysql mysql 124 8月 18 22:54 mysql_upgrade_history drwxr-x--- 2 mysql mysql 4096 8月 18 22:54 performance_schema -rw------- 1 mysql mysql 1705 8月 18 22:54 private_key.pem -rw-r--r-- 1 mysql mysql 452 8月 18 22:54 public_key.pem -rw-r--r-- 1 mysql mysql 1108 8月 18 22:54 server-cert.pem -rw------- 1 mysql mysql 1705 8月 18 22:54 server-key.pem drwxr-x--- 2 mysql mysql 4096 8月 18 22:54 sys -rw-r----- 1 mysql mysql 16777216 8月 18 22:59 undo_001 -rw-r----- 1 mysql mysql 16777216 8月 18 22:59 undo_002
ログは/var/log/mysqlディレクトリにあるようです。
$ sudo ls -l /var/log/mysql 合計 8 -rw-r----- 1 mysql adm 4452 8月 18 22:57 error.log
設定ファイルを少し変更しておきましょう。
設定ファイルには、[mysqld]のようなグループを持ちます。
[mysql] ... [mysqld] ...
グループについては、こちらに少し説明があります。
MySQL :: MySQL 8.4 Reference Manual :: 6.2.2.2 Using Option Files
グループ名とプログラム名が同じであれば、そのグループ内のオプションはそのプログラムのみに適用されます。
If an option group name is the same as a program name, options in the group apply specifically to that program.
たとえば[mysql]グループはmysqlコマンドに対する設定になります。
変わったものは[client]グループで、これはすべてのクライアントプログラムに適用されるグループになります。
記載する順序は重要で、後で書かれた内容でオーバーライドすることができます。たとえば[client]グループで指定した内容を
[mysqldump]グループでオーバーライドすることができる、といった感じです。
また[mysql]グループにはバージョン指定をすることもでき、[mysqld-8.4]のように書くことでMySQLサーバー8.4.xのみに有効な設定にも
できます。[mysql-8.3]のようにも書けるわけですね。
まあ、いろいろ調べてみましたが、今回はこんな感じにしました。
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] pid_file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log_error = /var/log/mysql/error.log #general_log = ON #general-log-file = /dev/stdout #general_log_file = /var/log/mysql/server.log port = 3306 bind_address = 0.0.0.0 skip_name_resolve character_set_server = utf8mb4 collation_server = utf8mb4_0900_bin transaction_isolation = READ-COMMITTED ## gtid gtid_mode = on enforce_gtid_consistency = on ## binary log log_bin = mysql-bin sync_binlog = 1 binlog_expire_logs_seconds = 864000
設定したのはサーバー側のみです。クライアント側はデフォルトのままにしました。
その他の設定項目は、ドキュメントの以下のページを見ていくとよいでしょう。すべての設定項目がひとつのページにまとまっているわけでは
ないので、いろいろ見て回ってまとめておきました。
MySQL :: MySQL 8.4 Reference Manual :: 7.1.8 Server System Variables
MySQL :: MySQL 8.4 Reference Manual :: 17.14 InnoDB Startup Options and System Variables
MySQL :: MySQL 8.4 Reference Manual :: 19.1.6 Replication and Binary Logging Options and Variables
MySQL :: MySQL 8.4 Reference Manual :: 19.1.6.4 Binary Logging Options and Variables
MySQL :: MySQL 8.4 Reference Manual :: 19.1.6.5 Global Transaction ID System Variables
MySQL :: MySQL 8.4 Reference Manual :: 19.1.6.2 Replication Source Options and Variables
MySQL :: MySQL 8.4 Reference Manual :: 19.1.6.3 Replica Server Options and Variables
オマケ
Dockerイメージ作成の時などで、どのリリース(8.0なのか8.4 LTSなのかなど)を選択するのを対話形式ではなくCLIで設定する方法は
以前書いておきました。
MySQLをaptリポジトリーからインストールする時に、MySQL 8.0が選択されるように設定する - CLOVER🍀
実はこの中に、MySQL 8.4を選ぶコマンドも書いているのですが。
おわりに
Ubuntu Linux 22.04 LTSにMySQL 8.4をインストールしてみました。
インストール方法自体は困らないのですが、リリース事情や今の設定などを見直す機会になってよかったかなと思います。