Case study · Cloud Migration
Migrating Mautic 5.2.9 to 7.1.2 across two majors, with 45,522 contacts live
Our own marketing automation platform had sat two major versions behind for the better part of a year. We moved it, in production, and published what went wrong on the way.
Work carried out on our own production systems. Published 2026-07-09.
- Versions crossed
- 5.2.9 → 7.1.2
- Contacts migrated
- 45,522
- Doctrine migrations run
- 90, cleanly
- Data corruption
- None
The situation
- Mautic 5.2.9 running in Docker on a Linode 4GB instance with MariaDB 10.6 in a sidecar container.
- 45,522 contacts, 51 forms, 24 campaigns and 91 email templates in live use — the platform could not simply be switched off.
- Two major versions behind, which Mautic’s in-app updater does not reliably cross.
What we did
- Stood up a fresh 7.1.2 stack on new volumes rather than upgrading in place, so the running instance stayed untouched.
- Bulk-imported contacts from a CSV export while the old instance kept serving.
- When the fresh install was accidentally overwritten, ran the direct Doctrine migration path — the one everyone advises against — rather than restarting from scratch.
Outcome
- Ninety Doctrine migrations executed cleanly across two major versions with no data corruption.
- One silent NULL landmine surfaced during the run and was fixed with a single line of SQL.
- The direct Doctrine path succeeded precisely where the in-app updater fails, which is now our documented route for two-major upgrades.
What it cost us to learn
A `mysqldump` command written with the `--databases` flag silently embeds DROP DATABASE, CREATE DATABASE and USE at the top of the dump file. Loading that dump into a side database to "inspect it safely" therefore dropped and overwrote the live one. The flag looks harmless and the command reports success. We publish this because it cost us thirty minutes and it will cost someone else considerably more.
Read the full technical write-up →
Want this done to your systems?
Start with cloud migration, or just tell us what is worrying you.
Get a Quote