ProxySQL's defaults get you a working read/write split in an afternoon, then hand you a set of silent failure modes that only surface under real load or on the next restart.
The defaults work. Until an ORM starts sending SET NAMES utf8mb4 on every connection, multiplexing quietly collapses to 1:1, and the connection pooling you deployed ProxySQL for simply stops happening. Until a replica drifts past max_replication_lag and the monitor SHUNS it, then restores it, then shuns it again on a jittery network. Until a query rule missing apply=1 routes a write to a read-only replica and returns 1290 - The MySQL server is running with the --read-only option — or worse, the replica is not read-only and the write silently diverges. Until you fix a rule in RUNTIME during an incident, forget SAVE TO DISK, and lose the fix on the next restart.
These guides are written for engineers who already run ProxySQL, not for people choosing a proxy. The goal is the mental model of how the proxy actually behaves under load, the failure patterns that keep recurring, the monitoring story that catches them before they page anyone, and the runbooks you wish someone had handed you before your last incident. ProxySQL speaks the MySQL wire protocol only — none of this applies to PostgreSQL.