MariaDB and Percona

MariaDB and Percona Server as Drop-In Alternatives

Both speak MySQL 524 's protocol, so PHP's mysqli and PDO connect unchanged. MariaDB 3,681 , a fork led by MySQL's original author, has its own version line: 12.3 and 11.8 are the newest long-term series (community support to June 2029 and June 2028). Percona Server for MySQL 1,275 tracks Oracle's releases: 9.7.1-1 (5 August 2026) is MySQL 9.7.1 plus free versions of Enterprise-only features such as a thread pool, the audit log filter, data masking and the MyRocks 2,574 engine. Run one script on both (containers mariadb:11.8 on port 3318 and percona/percona-server:9.7 on 3418, started as in Running MySQL in Docker):

One script, two MySQL-compatible serversShell
cat > compat.sql <<'SQL'
CREATE DATABASE shop;
USE shop;
CREATE TABLE t (id INT PRIMARY KEY, doc JSON);
INSERT INTO t VALUES (1, '{"format": "ebook"}');
SELECT VERSION(), DATA_TYPE FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'doc';
SELECT doc->>'$.format' FROM t;
DELETE FROM t WHERE id = 1 RETURNING id;
SQL
for c in mariadb118:mariadb percona97:mysql; do
  docker exec -i -e MYSQL_PWD=secret ${c%:*} ${c#*:} -uroot -Ns -n --force < compat.sql 2>&1 \
    | sed 's/: You have an error.* near/: near/; s/\t/ /g'
done
Output
11.8.9-MariaDB-ubu2404 longtext
--------------
SELECT doc->>'$.format' FROM t
--------------
ERROR 1064 (42000) at line 6: near '>>'$.format' FROM t' at line 1
1
9.7.1-1 json
ebook
ERROR 1064 (42000) at line 7: near 'RETURNING id' at line 1

Percona behaved exactly like MySQL 9.7. MariaDB stores JSON as checked LONGTEXT and rejects ->> (use JSON_UNQUOTE(JSON_EXTRACT(...))), but offers DELETE ... RETURNING, sequences and system-versioned tables. Its GTIDs, VECTOR functions and default collation differ too: moving to MariaDB is a migration, not a package swap. Percona's image loads component_percona_telemetry, which sends usage data daily; add percona_telemetry_disable=1 under [mysqld] to turn it off.