Grimoire is a personal site by Owen Jacobson with essays on databases, version control, Go, deployment and software practice.
HN commenters cite its MySQL essay in arguments that MySQL is flawed, and link its pieces on detached signatures for git.
Nothing hugely complicated. Production Magento, Drupal and WordPress - we managed to outsource the WordPress, so now it's mainly now Magento, and that's much more horrible in itself than MySQL - one in-house tool that used to use it, some MediaWiki, and one really badly-behaved in-house tool that picked MySQL without asking us first.
Mostly we were bitten by long-running MySQL sillinesses:
* its strange idea of UTF-8 (we call the MySQL version WTF-8 - see http://geoff.greer.fm/2012/08/12/character-encoding-bugs-are-%F0%9D%92%9Cwesome/ )
* InnoDB's galloping disk consumption
* the Debian/Ubuntu package's default stupid behaviour of putting all the InnoDB databases into a single file ibdata1 (I hope this is a Debianism and not something that's default in upstream)
* ibdata1 never shrinking ever (bug #1341, open since 2003)
* binary replication issues (e.g. bug #68892, which is fixed but that doesn't help older or distro versions)
* several others I've mercifully obliterated the braincells that were holding them. But all of these were long-known issues that will never be fixed for one reason or another (backward compatibility with past mistakes, or they just can't be bothered).
Here's a good crib: http://grimoire.ca/mysql/choose-something-else
tl;dr MySQL: the Comic Sans of databases. Except Comic Sans has use cases.
Sure, but adding too many sources will make me seem snide or bitter.
But as an example:
https://www.youtube.com/watch?v=emgJtr9tIME
MySQL vs PostgreSQL - Why you shouldn't use MySQL
https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_autocommit
http://grimoire.ca/mysql/choose-something-else
https://blog.ionelmc.ro/2014/12/28/terrible-choices-mysql/
the fact that https://dev.mysql.com/doc/refman/5.6/en/mysql-real-escape-string.html has to exist because https://dev.mysql.com/doc/refman/5.6/en/mysql-escape-string.html doesn't work properly. (this is actually blamed on PHP a lot)
My favorite MySQL gotcha is that if you issue a GRANT statement with a typo in the user's name instead giving a "user does not exist" error it simply creates a new user with the misspelled name.
Because MySQL is the PHP of databases. Much like PHP is designed to just carry on truckin' whatever problem it encounters (https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/), MySQL was too. It's easy to slam some data into it and get it back without having to think too hard about what you're actually storing (https://grimoire.ca/mysql/choose-something-else). It's ease of use made it pervasive, much like PHP.
Following on from that, I suspect a lot of large companies use MySQL because they always have, not because it's actually any good. For example, Basecamp used MySQL while I was there, but I never met a single Sysadmin there who would use it over Postgres if they were to start a new project.
MySql is a joke and always has been. I blame a huge majority of the RDBMS hate on the fact that many peoples only experience with a RDBMS was MySql. The issues are numerous, but two of my personal favorites are silent data truncation and allowing 'indeterminate' results with non-aggregate or non-functionally dependent columns in the select[1]. 5.7.5 finally changes the default behavior of the former.
This site lists many of the issues: http://grimoire.ca/mysql/choose-something-else
[1] http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
The design of MySQL has a lot more silent failures, silent coercing of data, and other ways that it attempts to do what it thinks you might mean (because you're an incompetent PHP programmer) instead of what you ask. The obvious example is that SELECT 0 = 'banana' returns 1.
A typical takedown would be the likes of: http://grimoire.ca/mysql/choose-something-else (which also touches storage engine configuration things that are easier to defend against by an experienced organization). Unfortunately this sort of takedown solves very few discussions.
> - synchronous multi-master cluster (Galera, Group Replication)
Which doesn't work, see [1]. What other features of those you listed the authors claim that work, and just don't when you look deeper?
Lot of the big companies are using MySQL as a NoSQL database, and that's not a bad way to use MySQL, but it's a pretty bad relational database, see [2].
[1]: https://aphyr.com/posts/327-call-me-maybe-mariadb-galera-cluster
[2]: https://grimoire.ca/mysql/choose-something-else