お待ちかねの「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
救世主登場:
show pluginsでDISABLEになってるならmy.cnfの修正が必要かと。エラーログにis not loaded って出ていませんか?https://t.co/AstPS13kw3
— ITOH Hiroyuki (@i_rethi) 2024年4月30日
いとうさんありがとう!!!!!
ということで、どこの設定ファイルでも良いのだけど、先ほど設定をコメントアウトしたファイルがちょうどいいや、と(ファイル名も 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さんからも、この変更に関するリリースノートの記述を補足いただきました。
MySQL 8.4でmysql_native_passwordはデフォルト無効化されました #mysql_jphttps://t.co/pFBZfnapf4
— Yoshiaki Yamasaki (@yyamasaki1) 2024年4月30日
Important Change: The deprecated mysql_native_password authentication plugin is now disabled by default. It can be enabled by starting MySQL with the new --mysql-native-password=ON<略> https://t.co/IardP3Ej7J