MySQL Router Release Notes  /  Changes in MySQL Router 8.4.0 (2024-04-30, LTS Release)

Changes in MySQL Router 8.4.0 (2024-04-30, LTS Release)

Deprecation and Removal Notes

  • The configuration option bootstrap_server_addresses, deprecated in MySQL Router 8.0.14, is removed in this release.

    If this option is present in a configuration file, MySQL Router generates an error. (WL #15867)

  • The configuration option unreachable_destination_refresh_interval, deprecated in MySQL Router 8.0.32, is removed in this release.

    If this option is present in a configuration file, MySQL Router generates an error. (WL #15869)

  • As of this release, version 1.x of MySQL InnoDB Cluster Metadata is no longer supported. It is recommended to always use the latest version of MySQL Shell and MySQL Router.

    See Upgrading MySQL Router and Upgrade Metadata Schema. (WL #15868)

  • The allow_primary_reads parameter of the destinations URI is removed in this release. (WL #15872)

  • The configuration option mode, deprecated in MySQL Router 8.0.4, is removed in this release. (WL #15877)

Functionality Added or Changed

  • As of this release, MySQL Router exposes its configuration in the Cluster metadata for all routers bootstrapped against it. This information is stored as JSON in the Cluster metadata schema and can be accessed by the MySQL Shell operation, object.routerOptions for Cluster, ClusterSet, and ReplicaSets. (WL #15649)

  • As of this release, server connections which were not explicitly closed, but remain idle longer than the defined connection-sharing-delay, are no longer placed in the connection pool. Instead, the connections remain open and available for use by new client connections.

    It is no longer necessary to enable the connection pool to enable connection sharing. Therefore max_idle_server_connections can be zero if connection sharing is enabled. (WL #15742)

Bugs Fixed

  • If a hostname was not resolved, due to a DNS failure, MySQL Router did not check if that host became available again, later. (Bug #36246652)

  • MySQL Router's bootstrap process checks the mysql.user table for the unsupported mysql_native_password authentication plugin. If the bootstrap user had no access to the table, the following error was returned:

            Failed checking the Router account authentication plugin: Error executing MySQL query "select host, plugin from mysql.user where user = 
            'user'": SELECT command denied to user 'user'@'host' 
            for table 'user' (1142)

    As of this release, this error is not returned. (Bug #36225456)

  • If MySQL Router was bootstrapped without the --account parameter, a new metadata user was added using the following query:

            CREATE USER IF NOT EXISTS username@hostname IDENTIFIED BY 'password'

    If the server used an authentication plugin which does not accept single-factor or password-based authentication, the account creation failed. As of this release, the caching_sha2_password plugin is used in this situation:

            CREATE USER IF NOT EXISTS username@hostname IDENTIFIED WITH `caching_sha2_password` BY 'password'

    MySQL Router used default_authentication_plugin to determine the authentication plugin to use. This variable is now deprecated. MySQL Router uses caching_sha2_password. (Bug #36220663, Bug #36245132)

  • The following error was displayed if MySQL Router was closed before the metadata cache started:

            Error: routing:_: Metadata Cache not initialized

    (Bug #36151125)

  • It was not possible to connect to MySQL through MySQL Router, using the Node.js MySQL driver, if MySQL Router was running with both client_ssl_mode and server_ssl_mode disabled. Authentication failed without a useful error message.

    As of this release, MySQL Router returns an error explaining that the Node.js MySQL driver does not support the requested authentication protocol. (Bug #36105279)

  • If an incoming port is opened and closed by a TCP connection, such as a load balancer or a service-monitoring utility performing a health check, the connection counts towards the limit defined by max_connect_errors, even though the connection was not established. This could lead to MySQL Router closing the incoming port when the error limit is reached.

    As of this release, max_connect_errors is not incremented if the Router's incoming port is opened and closed without establishing a connection. (Bug #36104070)

  • If a client sent read-only statements to a destination which was not configured as super_read_only, using the Read-Write splitting port, MySQL Router redirected the statement to the primary. The statement did not return the correct result. (Bug #36042078)

  • It was not possible to build MySQL Router on 32-bit Linux platforms. (Bug #36040942)

  • Queries with trailing semi-colons (;) were treated as multi-statements, which is not permitted if MySQL Router is configured for Read-Write Splitting. (Bug #36036725)

  • The following error did not provide enough information for troubleshooting:

            timestamp routing ERROR [code] connecting to backend  failed: Connection timed out (generic:110)

    As of this release, it contains the following details:

    • Route name and client source.

    • resolve() errors.

    • Hostname, IP addresses, and errors for each connection attempt.

    • The amount of time spent on the connection attempt.

    (Bug #35503245)