Changes & Improvements in MariaDB 10.2
MariaDB 10.2 is no longer maintained. Please use a more recent release.
The most recent release of MariaDB 10.2 is:
MariaDB 10.2.44 Stable (GA) Download Now
MariaDB 10.2 is a previous major stable version. The first stable release was in May 2017.
For details on upgrading from MariaDB 10.1, see Upgrading from MariaDB 10.1 to 10.2.
The following lists the major new features in MariaDB 10.2:
Implemented Features
InnoDB as Default
- InnoDB is now the default storage engine. Until MariaDB 10.1, MariaDB used the XtraDB storage engine as default. XtraDB in 10.2 is not up to date with the latest features of InnoDB and cannot be used. As the InnoDB on disk format is identical to XtraDB's this will not cause any problems when upgrading to MariaDB 10.2. See Why does MariaDB 10.2 use InnoDB instead of XtraDB?
Syntax / General Features
- MyRocks storage engine added. (It has its own maturity level. In MariaDB 10.2.14, it is considered Gamma) (MDEV-9658)
- Window functions have been introduced.
- The SHOW CREATE USER statement was introduced
- New CREATE USER options for limiting resource usage and tls/ssl
- New ALTER USER statement
- Non-recursive Common Table Expressions
- Recursive Common Table Expressions (MDEV-9864)
- New WITH statement.
WITH
is a common table expression that allows you to refer to a subquery expression many times in a query (MDEV-8308 & MDEV-9864) — Original code from Galina Shalygina - Support for CHECK CONSTRAINT (MDEV-7563)
- Support for DEFAULT with expressions (MDEV-10134)
- BLOB and TEXT fields can now have a DEFAULT value
- Lots of restrictions lifted for Virtual computed columns
- Number of supported decimals in DECIMAL has increased from
30
to38
(MDEV-10138) - Added catchall for list partitions (MDEV-8348)
- Oracle-style EXECUTE IMMEDIATE statement (MDEV-10585)
- PREPARE Statement/Dynamic SQL now understand most expressions (MDEV-10866, MDEV-10709).
- InnoDB tables now support spatial indexes
- ed25519 authentication plugin (MDEV-12160)
- Better InnoDB crash recovery progress reporting (MDEV-11027)
- Improvements to InnoDB startup/shutdown to make it more robust
- AWS Key Management plugin added for Windows, CentOS, RHEL, and Fedora packages
- Atomic writes support made more general. Shannon system SSD cards are now supported.
Incompatible Changes
- TokuDB has been split into a separate package, mariadb-plugin-tokudb.
- SQL_MODE has been changed; in particular, NOT NULL fields with no default will no longer fall back to a dummy value for inserts which do not specify a value for that field.
- Replication from legacy MySQL servers may require setting binlog_checksum to NONE.
- New reserved words: OVER, RECURSIVE, and ROWS.
Triggers
- Multiple triggers for the same event (MDEV-6112)
- The FOLLOWS/PRECEDES clauses have been added to the CREATE TRIGGER statement
- Multiple triggers are now counted in the Executed_triggers status variable (MDEV-10915)
- SHOW TRIGGERS and SHOW CREATE TRIGGER now include the date and time the trigger was created
Replication / Binary Log
- DML_only flashback can rollback instances/databases/tables to an old snapshot (MDEV-10570)
- New variable read_binlog_speed_limit permits restricting the speed at which the slave reads the binlog from the master (MDEV-11064) — Original code from Tencent Game DBA Team, developed by chouryzhou.
- Delayed replication is supported (MDEV-7145) — Backported from MySQL 5.6 by Kristian Nielsen funded by Booking.com.
- Compression of events in the binary log is supported (MDEV-11065) — Original code from Tencent Game DBA Team, developed by vinchen.
- Default binary log format changed to mixed (MDEV-7635)
- Default value of replicate_annotate_row_events changed to
ON
(MDEV-7635) - Default value of slave_net_timeout reduced to 60 seconds (MDEV-7635)
- Default server_id changed from
0
to1
GeoJSON / JSON
- The JSON data type (an alias for LONGTEXT) was introduced.
- JSON functions added (MDEV-9143)
- Implement ST_AsGeoJSON and ST_GeomFromGeoJSON functions so the spatial features can be imported/exported using GeoJSON format (MDEV-11042)
Information Schema
- An information schema plugin to report all user variables, which creates the Information Schema USER_VARIABLES Table (MDEV-7331)
- Changes to the Information Schema COLUMNS table. Literals are now quoted in the
COLUMN_DEFAULT
column to distinguish them from expressions (MDEV-13132), and two new columns added providing information about generated (virtual, or computed) columns (MDEV-9255).
EXPLAIN
- EXPLAIN FORMAT=JSON now shows
outer_ref_condition
field which contains the condition that the(?) SELECT checks on each re-execution (MDEV-9652) - EXPLAIN FORMAT=JSON now shows
sort_key
field which shows the sort criteria used byfilesort
operation. (commit 2078392) - EXPLAIN used to show incorrect information about how the optimizer resolved
ORDER BY
clause orDistinct
. This was a long-standing problem with roots back in MySQL. Now, after MDEV-8646 and related fixes, the problem doesn't exist anymore. (For test cases, see MDEV-7982, MDEV-8857, MDEV-7885, MDEV-326)
Optimizations
- Connection setup was made faster by moving creation of THD to new thread (MDEV-6150)
- Pushdown conditions into non-mergeable views/derived tables (MDEV-9197, condition-pushdown-into-derived-table-optimization ) — Original code from Galina Shalygina
- ANALYZE TABLE has been re-implemented so as not to lock the entire table when collecting engine independent statistics (MDEV-7901)
- Internal CRC32 routines use the optimized implementation on Power8 — MDEV-9872
- Table cache can automatically partition itself as needed to reduce the contention (MDEV-10296)
Compatibility
- 88 new NO PAD collations added. In
NO PAD
collations, end spaces are significant in comparisons (MDEV-9711) — Original code from Daniil Medvedev - MariaDB now works when started with a MySQL 5.7.6+ data directory (MDEV-11170)
CONNECT
- Zipped File Tables for the CONNECT storage engine (MDEV-11295)
- The CONNECT engine now supports the JDBC Table type (MDEV-9765)
System Variables
For a list of all new system variables, see System Variables Added in MariaDB 10.2. Variable changes include:
- New variable to disable deadlock detection innodb_deadlock_detect
- aria_recover has been renamed to aria_recover_options (MDEV-8542)
- Default values of the aria_recover and myisam_recover_options system variables changed to
BACKUP,QUICK
- The server version can now be faked to work around dated applications that require a particular version string (MDEV-7780)
- slave_parallel_workers is now an alias for slave_parallel_threads
- New status variables com_alter_user, com_multi and com_show_create_user
- New variable for setting a directory for storing temporary non-tablespace InnoDB files, innodb_tmpdir
- New variable read_binlog_speed_limit permits restricting the speed at which the slave reads the binlog from the master (MDEV-11064)
- innodb_log_files_in_group can now be set to
1
(MDEV-12061) - The thread pool now gives higher priority to connections that have an active transaction. This can be controlled with the new thread_pool_prio_kickup_timer and thread_pool_priority system variables. (MDEV-10297)
- Default value of group_concat_max_len changed to 1M (MDEV-7635)
- Default value of sql_mode changed to STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION (MDEV-7635) (MariaDB 10.2.4 and later)
- Default value of innodb_compression_algorithm changed to
zlib
- this does not mean pages are now compressed by default, see compression (MDEV-11838) - Default value of innodb_log_compressed_pages changed to
ON
from MariaDB 10.1.2 to MariaDB 10.1.25 (MDEV-7635 and MDEV-13247) - Default value of innodb_use_atomic_writes and innodb_use_trim changed to
ON
- The unused innodb_api_* variables have been removed (MDEV-12050)
- tmp_disk_table_size was added to allow one to limit the size of temporary disk tables stored in tmpdir. At the same time tmp_memory_table_size was added an alias for tmp_table_size. At some point we plan to deprecate
tmp_table_size
. (MariaDB 10.2.7 and later).
Status Variables
For a list of all new status variables, see Status Variables Added in MariaDB 10.2.
Scripts
- Continuous binary log backup has been added to mysqlbinlog (MDEV-8713)
- mysql_zap and mysqlbug have been removed (MDEV-7376, MDEV-8654)
Other Changes
- Added support for OpenSSL 1.1 and LibreSSL (MDEV-10332)
- Persistent AUTO_INCREMENT for InnoDB (MDEV-6076)
- Support COM_RESET_CONNECTION (MDEV-10340)
- "fast mutexes" have been removed. These aren't faster than normal mutexes, and have been disabled by default for years (MDEV-8111)
- Old GPL client library is gone; now MariaDB Server comes with the LGPL Connector/C client library (MDEV-9055)
- MariaDB is no longer compiled with jemalloc
- TokuDB is now a separate package, not part of the server RPM (because TokuDB still needs jemalloc).
- Upgrading to a new major release no longer requires setting innodb_fast_shutdown to
0
. Omitting it can make the upgrade process a lot faster. (MDEV-12289)
Security Vulnerabilities Fixed in MariaDB 10.2
For a complete list of security vulnerabilities (CVEs) fixed across all versions of MariaDB, see the Security Vulnerabilities Fixed in MariaDB page.
- CVE-2022-32088: MariaDB 10.2.44
- CVE-2022-32083: MariaDB 10.2.44
- CVE-2022-31624: MariaDB 10.2.41
- CVE-2022-27445: MariaDB 10.2.44
- CVE-2022-27387: MariaDB 10.2.44
- CVE-2022-27386: MariaDB 10.2.44
- CVE-2022-27384: MariaDB 10.2.44
- CVE-2022-27383: MariaDB 10.2.44
- CVE-2022-27381: MariaDB 10.2.44
- CVE-2022-27380: MariaDB 10.2.44
- CVE-2022-27378: MariaDB 10.2.44
- CVE-2022-27377: MariaDB 10.2.44
- CVE-2022-24052: MariaDB 10.2.42
- CVE-2022-24051: MariaDB 10.2.42
- CVE-2022-24050: MariaDB 10.2.42
- CVE-2022-24048: MariaDB 10.2.42
- CVE-2022-21595: MariaDB 10.2.42
- CVE-2022-21451: MariaDB 10.2.38
- CVE-2022-21427: MariaDB 10.2.44
- CVE-2022-0778: MariaDB 10.2.42
- CVE-2021-46669: MariaDB 10.2.44
- CVE-2021-46668: MariaDB 10.2.43
- CVE-2021-46667: MariaDB 10.2.41
- CVE-2021-46666: MariaDB 10.2.39
- CVE-2021-46665: MariaDB 10.2.43
- CVE-2021-46664: MariaDB 10.2.43
- CVE-2021-46663: MariaDB 10.2.43
- CVE-2021-46661: MariaDB 10.2.43
- CVE-2021-46659: MariaDB 10.2.42
- CVE-2021-46658: MariaDB 10.2.40
- CVE-2021-46657: MariaDB 10.2.39
- CVE-2021-35604: MariaDB 10.2.41
- CVE-2021-27928: MariaDB 10.2.37
- CVE-2021-2389: MariaDB 10.2.40
- CVE-2021-2372: MariaDB 10.2.40
- CVE-2021-2194: MariaDB 10.2.35
- CVE-2021-2180: MariaDB 10.2.38
- CVE-2021-2174: MariaDB 10.2.18
- CVE-2021-2166: MariaDB 10.2.38
- CVE-2021-2154: MariaDB 10.2.38
- CVE-2021-2144: MariaDB 10.2.28
- CVE-2021-2022: MariaDB 10.2.33
- CVE-2021-2011: MariaDB 10.2.15
- CVE-2021-2007: MariaDB 10.2.26
- CVE-2020-2922: MariaDB 10.2.26
- CVE-2020-28912: MariaDB 10.2.35
- CVE-2020-2814: MariaDB 10.2.32
- CVE-2020-2812: MariaDB 10.2.32
- CVE-2020-2780: MariaDB 10.2.28
- CVE-2020-2760: MariaDB 10.2.32
- CVE-2020-2752: MariaDB 10.2.32
- CVE-2020-2574: MariaDB 10.2.31
- CVE-2020-15180: MariaDB 10.2.34
- CVE-2020-14812: MariaDB 10.2.35
- CVE-2020-14789: MariaDB 10.2.35
- CVE-2020-14776: MariaDB 10.2.35
- CVE-2020-14765: MariaDB 10.2.35
- CVE-2020-14550: MariaDB 10.2.15
- CVE-2020-13249: MariaDB 10.2.32
- CVE-2019-2974: MariaDB 10.2.28
- CVE-2019-2938: MariaDB 10.2.28
- CVE-2019-2805: MariaDB 10.2.26
- CVE-2019-2758: MariaDB 10.2.26
- CVE-2019-2740: MariaDB 10.2.26
- CVE-2019-2739: MariaDB 10.2.26
- CVE-2019-2737: MariaDB 10.2.26
- CVE-2019-2628: MariaDB 10.2.24
- CVE-2019-2627: MariaDB 10.2.24
- CVE-2019-2614: MariaDB 10.2.24
- CVE-2019-2537: MariaDB 10.2.22
- CVE-2019-2510: MariaDB 10.2.22
- CVE-2019-2503: MariaDB 10.2.18
- CVE-2019-2455: MariaDB 10.2.15
- CVE-2018-3284: MariaDB 10.2.19
- CVE-2018-3282: MariaDB 10.2.19
- CVE-2018-3277: MariaDB 10.2.19
- CVE-2018-3251: MariaDB 10.2.19
- CVE-2018-3200: MariaDB 10.2.19
- CVE-2018-3185: MariaDB 10.2.19
- CVE-2018-3174: MariaDB 10.2.19
- CVE-2018-3173: MariaDB 10.2.19
- CVE-2018-3162: MariaDB 10.2.19
- CVE-2018-3156: MariaDB 10.2.19
- CVE-2018-3143: MariaDB 10.2.19
- CVE-2018-3133: MariaDB 10.2.12
- CVE-2018-3081: MariaDB 10.2.15
- CVE-2018-3066: MariaDB 10.2.17
- CVE-2018-3064: MariaDB 10.2.17
- CVE-2018-3063: MariaDB 10.2.17
- CVE-2018-3060: MariaDB 10.2.17
- CVE-2018-3058: MariaDB 10.2.17
- CVE-2018-2819: MariaDB 10.2.15
- CVE-2018-2817: MariaDB 10.2.15
- CVE-2018-2813: MariaDB 10.2.15
- CVE-2018-2810: MariaDB 10.2.15
- CVE-2018-2787: MariaDB 10.2.15
- CVE-2018-2786: MariaDB 10.2.15
- CVE-2018-2784: MariaDB 10.2.15
- CVE-2018-2782: MariaDB 10.2.15
- CVE-2018-2781: MariaDB 10.2.15
- CVE-2018-2777: MariaDB 10.2.15
- CVE-2018-2771: MariaDB 10.2.15
- CVE-2018-2767: MariaDB 10.2.15
- CVE-2018-2766: MariaDB 10.2.15
- CVE-2018-2761: MariaDB 10.2.15
- CVE-2018-2759: MariaDB 10.2.15
- CVE-2018-2755: MariaDB 10.2.15
- CVE-2018-2668: MariaDB 10.2.13
- CVE-2018-2665: MariaDB 10.2.13
- CVE-2018-2640: MariaDB 10.2.13
- CVE-2018-2622: MariaDB 10.2.13
- CVE-2018-2612: MariaDB 10.2.13
- CVE-2018-2562: MariaDB 10.2.13
- CVE-2017-3653: MariaDB 10.2.8
- CVE-2017-3641: MariaDB 10.2.8
- CVE-2017-3636: MariaDB 10.2.8
- CVE-2017-3464: MariaDB 10.2.6
- CVE-2017-3456: MariaDB 10.2.6
- CVE-2017-3453: MariaDB 10.2.6
- CVE-2017-3313: MariaDB 10.2.5
- CVE-2017-3309: MariaDB 10.2.6
- CVE-2017-3308: MariaDB 10.2.6
- CVE-2017-3302: MariaDB 10.2.5
- CVE-2017-3257: MariaDB 10.2.8
- CVE-2017-15365: MariaDB 10.2.10
- CVE-2017-10384: MariaDB 10.2.8
- CVE-2017-10379: MariaDB 10.2.8
- CVE-2017-10378: MariaDB 10.2.10
- CVE-2017-10365: MariaDB 10.2.8
- CVE-2017-10320: MariaDB 10.2.8
- CVE-2017-10286: MariaDB 10.2.8
- CVE-2017-10268: MariaDB 10.2.10
- CVE-2016-9843: MariaDB 10.2.19
Comparison with MySQL
- Incompatibilities and Feature Differences Between MariaDB 10.2 and MySQL 5.7
- System Variable Differences Between MariaDB 10.2 and MySQL 5.7
- Function Differences Between MariaDB 10.2 and MySQL 5.7
- System Variable Differences Between MariaDB 10.2 and MySQL 5.6
- Function Differences Between MariaDB 10.2 and MySQL 5.6
List of All MariaDB 10.2 Releases
See Also
- Getting, Installing, and Upgrading MariaDB
- Plans for 10.x for features under consideration
- 10.2 Features/fixes by vote (JIRA)