Changes and Improvements in MariaDB 10.4
MariaDB 10.4 is the current major development version.
- See Authentication from MariaDB 10.4 for an overview of the changes.
- The unix_socket authentication plugin is now default on Unix-like systems, which is a major change to authentication in MariaDB (MDEV-12484)
- User password expiry (MDEV-7597)
- Account Locking (MDEV-13095)
- The obsolete mysql.host table is no longer created (MDEV-15851)
- Much faster privilege checks for MariaDB setups with many user accounts or many database grants (MDEV-15649)
- mysql.user table is retired. User accounts and global privileges are now stored in the mysql.global_priv table (MDEV-17658)
- SET PASSWORD support for ed25519 and other authentication plugins (MDEV-12321)
- Added instant DROP COLUMN and changing of the order of columns (MDEV-15562)
- Reduced redo log volume for undo tablespace initialization (MDEV-17138)
- Removed crash-upgrade support for pre-10.2.19 TRUNCATE TABLE (MDEV-13564)
- Added key rotation for innodb_encrypt_log (MDEV-12041)
- Implementation of the optimizer trace, one can enable the optimizer trace by enabling the system variable optimizer_trace (MDEV-6111)
- Engine Independent Table Statistics is now enabled by default; new default values are use_stat_tables=PREFERABLY_FOR_QUERIES and optimizer_use_condition_selectivity=4 (MDEV-15253)
- Two new values for the variable use_stat_tables:
- Histograms are now collected by default (MDEV-18608).
- analyze_sample_percentage variable added. The default value is 100 (
ANALYZEwill use the whole table), but one can also set analyze to only use a sample of table data to collect the statistics.
- Two new values for the variable use_stat_tables:
- Push conditions into materialized IN subqueries (MDEV-12387)
- The optimizer switch flag
optimize_join_buffer_sizenow defaults to
- New optimizer switch flags
- Support of brackets (parentheses) for specifying precedence in UNION/EXCEPT/INTERSECT operations (MDEV-11953)
- New FLUSH SSL command to reload SSL certificates without server restart (MDEV-16266)
CAST(x AS INTERVAL DAY_SECOND(N))(MDEV-17776)
IF NOT EXISTSclause added to INSTALL PLUGIN and
IF EXISTSclause added to UNINSTALL PLUGIN and UNINSTALL SONAME (MDEV-16294)
- Added to the tcp_nodelay system variable (MDEV-16277)
- Removed the Innodb_pages0_read status variable (MDEV-15705).
- New sql-mode setting,
- New variable gtid_cleanup_batch_size for determining how many old rows must accumulate in the mysql.gtid_slave_pos table before a background job will be run to delete them.
- The default for eq_range_index_dive_limit is now
- core_file on Windows now defaults to
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
- While MariaDB server is running, run
mysql_upgradefor 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:
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_sizedefines 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 DATAexecution 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'
- Support for window UDF functions via the new method x_remove (MDEV-15073)
- Json service for plugins (MDEV-5313)
- Change in behavior for FLUSH TABLES (MDEV-5336).
- The JSON_VALID function is automatically used as a CHECK constraint for the JSON data type alias in order to ensure that a valid json document is inserted (MDEV-13916)
List of All MariaDB 10.4 Releases
|21 May 2019||MariaDB 10.4.5||RC||Release Notes||Changelog|
|7 Apr 2019||MariaDB 10.4.4||RC||Release Notes||Changelog|
|25 Feb 2019||MariaDB 10.4.3||RC||Release Notes||Changelog|
|29 Jan 2019||MariaDB 10.4.2||Beta||Release Notes||Changelog|
|20 Dec 2018||MariaDB 10.4.1||Beta||Release Notes||Changelog|
|9 Nov 2018||MariaDB 10.4.0||Alpha||Release Notes||Changelog|