// OSSeva Blog
MigrationMariaDB 10.6 to 10.11 Upgrade Guide, and On to 11.4, 11.8 or 12.3
The short answer
MariaDB 10.6 reached community end of life on 6 July 2026. You can upgrade it to 10.11 in one step, and the MariaDB Foundation states that mariadb-upgrade can upgrade database files from any older release, so 10.6 can also go straight to 11.4, 11.8 or 12.3. The procedure is the same for each: back up, point the package repository at the new series, replace the server packages, clean the option files, start the server and run mariadb-upgrade.
The decision is the target. 10.11 is the smallest change but its community maintenance ends on 16 February 2028. 11.4 runs to 29 May 2029 and 12.3 to 12 June 2029. Going further means picking up more documented changes at once: the optimizer cost model from 11.0, SSL on by default from 11.4, and stricter Repeatable Read behaviour and a new default character set by 11.8. MariaDB does not support downgrading between major versions, so plan the way back before you start.
Upgrade targets
| Target | Community maintenance ends | Latest release | What you take on from 10.6 |
|---|---|---|---|
| 10.11 LTS | 16 February 2028 | 10.11.19 | Removed and renamed options, compression libraries, Spider defaults |
| 11.4 LTS | 29 May 2029 | 11.4.13 | All of the above, plus the 11.0 optimizer cost model, the removed change buffer, SSL by default |
| 11.8 LTS | 4 June 2028 | 11.8.9 | All of the above, plus stricter Repeatable Read, utf8mb4 default, system-versioned table rewrite |
| 12.3 LTS | 12 June 2029 | 12.3.3 | All of the above, plus new reserved words and three removed options |
11.8 ends before 11.4 because, from 11.8, the Foundation publishes community binaries for three years instead of five. For one move that lasts, 11.4 and 12.3 are the targets that make sense; 10.11 suits estates that want the smallest change now and will move again before 2028. The dates are on the MariaDB 10.6 end of life and MariaDB 10.11 end of life pages, and every line is on the MariaDB end-of-life chart.
Pre-upgrade checklist
- A full physical backup with
mariadb-backup, which MariaDB recommends, plus a logical dump of themysqlschema, restored once on a spare host to prove it works. - Every option file collected:
/etc/mysql/,/etc/my.cnf,/etc/my.cnf.d/and any systemd drop-ins. - The InnoDB and Mroonga compression algorithms in use, and whether the libraries are installed for the new packages.
- A list of system-versioned tables and their row counts if the target is 11.8 or later.
- Slow-query samples and
EXPLAINoutput for the queries that matter, if the target is 11.4 or later. - Every client, script and replica that connects without TLS, if the target is 11.4 or later.
- For Galera, the wsrep provider version on each node and a
gcache.sizelarge enough to avoid a full state transfer during the rolling upgrade.
Breaking changes from 10.6 to 10.11
MariaDB describes most 10.6 upgrades as painless. The documented items:
- Removed options.
innodb_log_write_ahead_size(the physical block size is now detected),innodb_version, andwsrep_replicate_myisamandwsrep_strict_ddl, both replaced bywsrep_mode. Remove them from option files; an option the server no longer recognises can stop it from starting. - Compression. InnoDB or Mroonga tables compressed with anything other than zlib are unreadable on 10.11 until the matching compression library package is installed.
- Changed defaults.
innodb_buffer_pool_chunk_sizeis now sized automatically instead of 128 MiB, and most Spider engine variables changed from -1 to explicit values. - Deprecated.
keep_files_on_create, because MariaDB now deletes orphan files itself.
Find them before the change:
grep -rnE "innodb_log_write_ahead_size|innodb_version|wsrep_replicate_myisam|wsrep_strict_ddl|keep_files_on_create" \
/etc/mysql /etc/my.cnf /etc/my.cnf.d 2>/dev/null
SHOW GLOBAL VARIABLES LIKE 'innodb_compression_algorithm';
SELECT table_schema, table_name, create_options
FROM information_schema.tables
WHERE create_options LIKE '%page_compressed%';
Further changes on the way to 11.4
- Optimizer cost model. MariaDB 11.0 introduced a new cost model, and the
optimizer_switchdefaults differ between 10.11 and 11.4. Plan changes only show up when you compare plans. CaptureEXPLAINfor your critical queries on 10.6 and compare on the target. - InnoDB change buffer removed. Gone since 11.0, along with
innodb_change_bufferingandinnodb_change_buffer_max_size. Remove both from option files. - Removed options.
innodb_defragmentand its five related settings,debug_no_thread_alarm, andold_alter_table, replaced byalter_algorithm. - Changed default.
innodb_purge_batch_sizerises from 300 to 1000. - Deprecated.
tx_isolationandtx_read_only, replaced bytransaction_isolationandtransaction_read_only. - SSL by default. In 11.4 the server enables SSL with no configuration and generates a self-signed certificate if none is provided. Clients now require SSL and verify the server certificate by default, and replicas enable
MASTER_SSL_VERIFY_SERVER_CERTby default. Scripts and tools that connect with an 11.4 client to a server without a trusted certificate can fail;--disable-sslor--disable-ssl-verify-server-certrestores the old client behaviour while certificates are sorted out.
grep -rnE "innodb_change_buffer|innodb_defragment|debug_no_thread_alarm|old_alter_table|tx_isolation|tx_read_only" \
/etc/mysql /etc/my.cnf /etc/my.cnf.d 2>/dev/null
Further changes on the way to 11.8
- Stricter Repeatable Read.
innodb_snapshot_isolationnow defaults to ON. Under Repeatable Read, anUPDATEorDELETEthat touches rows another transaction changed after the snapshot was taken now fails with ERROR 1020 and the transaction is rolled back. Bulk updates and concurrent workloads are the ones MariaDB names. Check the isolation level in use, and make sure the application retries on 1020 or set the variable to OFF until it does. - New default character set. From 11.6 the default is
utf8mb4instead oflatin1, withuca1400_ai_cias the default Unicode collation. Tables created without an explicit character set change, and MariaDB notes implications for replicas running 10.6 or older. If you rely on the old default, setcharacter_set_serverandcollation_serverexplicitly before the upgrade. - System-versioned tables. The
TIMESTAMPrange now runs to 2106. Every row and index in system-versioned tables has to be updated, and MariaDB warns this can take a long time on large tables. Plan the window around it. - Removed for Galera.
wsrep_load_data_splitting.
SELECT @@global.tx_isolation; -- on 10.6; REPEATABLE-READ is the default
SHOW GLOBAL VARIABLES LIKE 'character_set_server';
SELECT table_schema, table_name, table_rows
FROM information_schema.tables
WHERE table_type = 'SYSTEM VERSIONED';
Further changes on the way to 12.3
- Removed options.
big_tables,storage_engine(usedefault_storage_engine) andlarge_page_size. - New reserved words.
CONVERSIONandTO_DATE. Statements that use them as unquoted identifiers fail to parse. - Replication. Upgrading a replica to 12.3.2 reset its
master_use_gtidsetting to the default. 12.3.3 fixes this; use 12.3.3 or later and check the setting after the upgrade either way. - Deprecated. The
MYSQLD_OPTSenvironment variable for the systemd service. Move those options into an option file.
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE LOWER(column_name) IN ('conversion', 'to_date')
OR LOWER(table_name) IN ('conversion', 'to_date');
grep -rnE "^\s*(big[-_]tables|storage[-_]engine|large[-_]page[-_]size)\b|MYSQLD_OPTS" \
/etc/mysql /etc/my.cnf /etc/my.cnf.d /etc/systemd/system 2>/dev/null
Also search stored procedures, views and application SQL for the two new reserved words, since the column check above only covers table definitions.
The upgrade procedure
For a standalone server or a replica, following MariaDB's documented steps, on Debian or Ubuntu:
# 1. Back up and prepare the backup
sudo mariadb-backup --backup --target-dir=/backup/pre-upgrade --user=root
sudo mariadb-backup --prepare --target-dir=/backup/pre-upgrade
# 2. Point the MariaDB APT repository at the new series (10.11, 11.4, 11.8 or 12.3)
# 3. Replace the server packages
sudo systemctl stop mariadb
sudo apt-get remove mariadb-server
sudo apt-get install mariadb-server
# 4. Remove unsupported options from the option files, then start and upgrade
sudo systemctl start mariadb
sudo mariadb-upgrade --verbose
On RHEL and similar systems the package commands are sudo yum remove MariaDB-server and sudo yum install MariaDB-server, after updating the MariaDB YUM repository; on SLES use zypper. mariadb-upgrade makes the system tables in the mysql schema compatible with the new version and marks the existing tables as checked.
With replication, upgrade a replica first, let it replicate from the 10.6 primary under real traffic, then move the primary role to it. On a 11.8 or later replica, watch for the character set note above.
Galera clusters
For 10.6 to 10.11, MariaDB documents two methods: stop every node, upgrade them all and start the cluster again, or a rolling upgrade that relies on incremental state transfer (IST). A rolling upgrade that needs a full state snapshot transfer (SST) does not work for this step, which is why gcache.size matters. On each node in turn:
- Drain it from MaxScale, HAProxy or whichever proxy fronts the cluster.
- Stop MariaDB, remove the old server and Galera wsrep provider packages, and install the new ones.
- Clean the option file. On systemd hosts, raise the service start timeout if the default 90 seconds is not enough.
- Start MariaDB, run
mariadb-upgrade --skip-write-binlog, and wait forwsrep_local_state_commentto show Synced before moving to the next node.
Do not use features of the new version until every node runs it, and do not restart a node that has not been upgraded once the others have, since the Galera protocol version can change. MariaDB publishes a separate Galera page for each LTS step; read the one for your step before skipping a release on a cluster.
Rollback limits
MariaDB does not officially support downgrading between major versions. Its documentation gives three routes, in order of preference:
- Replica on the old version. Keep a 10.6 server replicating from the upgraded primary, then stop writes, promote it and redirect traffic. This only works while the new primary uses nothing the old version cannot read, and it has to be set up before you need it.
- Restore the backup. Install the old version on a clean server, restore the pre-upgrade backup, run
mariadb-upgradeand reconnect the application. Reliable, with more downtime, and every write since the upgrade is lost unless you replay it. - In-place downgrade. Untested by MariaDB and not advised. It is generally only possible if
mariadb-upgradehas not yet run on the new version.
Version details narrow these further. Coming back from 11.0 or later to 10.6 or 10.11 requires innodb_change_buffering=none on the old server. And 10.8 changed the InnoDB redo log format, so 10.11 data files cannot simply be opened by 10.6.
Where OSSeva fits
If some servers cannot move yet, OSSeva for MariaDB ships patched, signed 10.6 Community Server builds as DEB and RPM packages, tarballs and container images. They stay in the 10.6 series, on the same data directory and configuration, so applying one is a normal minor update. OSSeva Assure adds an upgrade plan from 10.x to a current LTS, rehearsed with mariadb-upgrade, and a Galera and replication topology review. OSSeva Operate runs rolling upgrades node by node and patches Critical CVEs (CVSS ≥ 9.0) within 48 hours and High within 7 days. MariaDB sits under the same contract as MySQL, PostgreSQL and the rest of the stack, priced per cluster; book a discovery call for a quote. For the MySQL side of the same estate, see the MySQL 8.0 to 8.4 upgrade guide.
Frequently asked questions
Can I upgrade MariaDB 10.6 directly to 11.4?
Yes. The Foundation states that mariadb-upgrade can upgrade database files from any older release, so there is no need to stop at 10.11. Read the incompatibility notes for each LTS step in between, since they all apply.
Is MariaDB 10.11 an LTS release?
Yes. Its community maintenance runs to 16 February 2028, the earliest end date of the current LTS lines.
Do I need to run mariadb-upgrade after upgrading MariaDB?
Yes. It updates the system tables in the mysql schema for the new version and checks the existing tables. On Galera nodes, run it with --skip-write-binlog.
Can I downgrade from MariaDB 10.11 to 10.6?
Not in a supported way. Restore a pre-upgrade backup, or switch to a 10.6 replica you set up beforehand. An in-place downgrade is untested by MariaDB and the 10.8 redo log change stands in the way.
Why do I get ERROR 1020 after upgrading to MariaDB 11.8?
innodb_snapshot_isolation now defaults to ON, so a Repeatable Read transaction that changes rows modified after its snapshot is rolled back with error 1020. Retry the transaction in the application, or set the variable to OFF as a temporary measure.
Why does the mariadb client fail with an SSL error after upgrading to 11.4?
From 11.4, clients require SSL and verify the server certificate by default. Give the server a certificate the client trusts, or use --disable-ssl-verify-server-cert while you fix the certificates.
Which MariaDB version should I upgrade 10.6 to?
11.4 or 12.3, which are maintained to May and June 2029. 10.11 is the smallest change but ends in February 2028, and 11.8 ends in June 2028.
Tags
Related articles
MongoDB vs MySQL vs PostgreSQL: Data Model, Transactions, Scaling, Licensing and Which to Choose
October 8, 2026MigrationPostgreSQL vs Aurora PostgreSQL vs RDS: Architecture, Billing, Version Support and When to Self-Manage
October 8, 2026MigrationSpring Boot vs Quarkus vs Micronaut: Startup, Native Images, Ecosystem, Support and Which to Choose
October 8, 2026Ready to get your open source under control?
Talk to an OSSeva engineer about CVE coverage, compliance, and migration support for your stack.