Archive
MySQL
Schema, indexes, query plans, and version upgrades.
-
MySQL 8.4 LTS, and the authentication plugin that ended the upgrade
The 8.0 to 8.4 in-place upgrade cost us 6 minutes 40 seconds of downtime. The disabled mysql_native_password plugin cost six hours. Notes on the LTS model, the removed options, and the pre-flight query I should have run.
-
The MySQL 8 upgrade: collations, sql_mode, and the CTEs we finally used
Moving a seven-year-old schema from 5.7 to 8.0 took a weekend. Two startup failures came from my.cnf, ONLY_FULL_GROUP_BY broke three reports, and a collation mismatch on one join reached production.
-
MySQL 5.7 JSON columns, and the regrets that followed
A support lookup read 2.4 million rows to return 41 of them, because the predicate sat inside a JSON document. The generated column fix, the two details that broke it first, and what I keep out of documents now.
-
EXPLAIN, and the report that took forty seconds
A finance report on the ERP took 41 seconds against 1.9 million invoices. The slow query log, EXPLAIN, one index that was never used, and the composite index that finally worked on MySQL 5.5.