MariaDB MaxScale 2.4.0 Release Notes -- 2019-06-29

MariaDB MaxScale 2.4.0 Release Notes -- 2019-06-29

Release 2.4.0 is a Beta release.

This document describes the changes in release 2.4.0, when compared to release 2.3.

For any problems you encounter, please consider submitting a bug report at Jira.

Changed Features

Section and object names

Section and object names starting with @@ are now reserved for use by MaxScale itself. If any such names are encountered in configuration files, then MaxScale will not start.

Whitespace in section names that was deprecated in 2.2 will now be rejected and cause the startup of MaxScale to fail.

Binding on network ports

MaxScale 2.4.0 will now use the SO_REUSEPORT capability offered by newer kernels that allows reuse of network listener ports. In practice this means improved connection creation speed with more dynamic balancing of connections.

As a side-effect of this, it is possible for two MaxScale instances to bind on the same listener port on systems that have Linux kernels newer than 3.9. This can only happen if the MaxScale instances use completely different directory structures (i.e. different --basedir arguments). Normal use of MaxScale still detects multiple MaxScales trying to bind to the same ports. Almost always, this will not have any negative side-effects.

Stronger hashing algorithm for admin user passwords

The administrative user passwords are now stored as SHA2-512 hashes which is an improvement over the older MD5 hashing algorithm. New users will use the stronger algorithm but old users will continue using the weaker one. To upgrade administrative users, recreate the user.


Mandatory protocol parameter on server creation

The protocol parameter must now always be defined when a server is created. The previously undocumented default value of mariadbbackend now must be explicitly defined when a server is created via the REST API.

TLS on server creation

To create encrypted connection to a server, the TLS parameters must be defined at server creation time. To enable TLS for a server that doesn't have it, destroy the old one and recreate it afterwards.

Dropped Features

Enabling server TLS via MaxAdmin

As TLS for servers must now be defined at creation time, enabling TLS at runtime via MaxAdmin is no longer possible. Use MaxCtrl to create servers with TLS enabled.

debugcli and telnetd

The debugcli router and the telnetd protocol module it uses have been removed.


The ndbclustermon module has been removed.


The mmmon module has been removed as the mariadbmon monitor largely does what it used to do.

MariaDB-Monitor settings

The following settings have been removed and cause a startup error if defined: mysql51_replication, multimaster and allow_cluster_recovery.


The log_to_shm parameter that was removed in 2.3 will be treated as an unknown parameter in 2.4.0.

Deprecated Features


The mqfilter has been deprecated and it will be removed in a future version of MaxScale.

We advise against using it.

Nagios Plugins

MaxScale no longer ships the example scripts and configuration files for Nagios.

New Features

Clustrix Support

MaxScale now contains support for Clustrix in the form of a Clustrix monitor that is capable of monitoring a Clustrix cluster.

Please see the documentation for details.

Smart Router

MaxScale has now a new router SmartRouter that is capable of routing a query to different kinds of backends, containing the same data, depending on which backend can best handle that particular kind of query.

Please see the documentation for details.

Servers can be drained

It is now possible to drain a server, which means that existing connections to the server can continue to be used but new connections are no longer created to the server.

In the output of maxctrl, the fact that a server is being drained is visible in the State column as the value Draining.

│ Server  │ Address         │ Port │ Connections │ State                         │ GTID  │
│ Server1 │ │ 3306 │ 2           │ Master, Running               │ 0-1-6 │
│ Server2 │  │ 3306 │ 1           │ Draining, Slave, Running      │ 0-1-6 │
│ Server3 │ │ 3306 │ 2           │ Slave, Running                │ 0-1-6 │
│ Server4 │ │ 3306 │ 2           │ Slave, Running                │ 0-1-6 │

A server is set in the Draining state the same way as it is set in the Maintenance state:

$ maxctrl set server Server2 drain

Note that although the state is displayed as Draining, when setting and clearing the state, the word drain is used.

Note that the full implication of draining a server depends upon both on the role of the server and on the router being used, and its configuration.

