Le 03/11/2026 à 10:19 PM, Alex Joseph a écrit :
MySQL 8.0 made caching_sha2_password the default authentication plugin and MySQL 8.4 disables mysql_native_password by default (it is removed in 9.0). None of the existing mysql-check modes works with a caching_sha2_password check user, and each of them generates an aborted connection on the server for every check:- pre-41 / post-41 do not set CLIENT_PLUGIN_AUTH, so the server rejects the handshake with error 1251 ("Client does not support authentication protocol requested by server") and the server is marked DOWN. - post-80 announces mysql_native_password, so the server answers with an AuthSwitchRequest (0xFE) to caching_sha2_password. The check accepts it as a valid reply since it is not an error packet, and reports the server UP. But the COM_QUIT pipelined after the handshake response is read by the server as the auth switch reply, and the handshake is aborted with error 1156 ("Got packets out of order"). In both cases the server counts a connection error for the HAProxy host (Aborted_connects, and the host cache handshake errors when skip_name_resolve is OFF, which is the MySQL default, and the HAProxy address resolves forward and backward). Once the host reaches max_connect_errors (100 by default), the server blocks it with ER_HOST_IS_BLOCKED (1129) and refuses every connection from it, including proxied client traffic, until FLUSH HOSTS is issued. With post-80 this happens while the check reported the server as healthy. This patch adds a "post-80-sha2" mode which sets CLIENT_PLUGIN_AUTH and announces caching_sha2_password with an empty auth response. For a password-less caching_sha2_password account the server authenticates in a single round trip and replies with an OK packet, then the pipelined COM_QUIT closes the session cleanly, so no connection error is recorded: CREATE USER 'haproxy'@'%' IDENTIFIED WITH caching_sha2_password BY ''; option mysql-check user haproxy post-80-sha2 Tested against MySQL 8.4.13 (skip_name_resolve=OFF, max_connect_errors=10) and Cloud SQL for MySQL 8.4.11 with a caching_sha2_password check user, one check every 2s: with post-80-sha2 the check is L7OK and neither Aborted_connects nor the host cache error counters move. With post-41 or post-80 every check adds one aborted connection and one host cache handshake error, and the HAProxy host is blocked (1129) after 10 checks, i.e. 20 seconds. The documentation and the mysql-check regtest are updated accordingly.
Thanks, now merged ! -- Christopher Faulet

