At a glance
The number of connection attempts that failed to authenticate or complete a handshake in the last 24 hours, read from theAborted_connectsglobal status counter. A handful per day is background noise (a port scanner, a stale credential in a forgotten script). A spike is a signal: wrong credentials being retried in a loop, network packets being dropped mid-handshake, or a client trippingmax_connect_errorsand getting host-blocked. For a DBA this is an early-warning card, the failures it counts often precede a flood of application errors that have not surfaced yet.
Calculation
The engine samplesAborted_connects on each refresh via SHOW GLOBAL STATUS LIKE 'Aborted_connects'. Because the underlying value is a counter that only ever increases until the server restarts, the card never displays the raw counter. Instead it stores the value with a timestamp and reports:
Uptime reset is detected between samples (the server restarted, so the counter went backwards), the engine treats the post-restart value as the new baseline rather than reporting a negative delta. The per-interval rate shown on the sparkline is each sample’s delta divided by the sampling interval, which is what lets you see when in the 24h window the failures clustered, a single 02:00 spike behaves very differently from a steady all-day trickle.
Worked example
A platform team runs a primary MySQL 8.0 instance behind an application tier of 12 pods plus a handful of batch workers. Snapshot taken on 14 Apr 26 at 09:15.
The trailing-24h figure reads 812 aborted connects, well past the
> 100 threshold, and the card is amber. The shape tells the story: a flat baseline of 2 to 3 every 15 minutes (normal background noise), then a step change at 08:45 to ~280 per interval that has not let up.
The DBA’s read:
- This started at 08:45, not gradually. A step change at a precise time almost always maps to a deploy or a config push. Checking the change log, the 08:43 release rotated the application database password but one batch-worker manifest still carried the old secret.
- The worker is retrying in a tight loop. Each failed connect is a bad-password handshake; the worker’s connection library retries every 200ms with no backoff, generating ~280 failures per 15-minute window.
- The danger is
max_connect_errors. With this volume from a single host, MySQL will block that host once it crossesmax_connect_errors(default 100), at which point even a fixed credential cannot connect until someone runsFLUSH HOSTS(orTRUNCATE performance_schema.host_cacheon 8.0).
- Read the shape, not just the count. “812 in 24h” sounds alarming, but a steady trickle and a sharp step have completely different root causes. The step here points straight at the 08:43 deploy.
- Aborted connects are leading, not lagging. The application error dashboard had not lit up yet because the worker was failing, not user-facing traffic. This card caught it before customers did.
- Know the host-block trap. A credential spike does not just generate noise; once
max_connect_errorstrips, the offending host is locked out until aFLUSH HOSTS, turning a 5-minute fix into a 30-minute incident if nobody knows the command.
Sibling cards
Reconciling against the source
Where to look in MySQL itself:To see why a connect failed, enable the error log withSHOW GLOBAL STATUS LIKE 'Aborted_connects';for the raw counter (since server start, not 24h).SHOW GLOBAL STATUS LIKE 'Aborted_clients';to separate clean-disconnect drops from handshake failures.SELECT * FROM performance_schema.host_cache\Gto see which hosts are accumulating errors and whether any are blocked.SHOW GLOBAL VARIABLES LIKE 'max_connect_errors';to confirm how close a noisy host is to being locked out.
log_error_verbosity = 3; aborted handshakes are logged with the offending host and reason (access denied, lost connection, etc.).
Why our number may legitimately differ from a raw SHOW STATUS:
Managed-service note: On Amazon RDS and Aurora the same counter is exposed as the
AbortedConnects CloudWatch metric (and via SHOW GLOBAL STATUS on the instance). On Google Cloud SQL use the mysql.aborted_connects metric in Cloud Monitoring. These should track the card closely once you align the window to a rolling 24h.
Known limitations / FAQs
What is the difference between Aborted_connects and Aborted_clients?Aborted_connects counts attempts that never finished the handshake: bad password, denied host, TLS failure, timeout before auth. Aborted_clients counts sessions that did connect successfully but then dropped without sending COM_QUIT, usually an application that crashed, a wait_timeout expiry, or a max_allowed_packet violation mid-query. This card tracks the former. If your spike is actually Aborted_clients, look at idle-timeout settings and application connection handling instead.
My count is in the thousands but nothing seems broken. Should I worry?
Look at the shape and the host. A steady, low-rate trickle from many hosts is usually port scanning or a single forgotten script with a stale credential, annoying but benign. A high rate from one host is the dangerous case because it risks tripping max_connect_errors and host-blocking. Check performance_schema.host_cache to find the source.
A host got blocked. How do I unblock it and stop it recurring?
Run FLUSH HOSTS (or TRUNCATE performance_schema.host_cache on MySQL 8.0) to clear the block, then fix the root cause, almost always a stale credential or a health check hitting the SQL port with no valid login. Raising max_connect_errors only masks the problem; fix the offending client.
Could a load-balancer health check be inflating this?
Yes, and it is one of the most common false alarms. A TCP-only health check that opens and immediately closes the SQL port without authenticating can register as an aborted connect. Use a proper MySQL-aware health check (a real login plus a trivial query) or point the probe at a dedicated status endpoint.
Does TLS negotiation failure count here?
Yes. If require_secure_transport is on and a client connects without TLS, or presents an invalid certificate, the handshake fails before authentication and increments Aborted_connects. After enabling enforced TLS, watch this card for clients that have not been updated to connect securely.
The card reset to a low number after a failover. Is that a problem?
No, that is expected. A failover or restart starts mysqld fresh, zeroing the counter, so the trailing-24h delta rebaselines. Cross-reference Instance Uptime; if uptime is small, a low abort count simply reflects the short window since restart.
Can I change the > 100 threshold?
Yes. The threshold is configurable per profile in the Alert Rules tab. A busy multi-tenant instance with thousands of legitimate clients may have a higher noise floor; set the threshold above your normal baseline so the card only fires on genuine spikes.