I&#x27;ve answered this question once before, and this is what I wrote. MySQL is battle tested and operationally sane to manage at scale; I&#x27;m talking specifically about replication.<p>I&#x27;ve been a DBA for thousands of MySQL hosts in production and just a handful of PostgreSQL clusters, so I&#x27;m not a PostgreSQL expert by any stretch. These PostgreSQL machines were also inherited from a company we acquired, so some of my negative impressions can likely be explained by them being set up poorly, which sadly seems to be the norm.<p>PostgreSQL&#x27;s replication has evolved slowly over the years, and as a result it&#x27;s idiosyncratic, complicated to get right, and hard to generalize about. There aren&#x27;t a lot of great setup guides and tutorials on the subject either.<p>Postgres replication works by shipping WAL (transaction&#x2F;redo) logs to slaves, and the slaves are in a constant state of DB recovery. Streaming replication does so as writes happen, and file based log shipping copies the logs when the 16MB segment is complete. Ours were set up to use streaming replication, without having a separate file-based archive log host to use to fetch older logs. Whenever the write load became too much and the slaves could no longer keep up with the master WAL logs on the master would expire and replication would break entirely, requiring you to rebuild all your slaves from backup. This was my introduction to PG replication. WAL logs were also applied without checksums or verification which corrupted the entire replication chain, and as I remember we didn&#x27;t discover this until the corrupt pages got hit by a query. Software upgrades with PG seemed to be a huge pain as well, we could never figure out how long they were going to take, and even if the on-disk formats didn&#x27;t change, somehow all the cardinality stats on our tables disappeared, and all our query plans went to shit until we ran some process to rebuild them, which took days.<p>Operationally there were some things that made our team angry. We couldn&#x27;t figure out how to reparent a slave without completely re-cloning it from the new parent, even though it was completely up to date from the authoritative master at the time of the reparenting. Also, do you really have to take down the entire cluster to change max connections on a slave? Many such settings seemed to not be dynamic and must remain in sync across the entire chain. One of the things people seem to love about PG is how correct and proper it is respecting the sanctity of your data. As an ops person I&#x27;d much rather deal with slightly inconsistent replicas (common in MySQL) than have to fight with how rigid PG is.