MySQL Router Release Notes

4.2 Changes in MySQL Router 2.0.3 (2016-03-03, General Availability)

Functionality Added or Changed

  • Support was added for Solaris 11.2 and above, Fedora 22 and above, and OS X 10.10 and above. (Bug #22842993)

  • Two new connection routing options were added:

    • max_connect_errors: similar to MySQL Server's max_connect_errors option, and defaults to 100

    • client_connect_timeout: similar to MySQL Server's connect_timeout option, and defaults to 9 (1 second less than MySQL Server's default)

    (Bug #22020088)

Bugs Fixed

  • A configuration that contained empty destination values, such as "destinations=test,,,,", would cause Router to terminate with an uncaught exception. This condition now emits an error, such as "Configuration error: option destinations in [routing:foo]: empty address found in destination list". (Bug #22579989)

  • When using non-alphanumeric characters in configuration variables, such as "destinations = {mysql@1}", Router would terminate with an uncaught exception. (Bug #22572346)

  • In certain network setups, for example when connected to a VPN, routing could fail starting with the error "Operation not supported". Error handling was added when setting up the service, which raises or logs errors. (Bug #22531942, Bug #79933)

  • Starting Router without plugins (or a defined strategic plan) now emits a descriptive error that references the lack of plugins. For example, loading an empty configuration file now exits with an error. (Bug #22195343)

  • Plugins now have access to the URI class, and mysqlrouter::split_string was added. (Bug #22134596)

  • A destinations configuration length of more than 256 characters would cause Router to hang. (Bug #22104451)

  • In some cases, the IPv6 address missed the square brackets around the IP address. For example, "[::]:7002" could be reported as ":::7002"; (Bug #22084430, Bug #78921)

  • The --help text now outputs the MySQL Router version number. (Bug #22074209)

  • Added a lock_guard when checking whether a server is quarantined or not, to prevent changes to the quarantine vector with reads. (Bug #22071169)

  • Starting Router with spaces between the destination server addresses would report a configuration error. Now, whitespace is trimmed from the server addresses. (Bug #22062859)

  • Uninstalling MySQL Router (dpkg -r mysql-router) left extra files behind. Now, only the configuration files remain. (Bug #22025434)

  • When MySQL clients connected to Router and the configured back ends were not available, the generated error (such as "ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0" was unclear.

    Now, when none of the back end servers are available, the client receives a message similar to those generated when MySQL clients connect to a host/port pair where MySQL Server is not running. For example, "ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)". (Bug #22020711, Bug #78836)

  • When a client connected through Router, and it did not finish handshaking (or did it incorrectly), it would generate an error on the MySQL Server. For MySQL 5.6 and 5.7, after 100 times it would block the host where this clients came from. Because all clients appear as though they come from the same IP/Host in Router, one client misbehaving could have potentially blocked all other applications.

    This only affected connections coming from the network and not from localhost, because MySQL Server does not register connection errors when connections come from localhost.

    A workaround was to use localhost (meaning, MySQL Server on the same host as Router), or to set the max_connect_errors option to the highest possible value (on 64-bit this is 2^64). (Bug #22020088, Bug #78835)

  • Several code improvements were made that were discovered from Valgrind generated reports. (Bug #21983406, Bug #78805)

  • There was a memory leak in the fabric cache plugin. (Bug #21981758)