At a glance
The number of client connections that MariaDB started to accept but then aborted during the last 24 hours. This is the server’sAborted_connectsstatus counter, sampled and differenced over the window. A connection is “aborted” before the client ever runs a query: the handshake failed, the credentials were wrong, the client gave up mid-authentication, ormax_connect_errorstripped. For a DBA, a steady trickle is normal background noise (port scanners, health-check probes, the odd typo). A spike is a signal: a misconfigured application node, a credential rotation that did not propagate, or an early sign that something is hammering the auth path.
Calculation
MariaDB maintains a monotonic global counter,Aborted_connects, that increments every time a connection attempt fails before authentication completes. It is reset only on server restart (or an explicit FLUSH STATUS). Because the raw counter only ever grows, the card does not display its absolute value; it displays the difference between the counter now and the counter 24 hours ago.
max_connect_errors, and init_connect statement failures.
Worked example
A platform team runs a 3-node MariaDB 10.6 cluster behind an application tier of 12 web nodes. Snapshot taken on 14 Apr 26 at 09:00 BST.
130 over 24 hours is roughly one every 11 minutes, which has tripped the amber threshold. The DBA’s first move is to find where the failures come from, because the counter itself does not record the offending host. Two native paths:
10.2.4.17) with COUNT_AUTHENTICATION_ERRORS = 118. The team checks that node: it was redeployed at 02:00 with a stale Kubernetes secret after a password rotation. The application retried its connection pool every 10 seconds, each retry adding one aborted connect.
Three takeaways:
- The count is a symptom; the host cache is the diagnosis. Always pair the headline with
performance_schema.host_cache(or the olderSHOW STATUS LIKE 'Connection_errors%') to attribute the failures. - A retrying connection pool is a multiplier. A single bad credential on one node can generate hundreds of aborted connects per day because pools reconnect aggressively. Fix the source, do not just raise the threshold.
- Watch for
max_connect_errorslockout. Once a host accumulatesmax_connect_errorsfailures (default 100), MariaDB blocks it entirely withHost '...' is blocked. At that point the application sees hard connection failures, not slow ones. RunFLUSH HOSTS(orFLUSH PRIVILEGES) after fixing the credential to clear the block.
Sibling cards
Reconciling against the source
Where to look in MariaDB’s own tooling:Why our number may legitimately differ from a rawSHOW GLOBAL STATUS LIKE 'Aborted_connects';for the raw monotonic counter.SELECT * FROM performance_schema.host_cache;to attribute failures to specific client hosts.SHOW GLOBAL STATUS LIKE 'Connection_errors_%';for the breakdown by failure reason (max connections, accept, internal, peer address, select, tcpwrap).
SHOW STATUS:
On managed services: Amazon RDS / Aurora for MariaDB exposes
Aborted_connects via the same SHOW GLOBAL STATUS and via Enhanced Monitoring; SkySQL and Azure Database for MariaDB surface it through their own metrics consoles. The number should agree once you align the window. For per-host attribution you still need performance_schema.host_cache, which the managed consoles do not summarise.
Known limitations / FAQs
Q: What is the difference between Aborted_connects and Aborted_clients?Aborted_connects counts attempts that failed before authentication completed (bad password, handshake timeout, TLS failure, blocked host). Aborted_clients counts sessions that authenticated successfully but were later dropped without a clean mysql_close() (the client process died, wait_timeout/interactive_timeout fired, or max_allowed_packet was exceeded). This card tracks the former. Post-auth disconnects belong to the client counter.
Q: A spike appeared but the host cache is empty. Why?
performance_schema.host_cache is itself capped at host_cache_size rows and is cleared by FLUSH HOSTS, FLUSH PRIVILEGES, or FLUSH STATUS. If someone ran one of those after the failures, the attribution is gone even though the cumulative Aborted_connects counter persists. Enable the general_log or audit plugin temporarily to capture future offenders, or check application logs on the suspected nodes.
Q: We see a steady ~5 aborts per hour with no application errors. Is that a problem?
Usually not. A low constant rate is typical of load-balancer TCP health checks that open and close the port without authenticating, port scanners, and monitoring probes. Establish your own baseline; the > 100 per 24h default is a generic starting point. If your background noise sits at 120/day and nothing is broken, raise the threshold in the Alert Rules tab rather than chasing the noise.
Q: Why does the count suddenly drop to near zero?
The most common cause is a server restart (or FLUSH STATUS), which resets the underlying counter. Cross-check Instance Uptime: a low uptime explains the reset. The card clamps the negative delta so you will not see a misleading negative number.
Q: Could a single failing application cause this?
Yes, and it is the most common real cause. Connection pools reconnect on a fixed interval (commonly every 5 to 30 seconds). One node with a stale credential after a password rotation can generate hundreds of aborted connects per day on its own. Fix the secret on that node and run FLUSH HOSTS to clear any max_connect_errors block.
Q: Does this counter include connections refused because max_connections was reached?
Those are counted in Connection_errors_max_connections, surfaced by the Connection Errors (24h) card, and depending on the failure stage may or may not increment Aborted_connects. When the abort spike coincides with high Connection Pool Saturation %, treat it as a capacity problem rather than an auth problem.