A PHP error that says Connection timed out usually means the TCP connection or MySQL handshake never completed. Check the route to the server, MySQL’s listening address, port 3306, firewall or security-group rules, and the account’s allowed source host before changing timeout values. A message such as Lost connection to MySQL server is different: a session was established and then dropped, so investigate idle and data-transfer timeouts, stale persistent sockets, or failures during a query.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
The fastest safe method is to test from the PHP host with the MySQL command-line client, correct server-side reachability, then set mysqli’s connect timeout between mysqli_init() and mysqli_real_connect(). Treat timeout tuning as a supplement to a working network path, not as a substitute for one.
As an Amazon Associate I earn from qualifying purchases.
Recommended Free Tools
First, identify which timeout you actually have
Read the complete error text, including its MySQL error number and whether it occurred while opening the connection or running a query. Similar wording can point to entirely different layers.
Connection timed out while connecting
This indicates that the TCP connection or MySQL handshake did not finish before the client gave up. The usual causes are a wrong hostname or route, a server that is not listening on the requested interface, a firewall or cloud security group blocking port 3306, or a connection timeout that is too short for a genuinely high-latency path. It is not an idle-session problem, because no usable session exists yet.
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
Lost connection to MySQL server
This means a connection existed and was later closed. If it happens while a statement is running, clients commonly report Lost connection to MySQL server during query (error 2013). If it appears after a period of inactivity, check the server’s wait_timeout and whether a persistent PHP socket was silently closed. If data is moving but stalls, inspect net_read_timeout and net_write_timeout.
| Observed symptom | What has probably happened | Start here |
|---|---|---|
| Connection timed out before authentication | No completed TCP connection or handshake | Hostname, routing, bind address, port 3306, firewall and security-group rules |
| Connection refused immediately | The host is reachable but nothing is accepting that port, or an active reject rule answered | MySQL service status, listening interface and port, local firewall |
| Access denied for user | Network access works; authentication or the account’s host restriction failed | User name, password, authentication method and permitted source host |
| Lost connection after being idle | The server or an intermediary closed an inactive socket | wait_timeout, connection pooling and reconnect handling |
| Lost connection during a query or result transfer | An active read or write stalled, or the server/client terminated the session | net_read_timeout, net_write_timeout, PHP read timeout, query size and network stability |
Run one decisive test from the PHP server
Test from the machine that runs PHP, not from your laptop. The source address seen by MySQL, the route, and the firewall rules can differ between those locations.
- Run
mysql -h <host> -u <user> -p --connect-timeout=30and enter the password when prompted. Replace<host>with the database host name or address and use the same account and port that PHP uses. The 30-second value is deliberately longer than the common default so a slow but valid route is not rejected prematurely. - If the command also times out, stop changing PHP code. Resolve the server listening address, route, port 3306, firewall or cloud security-group rule, and account host permission first.
- If it connects and authenticates, the basic network path works. Compare PHP’s host, port, credentials, DNS resolution and connection options with the command that succeeded.
- If it reaches the server but returns
Access denied, the timeout is not the problem. Fix the account’s password, authentication configuration or source-host grant. - If it returns
Connection refused, verify that MySQL is running and listening on the expected address and port; a refused connection is different from packets being silently dropped until a timeout.
The command-line client’s --connect-timeout option is reported as available from MySQL 8.0.18; confirm the option in the client version installed on your PHP host if an older client rejects it. MySQL Shell expresses its connect timeout in milliseconds and has a 10,000 ms (10-second) default, while the C API’s MYSQL_OPT_CONNECT_TIMEOUT uses seconds. Do not copy a value between these tools without checking its unit.
Make sure MySQL is listening where the PHP host can reach it
Check the actual bind_address
bind_address determines which network interface accepts MySQL connections. The MySQL 8.0 server-variable documentation reports a wildcard (*) default, but packaged distribution files may explicitly set 127.0.0.1. Those two facts are not contradictory: the effective value on your host is what matters.
On the database server, inspect the running value with:
Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
SHOW VARIABLES LIKE 'bind_address';
Also inspect the active MySQL configuration, usually under the [mysqld] section of my.cnf on Unix-like systems or my.ini on Windows. A loopback value such as 127.0.0.1 accepts local connections only. Set a specific private interface address when possible, or use the wildcard only when your firewall policy limits who can reach the port. Restart MySQL after a configuration change and verify that it starts successfully.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Since MySQL 8.0.13, bind_address can contain a comma-separated list of addresses. Do not combine a wildcard with other addresses: a list containing the wildcard is an error, and MySQL will not start with that invalid configuration. Always check service logs after a restart.
Verify the port and route
MySQL commonly listens on TCP port 3306, but installations can use another port. Ensure PHP’s port matches the server’s configured port. The database host’s local firewall must allow inbound traffic from the PHP server’s address, and any cloud security group, network ACL, VPN policy, NAT rule or provider firewall between the hosts must allow the same destination port. A rule that permits your office address does not automatically permit the web server’s address.
Do not expose a database port broadly to the public internet merely to make a timeout disappear. Prefer a private network, VPN or tightly restricted source-address rule, and allow only the application hosts that need the connection.
Account for DNS and address-family differences
A hostname can resolve to more than one address. PHP may try an IPv6 address while the server or firewall is configured only for IPv4, or the name may resolve to an old private address. Compare the address PHP resolves with the interface on which MySQL is bound and with the firewall rule’s source and destination. As a diagnostic, test the known server address from the PHP host, then correct DNS or address-family configuration rather than hard-coding an address permanently unless your deployment requires it.
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
Confirm that the MySQL account permits the PHP host
MySQL accounts include a host component. An account intended for the PHP server must be allowed from the address MySQL actually sees; for example, a grant represented as 'user'@'10.0.0.5' is different from an account restricted to localhost. A successful TCP handshake followed by Access denied proves that the route and port are working, while a timeout before authentication usually means the request never reached this stage.
- Identify the PHP server’s source address on the database network, including any NAT address used between networks.
- Check the account’s host restrictions and authentication plugin on the database server.
- Use the narrowest source range that covers the application fleet; avoid an unrestricted host pattern unless your security design explicitly requires it.
- After changing permissions, retest with the command-line client from the PHP host before testing the application.
Do not infer that a grant for a DNS name will match a connection that arrives from an IP address, or vice versa. MySQL evaluates the connection identity it receives, which can be affected by proxies and network translation.
Use server-side timeout variables for the right phase
connect_timeout: initial handshake only
The server-side connect_timeout applies while a client is establishing the initial handshake. Its documented default is 10 seconds. A path with substantial latency or multiple proxies may need 15–30 seconds, but increasing this value cannot repair a blocked port, an incorrect route or a server bound only to loopback.
Check the effective value with:
SHOW VARIABLES LIKE 'connect_timeout';
For a persistent change, place the setting under [mysqld] in my.cnf (or my.ini on Windows) and restart MySQL. Change it only after measuring the path: a very long handshake allowance can make failures take longer to surface and can consume server resources when many unreachable clients retry.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →wait_timeout: idle sessions
wait_timeout controls how long the server keeps a noninteractive connection idle. The default is eight hours. It does not extend a slow connection attempt and does not protect an active query from a read or write stall.
Rank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Inspect it with:
SHOW VARIABLES LIKE 'wait_timeout';
Since MySQL 8.0.24, the server writes a reason to the client before closing an inactive connection: The client was disconnected by the server because of inactivity. If PHP later reuses that socket, the first operation can fail with a lost-connection or “server has gone away” error. A shorter server setting may be intentional for resource control, so do not simply raise it without checking connection-pool behavior and workload.
net_read_timeout and net_write_timeout: active transfer
These variables govern waiting while data is actively read from or written to the client. They address stalls during a query or result transfer, not an idle session and not the initial TCP handshake. Check each value with the same SHOW VARIABLES LIKE '...' pattern, then investigate large results, slow links, overloaded hosts and intermediary proxies before increasing limits.
Set mysqli’s connect timeout correctly in PHP
With mysqli, initialize the object, apply options, and then call mysqli_real_connect(). MYSQLI_OPT_CONNECT_TIMEOUT expects an integer number of seconds; passing a string has caused bogus timeout behavior in PHP bug reports.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →<?php
$host = 'db.internal.example';
$port = 3306;
$user = 'app_user';
$password = getenv('DB_PASSWORD');
$database = 'app_db';
$mysqli = mysqli_init();
if ($mysqli === false) {
throw new RuntimeException('mysqli_init failed');
}
$connectTimeout = 30; // integer seconds
if (!mysqli_options($mysqli, MYSQLI_OPT_CONNECT_TIMEOUT, $connectTimeout)) {
throw new RuntimeException('Unable to set connect timeout');
}
// Available since PHP 7.2.0; applies to command-result reads after connecting.
if (defined('MYSQLI_OPT_READ_TIMEOUT')) {
$readTimeout = 60; // integer seconds
mysqli_options($mysqli, MYSQLI_OPT_READ_TIMEOUT, $readTimeout);
}
if (!mysqli_real_connect($mysqli, $host, $user, $password, $database, $port)) {
$message = mysqli_connect_error() ?: 'Unknown MySQL connection error';
throw new RuntimeException($message);
}
// Use the connection, then close it when this request is finished.
Call mysqli_options() after mysqli_init() and before mysqli_real_connect(); setting the option on an already connected handle is too late. Keep the timeout as an integer variable, not '30'. Set MYSQLI_OPT_READ_TIMEOUT only when your PHP version provides it; it covers waiting for command results after the connection is open and therefore addresses a different failure phase.
Log the error category, host, port and elapsed time, but never log the password. A single immediate retry can help after a transient network event, yet unlimited rapid retries can turn an outage into a connection storm.
Best Value
Handle stale and persistent connections deliberately
Persistent connections, including a p: host prefix or equivalent pooling behavior, can outlive the server-side idle limit. The PHP process may receive a socket that the database has already closed. On a failed operation, discard that handle and establish a fresh connection; do not assume that pinging or retrying the same stale resource will repair it.
For nonpersistent request-scoped connections, close the handle at the end of the request when your framework does not manage it automatically. For a pool, make its maximum idle lifetime shorter than the infrastructure’s idle limit, validate a connection before borrowing it, and cap retries with backoff. Reconnect automatically only for operations that are safe to repeat: a retry after a dropped connection can duplicate a write if the server committed it before the client lost the response.
Free tools Windows power users keep installed
One-click scans. No signup required.
What to do when the failure occurs during a query
- Record whether the error is reported before the first statement, while sending a large request, or while reading the result.
- Check the server’s
net_read_timeoutandnet_write_timeout, and PHP’sMYSQLI_OPT_READ_TIMEOUTif you set it. - Look for oversized packets, long-running statements, proxy idle limits, saturated network links and server resource exhaustion. A transfer timeout is not fixed by raising
connect_timeout. - Reduce result size with appropriate filtering or pagination where possible, and stream or batch data instead of holding an unnecessarily large response in one transfer.
- Determine whether the statement is safe to retry. For writes, use an idempotency key, a transaction strategy or an application-level record of the operation before adding automatic retries.
PDO and legacy PHP code: avoid copying mysqli settings blindly
The mysqli constants and initialization sequence do not apply to PDO. A portable PDO connect-timeout option and exact syntax were not established here, so do not paste MYSQLI_OPT_CONNECT_TIMEOUT into a PDO data-source string and assume it works. Check the documentation for the exact PHP version, PDO driver and driver-specific options in your deployment, then validate the behavior with a deliberately slow or unreachable test endpoint.
The old mysql extension used a mysql.connect_timeout php.ini setting, but that extension is not the API used by mysqli or PDO. Modernize legacy code rather than trying to combine settings from the retired extension with current drivers.
Choose a fix based on the evidence
| Evidence | Corrective action | Do not do this |
|---|---|---|
| The command-line test from the PHP host times out | Fix bind address, route, port, firewall/security group or source-host permissions; then retest | Raise PHP’s timeout repeatedly while the port is unreachable |
| The command-line test connects, but PHP times out | Compare PHP’s host, port, DNS result, address family and mysqli option ordering; pass an integer timeout | Set options after mysqli_real_connect() |
| Connection is refused | Check MySQL service state, configured port, listening interface and reject rules | Treat refusal as an idle-timeout symptom |
| Authentication is denied | Correct credentials and the account’s permitted source host | Open the firewall wider to solve an authentication error |
| Failure follows a long idle period | Inspect wait_timeout, pool idle limits and stale-socket recovery |
Use connect_timeout as an idle-connection fix |
| Failure occurs during result transfer | Inspect net read/write limits, PHP read timeout, query size and intermediary limits | Assume the initial handshake timeout controls the query |
Production checklist
- Capture the exact error text, error number, operation phase and elapsed time.
- Run the MySQL client test from the PHP host with the same destination, account, port and a 30-second connect limit.
- Verify the effective
bind_addresson the database server instead of relying on a package default. - Confirm that MySQL is listening on the intended port and that every firewall, security group, ACL, VPN and NAT hop permits the PHP source.
- Confirm the account’s host restriction matches the address MySQL sees.
- Inspect
connect_timeoutfor handshake latency,wait_timeoutfor idle closures, and net read/write values for active transfers. - In mysqli, call
mysqli_init(), set integer options, then callmysqli_real_connect(). - Use
MYSQLI_OPT_READ_TIMEOUTonly for post-connect command-result waits and only on PHP versions that provide it. - Detect stale persistent sockets, reconnect with bounded backoff, and make write retries idempotent.
- After any server configuration change, restart MySQL, verify that it starts cleanly, and repeat the test from the actual application host.
Final diagnostic sequence
Start with the message, not the number. A pre-handshake timeout is a reachability problem until proven otherwise: test from the PHP host, inspect the actual bind address, open only the required path to the configured port, and verify the account’s source host. Once that test succeeds, set mysqli’s integer connect timeout in the required initialization order if the path is genuinely slow. For connections that later disappear, investigate idle and active-transfer limits, stale persistent sockets and safe reconnect behavior instead of increasing the handshake timeout.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




