MySQL 8.4-LTSがやってきた&native_passwordに注意

お待ちかねの「MySQLのはじめての LTS」、MySQL 8.4.0 がリリースされました!

Note: If you are having trouble connecting to the upgraded MySQL 8.4.0 Server, please read the end of this blog.
(Summary of solutions for "unknown variable 'default-authentication-plugin" error, and "mysql_native_password' is not loaded" error)



status表示に、特に「LTS」をあらわすものはないようです。(variablesを確認していて「お。LTSって書いてあるじゃん!」と思ってよく見たら TLS でした。関係ない)

インストール

手元の Ubuntu 20.04の、既に MySQL 8.3.0が稼働している環境を、今回アップグレードしました。
apt update しても降ってこなかったので、リポジトリ側に 8.4-ltsが存在しているのを確認して(そう、この名前には「lts」がついているのです)、

Origin: MySQL
Label: MySQL
Codename: jammy
Architectures: i386 amd64 source
Components: mysql-apt-config mysql-8.0 mysql-8.4-lts mysql-innovation mysql-cluster-8.0 mysql-cluster-8.4-lts mysql-tools mysql-cluster-innovation mysql-tools-old mysql-tools-preview
Description: Apt repository for Oracle MySQL packages
SignWith: B7B3B788A8D3785C

手動で、/etc/apt/sources.list.d/mysql.list を書き換えちゃいました。

deb [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-8.4-lts

そして、apt update / apt upgrade。

サーバが起動しない

アップグレードは完了したものの、mysqldサーバが起動しません。

2024-04-30T07:13:31.955229Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
2024-04-30T07:13:31.955815Z 0 [ERROR] [MY-010119] [Server] Aborting

数ある my.cnf 系設定ファイルを手繰っていき、私は /etc/mysql/mysql.conf.d/default-auth-override.cnf に、この設定があるのを見つけました。これをコメントアウト。サーバ再起動(というか起動)。

# This file is automatically generated by MySQL Maintainer Scripts
[mysqld]
default-authentication-plugin = mysql_native_password

クライアントから接続できない

サーバ起動指示はエラーなく完了したものの、こんどは mysql コマンドでの接続でエラーが発生しました。もうやだ。

ubuntu@vmubuntu:~$ mysql -uroot -p
Enter password: 
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

救世主登場:


いとうさんありがとう!!!!!

ということで、どこの設定ファイルでも良いのだけど、先ほど設定をコメントアウトしたファイルがちょうどいいや、と(ファイル名も default-auth なので意味は間違ってないし)そのファイルに mysql_native_password=ON の記述を追加。mysqld再起動。
再度 mysql小文字5文字クライアントから接続

ubuntu@vmubuntu:~$ mysql -uroot -p
Password:
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.4.0 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> 

やったー!!

Conclusion

まとめると、

  • サーバが起動せず「unknown variable 'default-authentication-plugin=mysql_native_password'.」のエラーメッセージが表示されていたら、my.cnf系のどこかの設定ファイルに 「default-authentication-plugin = mysql_native_password」の設定があるので、コメントアウトしろ
  • その後クライアントからもつながらないと思うので、さっきコメントアウトしたファイルあたりにでも、「mysql_native_password=ON」の指定を追加しろ

ということになります。MySQL 8.4.0、いきなり動かなくて焦りました(笑)。


-

After upgrading MySQL 8.4:

  • If the server does not start on error "unknown variable 'default-authentication-plugin=mysql_native_password'.", you shoud comment out the "default-authentication-plugin = mysql_native_password" setting in my.cnf or in other cnf file.
  • After that, you will not able to connect the server by using mysql command-line client on error "ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded", then, you should add "mysql_native_password=ON" to the cnf file.
  • After rebooting mysqld, you can connect the MySQL 8.4.0 LTS! Enjoy it!!

追記

yyamasakiさんからも、この変更に関するリリースノートの記述を補足いただきました。