MySQL features missing in MariaDB Server. Here's an overview from the New York developer's Unconference in February 2018. This is primarily aimed at the developers, to decide what goes into MariaDB 10.4, as opposed to users.
High level comparisons are made between MySQL 5.6/5.7 with of course MySQL 8.0 as well. Here's to ensuring MariaDB Server 10/310.4 has more "Drop-in" compatibility.
Handwritten Text Recognition for manuscripts and early printed texts
MySQL features missing in MariaDB Server
1. MySQL Features Missing in MariaDB Server
Colin Charles, Chief Evangelist, Percona Inc.
colin.charles@percona.com / byte@bytebot.net
http://bytebot.net/blog/ | @bytebot on Twitter
MariaDB Developers Unconference, New York
25 February 2018
2. Why this matters
• MariaDB Server is the “default” MySQL in pretty much every Linux
distribution except Ubuntu (shipping MySQL 5.7)
• MariaDB isn’t MySQL - there are also many cloud providers that
have an option for MariaDB
• Amazon Web Services (AWS) RDS MariaDB, Microsoft Azure,
Rackspace Cloud
4. Releases MariaDB MySQL
5.1: 1 Feb 2010 5.1: 14 Nov 2008
5.2: 10 Nov 2010
5.3: 29 Feb 2012
5.5: 11 Apr 2012 5.5: 3 Dec 2010
5.6: 5 Feb 2013
10.0: 31 Mar 2014
10.1: 17 Oct 2015
5.7: 21 Oct 2015
10.2: 23 May 2017
5. What’s documented?
• https://mariadb.com/kb/en/the-mariadb-library/mariadb-vs-mysql-
compatibility/
• Tracker bug: https://jira.mariadb.org/browse/MDEV-10392
• https://mariadb.com/kb/en/library/system-variable-differences-
between-mariadb-and-mysql/
• https://mariadb.com/kb/en/library/incompatibilities-and-feature-
differences-between-mariadb-102-and-mysql-57/
• whatever is not included (“incompatibilities”), what are plans to
include it?
8. Replication
• Default binlog format is now MIXED
• ROW in MySQL
• Default replicate_annotate_row_events is ON
• OFF in MySQL
• Multi-source replication in MySQL is limited to 256 channels; in MariaDB
Server it is 64, but seemingly expands when needed, and there is no upper
limit (really?)
• GTIDs in the OK packet - ProxySQL uses —session-track-gtids for GTID
consistent reads (see: https://fosdem.org/2018/schedule/event/
proxysql_gtid/)
9. Synchronous replication
• MySQL Group Replication in MySQL / Percona Server
• Galera Cluster for MySQL / Percona Server / MariaDB Server
• Group Replication + MySQL Router + mysqlsh = MySQL InnoDB
Cluster
• Microsoft Windows support? (group replication works there)
11. JSON - MySQL 8 has syntax additions
• 5.7 has a binary data type, MariaDB chooses not to implement it this
way, choosing to not violate the SQL standard - https://
jira.mariadb.org/browse/MDEV-9144
• claims faster, but no benchmarks - https://jira.mariadb.org/browse/
MDEV-13777
12. X Protocol
• MariaDB Server has no support for the MySQL X Protocol
• This means you cannot use mysqlsh to access MariaDB Server either
• mysqlsh to be released as part of MySQL 8; supports JavaScript,
Python interfaces to MySQL
• Using MySQL as a Document Store? https://dev.mysql.com/doc/
refman/5.7/en/document-store.html
• also requires connector support: Connector/J, Connector/Node.js,
Connector/Net, Connector/Python, Connector/C++
• admin interface to mysqlsh (e.g. to control InnoDB cluster)
13. Encryption
• MySQL 5.7 and MariaDB Server 10.1+ implement encryption differently (one is fully
tablespace encryption, the other is based on the Google patch for tablespace encryption in
addition to having table encryption)
• One does not encrypt logs, the other does
• MySQL 8 has redo log, undo log encryption, but not binary log encryption
• Percona Server 5.7.20-18 has binary log encryption + HashiCorp Vault keyring plugin
• MySQL implementation works fully with Percona XtraDB Cluster
• MariaDB Galera Cluster gcache is unencrypted - https://jira.mariadb.org/browse/
MDEV-9639
• mysqlbinlog cannot read encrypted binary logs - https://jira.mariadb.org/browse/
MDEV-8813
• also SSL support now in mysqlbinlog
14. CJK language support
• Add “ngram” support to MariaDB Server: https://jira.mariadb.org/
browse/MDEV-10267
• Add “MeCab” support to MariaDB Server: https://jira.mariadb.org/
browse/MDEV-10268
• gb18030 support: https://jira.mariadb.org/browse/MDEV-7495
15. PERFORMANCE_SCHEMA
• No sys schema - https://jira.mariadb.org/browse/MDEV-9077
• No new PERFORMANCE_SCHEMA instrumentation from 5.7 -
https://jira.mariadb.org/browse/MDEV-6114
• e.g. 52 rows in set (0.00 sec) vs. 87 rows in set (0.00 sec)
• current mix from 5.6.17/5.6.24/5.6.26
• It can’t be turned on dynamically! (so maybe consider leaving it
turned on once 5.7 or 8.0 one is merged?)
16. Optimiser
• Optimiser trace: https://jira.mariadb.org/browse/MDEV-6111
• Optimizer hints - https://jira.mariadb.org/browse/MDEV-9078
• “cost model” information, also in EXPLAIN FORMAT=JSON
• Server side query rewriting? - https://jira.mariadb.org/browse/
MDEV-5561
• http://mysqlserverteam.com/write-yourself-a-query-rewrite-plugin-
part-1/
17. Other bits
• MariaDB: SHOW EXPLAIN FOR <thread_id>
• MySQL: EXPLAIN FOR CONNECTION <thread_id>
• https://jira.mariadb.org/browse/MDEV-10000 (simple, easy fix)
• MySQL has SUPER READONLY, missing in MariaDB - https://
jira.mariadb.org/browse/MDEV-9458
• Replication crash-safety for non-GTID slaves - https://jira.mariadb.org/
browse/MDEV-8946
• Minimal/NOBLOB Binlog Row Image replication fails when tables from
master have different PK in slave - https://jira.mariadb.org/browse/
MDEV-8398
18. Installation…
• MySQL: https://dev.mysql.com/downloads/repo/yum/ - grab a
package — e.g. mysql57-community-release-el7-9.noarch.rpm
• MariaDB Server: https://downloads.mariadb.org/mariadb/
repositories/ - copy/paste, edit a file, then install
• Percona Server: https://www.percona.com/doc/percona-server/5.7/
installation/yum_repo.html - yum install Percona-Server-server-57
• Think its time proper repository files are provided for ease of
installation
19. Security
• MySQL: sha256_password & MariaDB: ed25519 password plugin
• MySQL 8: caching_sha2_password default instead of
mysql_native_password
• uses caching to address latency @ connect time
• how will MySQL 8 users be migrated to MariaDB Server?
• validate_password is on by default in MySQL 5.7 (not in MariaDB)
• re-written for MySQL 8 infrastructure
• No more test database or anonymous users created on installation
20. mysql.user table changes
• MariaDB Server and MySQL differ here (not just by addition of roles) -
mysql.user.password is just
mysql.user.authentication_string
• Password expiry is coming? https://jira.mariadb.org/browse/MDEV-7597
• Password last changed? Lifetime?
• ACCOUNT LOCK/UNLOCK
• VALIDATE_PASSWORD_STRENGTH() SQL function doesn’t work in
MariaDB Server
• MySQL 8: password history information saved (prevent password reuse)
21.
22. More 5.7
• RENAME INDEX - https://jira.mariadb.org/browse/MDEV-7318
• ALTER TABLE .. RENAME COLUMN also in 8.0 (https://
dev.mysql.com/worklog/task/?id=10761)
• GIS: GeoJSON functions? Geohash functions?
• SELECT ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111
12.22222)’),2);
• SELECT ST_GeoHash(180,0,10), ST_GeoHash(-180,-90,15);
23. Tools
• including new tools like mysql_ssl_rsa_setup ? mysqlpump?
• When merging XtraDB (pre-10.2), why isn’t it complete, with backup
locks? https://jira.mariadb.org/browse/MDEV-5336
• tools that require MySQL GTID don’t work with MariaDB Server (e.g.
mysqlfailover, mysqlrpladmin, MHA, MySQL Router, etc.)
• vitess, started life on just MariaDB Server, but note they support
5.6/5.7 and generally only 10.0
24. Storage Engines
• InnoDB 5.7 is now included in MariaDB Server 10.2 (there is no longer Percona
XtraDB for the first time)
• you need to remove XtraDB related options in my.cnf or the server won’t start
• https://lists.launchpad.net/maria-discuss/msg04708.html
• Is InnoDB fully tested?
• Test cases still need merging - https://jira.mariadb.org/browse/MDEV-13626
• Hangs on startup - https://jira.mariadb.org/browse/MDEV-9843
• BLACKHOLE, FEDERATED (now FederatedX) require you to actually load the plugins
• was a “surprise” - https://jira.mariadb.org/browse/MDEV-11942 (now fixed)
• Status of other engines: OQGRAPH, SphinxSE? Cassandra deprecated
25. MySQL 8 (what MariaDB Server 10.3 will be
compared to?)
• Roles, including ROLES_GRAPHML()
function
• Common Table Expressions
• Window Functions
• Transactional data dictionary + FRM files
obsoleted
• atomic DDLs
• Resource groups - assign threads, control
CPU resources
• InnoDB? Serialized Dictionary Information
(SDI)? “auto-configuration” via
innodb_dedicated_server
• Invisible indexes - https://jira.mariadb.org/
browse/MDEV-7317
• Regex changes - using ICU (full unicode,
multibyte safe) not PCRE like MariaDB Server
• internal temporary tables in TempTable
storage engine
• Error logging rewritten, now you can also get
JSON logs
• Query cache removed
• No more mysql_install_db (use mysqld —
initialize)
• storage engine needs to support
PARTITIONING
26. Open ended…
• How often are upgrades from 5.6/5.7 tested?
• What is the status of community contributions, e.g. HandlerSocket (e.g.
deprecated in Percona Server 5.7)
• status of QA - people don’t like “surprises” when they upgrade point
releases
• e.g. InnoDB slow starts - https://jira.mariadb.org/browse/MDEV-13869 /
https://lists.launchpad.net/maria-discuss/msg04922.html
• status of merges to avoid “merge errors” (e.g. introducing unwanted
fsync()’s that go undetected for quite sometime)