For instance, if readwritesplit is used and the server being drained is a slave, then from a client's perspective there will be no difference; readwritesplit will simply not use that server. However, if the server being drained is the master, then it will not be possible to connect unless master_failure_mode has been set to something else but the default fail_instantly.

Once the server has been drained, the state will be Drained.

weightby Replacement for Servers: rank

The new rank parameter is the replacement for the deprecated weightby parameter. It allows explicit groupings of servers into primary and secondary groups. Servers configured with rank=secondary will only be used if no primary servers are available.

UNIX Domain Socket for Servers

Servers can now use the socket parameter to define a local UNIX domain socket through which the connections will be created.


The servers a service uses can now be specified using the cluster parameter of the service.


In this case, the servers of the service will be defined by the referred to monitor. Note that the parameters servers and cluster are mutually exclusive.


In the MaxScale configuration file, durations can now be suffixed with h, m, s or ms to indicate that the duration is specified as hours, minutes, seconds or milliseconds.

Please see the configuration guide for details.

Not providing an explicit unit is strongly discouraged as it will be deprecated in MaxScale 2.5.

Query Classifier Cache

It is now possible to examine the contents of the query classifier cache. The REST-API endpoint is


and the equivalent maxctrl command

maxctrl show qc_cache

The output shows the statements (the canonical version) in the cache, the number of times they have been encountered and how they have been classified.

Connection Attempt Throttling

If a user fails to authenticate multiple times, the host from where the user is connecting from will be blocked for 60 seconds. See max_auth_errors_until_block for more information.

REST API & MaxCtrl

Default API Version

The API version prefix is now optional and if not present, will be assumed to be the latest version which currently is /v1.

Hard maintenance mode

The new --force option for the set server command in MaxCtrl allows all connections to the server in question to be closed when it is set into maintenance mode. This causes idle connections to be closed immediately.

For more information, read the REST-API documentation for the set endpoint.

Command History

The interactive mode for MaxCtrl now has command history.

Multi-parameter Alter

The alter commands in MaxCtrl now accept multiple key-value pairs in one command. See output of maxctrl help alter for more information.


For more information on the readwritesplit router, refer to the documentation.


The transaction replay functionality will now also be applied in conjunction with server initiated transaction rollbacks.


The new transaction_replay_attempts parameter controls how many errors the transaction replay mechanism tolerates before giving up on the replay attempt. The number of transaction replay attempts is now capped to a default value of 5.


Lazy connection creation delays the opening of all connections until they are needed. This reduces the load that is placed on the backend servers when the client connections are short. This feature is disabled by default.

Connection Selection

The servers where new connections are created at the start of a session are now always use connection counts. This allows the use of slave_selection_criteria=LEAST_CURRENT_OPERATIONS and max_slave_connections=1.

Master Selection

Readwritesplit will now load balance master connections in case there are multiple master servers. This is mainly of relevance only with Clustrix clusters.

Maintenance mode

Readwritesplit now allows open transactions to finish if the master is put into maintenance mode. To forcefully close all connections to a server use the maxctrl set server <name> maintenance --force command.


Replicating Slaves

If a slave server is replicating from a Galera node, galeramon will now correctly assign it the Slave status.

GTID in list servers

Galera nodes will now display their GTID positions in the output of maxctrl list servers.

Avrorouter Direct Replication

By defining the servers parameter for the avrorouter service, the replication is done directly from a remote master server. This skips the binlogrouter definition completely making the conversion process faster and more space efficient.


This MariaDB-Monitor setting allows the monitor greater freedom in managing the backend servers. Please see MariaDB-Monitor documentation for more information.

Bug fixes

Here is a list of bugs fixed in MaxScale 2.4.0.

Known Issues and Limitations

There are some limitations and known issues within this version of MaxScale. For more information, please refer to the Limitations document.


RPM and Debian packages are provided for the Linux distributions supported by MariaDB Enterprise.

Packages can be downloaded here.

Source Code

The source code of MaxScale is tagged at GitHub with a tag, which is identical with the version of MaxScale. For instance, the tag of version X.Y.Z of MaxScale is X.Y.Z. Further, master always refers to the latest released non-beta version.

The source code is available here.


Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.