Changes and Improvements in MariaDB 10.4

MariaDB 10.4 is the current major development version.

Implemented Features






For a list of all new variables, see System Variables Added in MariaDB 10.4 and Status Variables Added in MariaDB 10.4.


Galera 4 version 26.4.0 has been added to MariaDB 10.4

Upgrading to Galera 4 version 26.4.0

Rolling upgrades from earlier 10.3 (or older) MariaDB releases are not supported in this release. For upgrading a 10.3-based cluster, any applications accessing the cluster should be stopped and the cluster shut down. Then for each cluster node the following procedure should be carried out:

  • Install MariaDB 10.4.2 and Galera 4 version 26.4.0
  • Start MariaDB server, but make sure it is not trying to connect to the cluster by configuring wsrep_provider=none
  • While MariaDB server is running, run mysql_upgrade for the server
  • Stop MariaDB server

After that, you can bootstrap the cluster. If there was ongoing application load on the cluster during the initial cluster shutdown phase, you should make sure to bootstrap the cluster with the node which was shutdown last.

We are working on rolling upgrade support for the final GA version of MariaDB 10.4. With a rolling upgrade, a live cluster can be upgraded node by node, and the cluster is able to process application load when having a hybrid setup of 10.3 and 10.4 nodes.

New Features in Galera 26.4.0

The ‘mysql’ schema contains new Galera replication related tables:

  • wsrep_cluster
  • wsrep_cluster_members
  • wsrep_streaming_log

End users may read but not modify these tables.

The new streaming replication feature allows replicating transactions of unlimited size. With streaming replication, a cluster is replicating a transaction in small fragments during transaction execution. This transaction fragmenting is controlled by two new configuration variables:

  • wsrep_trx_fragment_unit (bytes, rows, statements) defines the metrics for how to measure transaction size limit for fragmenting. Possible values are:
    • bytes: transaction’s binlog events buffer size in bytes
    • rows: number of rows affected by the transaction
    • statements: number of SQL statements executed in the multi-statement transaction
  • wsrep_trx_fragment_size defines the limit for fragmenting. When a transaction’s size, in terms of the configured fragment unit, has grown over this limit, a new fragment will be replicated.

Transactions replicated through galera replication will now process the commit phase using MariaDB's group commit logic. This will affect transaction throughput, especially when binary logging is enabled in the cluster.

Limitations in Galera 26.4.0

  • Upgrading from 10.3 version 25.3.25 to 10.4 version 26.4.0 must happen on a stopped cluster. Only after all nodes have been upgraded to MariaDB 10.4 and Galera 26.4.0 can the cluster be started up
  • Splitting transactions of LOAD DATA execution will conflict with streaming replication, and should not be used if streaming replication is configured


  • Crash safe Aria-based system tables (MDEV-16421)
  • Added Linux abstract socket support (MDEV-15655)
  • Enabled C++11 (MDEV-16410)
  • Performance improvements in Unicode collations (MDEV-17534, MDEV-17511, MDEV-17502, MDEV-17474)
  • User data type plugins (MDEV-4912, in progress)
  • Improvements with SQL standard INTERVAL support to help functions TIMESTAMP() and ADDTIME() return more predictable results.
    • Historically, MariaDB uses the TIME data type for both "time of the day" values and "duration" values. In the first meaning the natural value range is from '00:00:00' to '23:59:59.999999', in the second meaning the range is from '-838:59:59.999999' to '+838:59:59.999999'.
    • To remove this ambiguity and for the SQL standard conformance we plan to introduce a dedicated data type INTERVAL that will be able to store values in the range at least from '-87649415:59:59.999999' to '+87649415:59:59.999999', which will be enough to represent the time difference between TIMESTAMP'0001-01-01 00:00:00' and TIMESTAMP'9999-12-31 23:59:59.999999'.
    • As a first step we support this range of values for intermediate calculations when TIME-alike string and numeric values are used in INTERVAL (i.e. duration) context, e.g. as the second argument of SQL functions TIMESTAMP(ts,interval) and ADDTIME(ts,interval), so the following can now be calculated:
SELECT ADDTIME(TIMESTAMP'0001-01-01 00:00:00', '87649415:59:59.999999');
-> '9999-12-31 23:59:59.999999'  

SELECT TIMESTAMP(DATE'0001-01-01', '87649415:59:59.999999')
-> '9999-12-31 23:59:59.999999'  

SELECT ADDTIME(TIME'-838:59:59.999999', '1677:59:59.999998');
-> '838:59:59.999999'  

List of All MariaDB 10.4 Releases


Comments loading...