MySQL v8.0 ClientからProxySQLを使用する際の注意

公式でも言及されていることですが、ProxySQLはそのコントロール配下にMySQL v8.0を置くことは可能なものの、MySQL 8.0.4からのデフォルト認証方式であるcaching_sha2_passwordには対応しておりません。

MySQL 8.0 · sysown/proxysql Wiki · GitHub

そのため、何も気にせずMySQL v8.0のクライアントから接続すると、以下のように認証が正しく行われません。

mysql --host 127.0.0.1 --port 6033 --user admin_user -p
Enter password: <正しいパスワードを入力してEnter>
ERROR 1045 (28000): ProxySQL Error: Access denied for user 'admin_user'@'%' (using password: NO)

解消するにはまずサーバ側に既存の認証方式であるmysql_native_passwordを各所設定します。

mysql> select user, plugin from user where user = 'admin_user';
+-------------+-----------------------+
| user        | plugin                |
+-------------+-----------------------+
| admin_user | mysql_native_password |
+-------------+-----------------------+
1 row in set (0.21 sec)

mysql> show variables like 'default_auth%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.18 sec)

そして接続の際にオプション"--default-auth=mysql_native_password"を付与することで、正しく接続できるようになります。

mysql --host 127.0.0.1 --port 6033 --user admin_user -p --default-auth=mysql_native_password