MySQL
Section • Database Strategy

MySQL

MySQL and MariaDB articles: binary log, Galera Cluster, Group Replication, backup with mysqldump/mydumper, authentication, GRANT and pre-upgrade assessment.

8 articles published in this section

I have seen MySQL servers with 64GB of RAM and innodb_buffer_pool_size left at 128MB — “because it is the default and we did not touch anything”. I have seen MyISAM tables still in production in 2026 because “we did not have time to convert them”, with table-level locks that froze entire applications during backups. I have seen master-slave replicas lagging by 47,000 seconds with nobody noticing, because nobody was watching Seconds_Behind_Master.

And I have seen the exact opposite: MySQL estates with hundreds of instances run with discipline, where every decision — storage engine, charset, binlog format, topology — is taken consciously and not out of inertia.

The difference has never been the engine. It has always been how seriously someone picked the options.


MySQL is the database that needs no introduction. It is the engine that powered the growth of the web for over twenty years.

Born in 1995 in Sweden, in 2008 it was acquired by Sun Microsystems — and when Oracle completed its acquisition of Sun in 2010, MySQL ended up in the portfolio of the world’s largest commercial database vendor. I was an Oracle employee at the time, and I remember the atmosphere well: on one hand the curiosity of seeing how Oracle would manage such a popular open source product, on the other the concern that MySQL would be sidelined in favour of the proprietary database.

That concern drove Michael “Monty” Widenius — MySQL’s original creator — to fork the project in 2009, giving birth to MariaDB. A project that shares its roots with MySQL but has taken its own path on storage engines, optimizer and advanced features.

History has shown that both projects have survived and evolved. But in the daily reality of those running real production systems, MySQL is still the one that looks simple and instead hides critical choices:

  • mixed storage engines out of old habit — MyISAM, InnoDB and sometimes Archive coexisting without a reason
  • wrong charset (latin1 instead of utf8mb4) quietly corrupting multilingual data
  • binlog in STATEMENT format causing inconsistencies in replication for non-deterministic queries
  • permissive sql_mode for “backwards compatibility” — queries returning different results every run
  • replication without active monitoring — and when the master goes down, the slave is three days behind

🔧 The choices that make the difference in production #

There are five decisions that — done well — keep MySQL running for ten years, and — done poorly — force you to rewrite half the application. They are trivial to list, painfully hard to change later.

ChoiceWhat it decidesHow I set it
Storage engineLock granularity, transactions, crash recoveryInnoDB always, except for rare justified cases — MyISAM is legacy, not a choice
innodb_buffer_pool_sizeMemory for InnoDB data and index cache70-80% of RAM on a dedicated server, anything less is wasted for the engine
Charset and collationCharacter encoding and sortingutf8mb4 + utf8mb4_0900_ai_ci — no utf8 (which in MySQL is incomplete)
binlog_formatFormat of binary logs for replication and PITRROW almost always — STATEMENT causes replication issues with non-deterministic queries
sql_modeWhich errors MySQL tolerates and which notStrict mode on, ONLY_FULL_GROUP_BY included — a permissive MySQL is a MySQL that lies to you

Five choices. Thirty minutes of discussion. Years of operation without major incidents.


📚 What I talk about here #

Real stories and operational decisions on MySQL and MariaDB in production. Security, user and privilege management, InnoDB tuning, master-slave replication and InnoDB Cluster, upgrade and migration strategies, consistent backups with mysqldump and physical tools, real differences between MySQL and MariaDB that only show up under load.

No generic recipes. Just what I have seen work in real environments — postal, telco, finance, public administration — where MySQL runs estates of instances in parallel and cannot afford choices made “out of inertia”.


Using MySQL is not just about running queries.

It is about understanding how the engine manages connections, privileges and resources under real load — and recognising that the apparent simplicity is, often, the most expensive trap.

Latest articles

MySQL
Featured

ENUM in MySQL: when it makes your day, and when it ruins your week

MySQL ENUM vs CHECK constraint vs lookup table: three ways to model an enumeration. Pros, cons and real case of a shipment tracking system.

3 June 2026 12 min
More articles in this section
Before upgrading MySQL: the numbers the customer actually asks for — and how to find them
MySQL

Before upgrading MySQL: the numbers the customer actually asks for — and how to find them

MySQL 8.0 pre-upgrade assessment: measuring sizes, growth, backup and restore times with information_schema. Real numbers to plan maintenance window.

mysqldump vs mysqlpump vs mydumper: the backup that keeps you up at night
MySQL

mysqldump vs mysqlpump vs mydumper: the backup that keeps you up at night

MySQL backup tools compared: mysqldump vs mydumper vs mysqlpump on a 60 GB database. Real dump and restore times, parallelism and architectural choice.

Binary logs in MySQL: what they are, how to manage them, and when you can delete them
MySQL

Binary logs in MySQL: what they are, how to manage them, and when you can delete them

MySQL binary log: management, retention and point-in-time recovery. Real case of a server with disk at 95% and 180 GB of binlogs in six months.

Galera Cluster with 3 nodes: how I solved a MySQL availability issue
MySQL

Galera Cluster with 3 nodes: how I solved a MySQL availability issue

3-node MySQL Galera Cluster for high availability: synchronous replication, quorum, SST/IST. Full configuration against single point of failure.

MySQL Users: Why 'mario' and 'mario'@'localhost' Are Not the Same Person
MySQL

MySQL Users: Why 'mario' and 'mario'@'localhost' Are Not the Same Person

MySQL users and hosts: 'mario' and 'mario'@'localhost' are different entities. MySQL/MariaDB authentication model, common mistakes and correct GRANTs.

MySQL Multi-Instance: A Ticket, a CSV and the secure-file-priv Wall
MySQL

MySQL Multi-Instance: A Ticket, a CSV and the secure-file-priv Wall

MySQL multi-instance on Linux: exporting a CSV with INTO OUTFILE blocked by secure-file-priv. Unix socket connection and shell workaround real case.

Full disk on a MySQL cluster: binary logs, Group Replication, and a migration that leaves no room for mistakes
MySQL

Full disk on a MySQL cluster: binary logs, Group Replication, and a migration that leaves no room for mistakes

3-node MySQL Group Replication: migrating binary logs to a dedicated volume without losing quorum. Real case with filesystem at 92%.

Explore other sections