CLOVER🍀

That was when it all began.

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をむンストヌルしおみたした。

むンストヌル方法自䜓は困らないのですが、リリヌス事情や今の蚭定などを芋盎す機䌚になっおよかったかなず思いたす。