MySQL Operations — Trivia & Interesting Facts¶
Surprising, historical, and little-known facts about MySQL operations.
MySQL was named after co-founder Monty Widenius's daughter, My¶
Michael "Monty" Widenius and David Axmark created MySQL in 1995 in Sweden. Monty named it after his daughter My. When he later forked MySQL to create MariaDB, he named it after his younger daughter Maria. His third database project, MaxDB (originally SAP DB), does not follow the naming pattern.
MySQL was acquired three times in 10 years for increasing billions¶
MySQL AB was acquired by Sun Microsystems in 2008 for $1 billion, then Sun was acquired by Oracle in 2010 for $7.4 billion. The MySQL community was so alarmed about Oracle's stewardship that Monty Widenius launched a "Save MySQL" campaign and created MariaDB as a fork. Despite fears, Oracle continued active MySQL development.
InnoDB was not MySQL's default storage engine until version 5.5 in 2010¶
For the first 15 years of MySQL's existence, the default storage engine was MyISAM, which did not support transactions, row-level locking, or foreign keys. InnoDB existed since 2001 but was an optional plugin. The switch to InnoDB as the default in MySQL 5.5 (December 2010) was one of the most consequential changes in MySQL history.
Facebook ran one of the largest MySQL deployments ever with thousands of servers¶
Facebook's MySQL deployment, which powered the core social graph, grew to thousands of database servers handling billions of queries per day. Rather than migrating to a different database, Facebook invested in custom tooling: they built TAO (a graph API layer), automated failover tools, and contributed MyRocks — a RocksDB-based storage engine that reduced storage requirements by 50%.
The pt-online-schema-change tool exists because ALTER TABLE locks the entire table¶
In older MySQL versions, running ALTER TABLE on a large table would lock it for hours or days, making the table completely unavailable. Percona created pt-online-schema-change to work around this by creating a shadow table, copying data in chunks, and swapping tables atomically. This tool became so essential that MySQL eventually added online DDL capabilities natively in 5.6 (2013).
MySQL's query cache was removed in version 8.0 because it caused more problems than it solved¶
MySQL's query cache, which stored complete result sets for SELECT queries, was invalidated every time the underlying table was modified. On write-heavy workloads, the cache invalidation overhead and mutex contention actually made performance worse. After years of recommending it be disabled, Oracle removed the query cache entirely in MySQL 8.0 (2018).
GTID replication solved a 20-year-old operational nightmare¶
Before Global Transaction Identifiers (GTIDs) were introduced in MySQL 5.6 (2013), replication was tracked using binary log file names and byte positions. Changing a replica's master required manually calculating the correct log position — a process so error-prone that it spawned an entire ecosystem of tools. GTIDs assign a unique identifier to each transaction, making replication topology changes trivial.
The MySQL community discovered that the optimizer could choose a full table scan over an index for 30% of rows¶
MySQL's query optimizer historically used a heuristic that if an index scan would read more than approximately 30% of the table's rows, a full table scan would be faster. This was based on assumptions about random I/O on spinning disks. With SSDs, this heuristic is often wrong, and many DBAs override it using FORCE INDEX hints.
Group Replication took 5 years to reach general availability¶
MySQL Group Replication, which provides built-in high availability with automatic failover and conflict detection, was first announced in 2014 and reached general availability in MySQL 5.7.17 (December 2016). The feature uses a Paxos-based consensus protocol and represented Oracle's answer to Galera Cluster, which had offered synchronous replication for MySQL since 2009.