以下の内容はhttps://kazuhira-r.hatenablog.com/entry/2024/08/19/233926より取得しました。


Ubuntu Linux 22.04 LTSにMySQL 8.4をインストールする(設定へのドキュメントまとめ付き)

これは、なにをしたくて書いたもの?

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

リポジトリーのdebファイルをダウンロード。

$ 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がインストールされるように設定されています。

変更する場合は、以下から選ぶことになります。

リポジトリーの情報を更新。

$ 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をインストールしてみました。

インストール方法自体は困らないのですが、リリース事情や今の設定などを見直す機会になってよかったかなと思います。




以上の内容はhttps://kazuhira-r.hatenablog.com/entry/2024/08/19/233926より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14