A MySQL client on Unix can connect to the
mysqld server in two different ways: By
using a Unix socket file to connect through a file in the file
/tmp/mysql.sock), or by
using TCP/IP, which connects through a port number. A Unix
socket file connection is faster than TCP/IP, but can be used
only when connecting to a server on the same computer. A Unix
socket file is used if you don't specify a host name or if you
specify the special host name
If the MySQL server is running on Windows 9x or Me, you can
connect only using TCP/IP. If the server is running on Windows
NT, 2000, XP, or 2003 and is started with the
--enable-named-pipe option, you
can also connect with named pipes if you run the client on the
host where the server is running. The name of the named pipe
MySQL by default. If you don't give a
host name when connecting to mysqld, a
MySQL client first tries to connect to the named pipe. If that
doesn't work, it connects to the TCP/IP port. You can force
the use of named pipes on Windows by using
. as the host name.
The error (2002)
Can't connect to ...
normally means that there is no MySQL server running on the
system or that you are using an incorrect Unix socket file
name or TCP/IP port number when trying to connect to the
server. You should also check that the TCP/IP port you are
using has not been blocked by a firewall or port blocking
The error (2003)
Can't connect to MySQL server on
indicates that the network connection has been refused. You
should check that there is a MySQL server running, that it has
network connections enabled, and that the network port you
specified is the one configured on the server.
Start by checking whether there is a process named mysqld running on your server host. (Use ps xa | grep mysqld on Unix or the Task Manager on Windows.) If there is no such process, you should start the server. See Section 126.96.36.199, “Starting and Troubleshooting the MySQL Server”.
If a mysqld process is running, you can
check it by trying the following commands. The port number or
Unix socket file name might be different in your setup.
host_ip represents the IP address of the
machine where the server is running.
mysqladmin -h `hostname` version variablesshell>
mysqladmin -h `hostname` --port=3306 versionshell>
mysqladmin -h host_ip versionshell>
mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version
Note the use of backticks rather than forward quotation marks
with the hostname command; these cause the
output of hostname (that is, the current
host name) to be substituted into the
mysqladmin command. If you have no
hostname command or are running on Windows,
you can manually type the host name of your machine (without
backticks) following the
-h option. You can
-h 127.0.0.1 to connect with
TCP/IP to the local host.
Make sure that the server has not been configured to ignore
network connections or (if you are attempting to connect
remotely) that it has not been configured to listen only
locally on its network interfaces. If the server was started
--skip-networking, it will
not accept TCP/IP connections at all. If the server was
will listen for TCP/IP connections only locally on the
loopback interface and will not accept remote connections.
Check to make sure that there is no firewall blocking access to MySQL. Your firewall may be configured on the basis of the application being executed, or the port number used by MySQL for communication (3306 by default). Under Linux or Unix, check your IP tables (or similar) configuration to ensure that the port has not been blocked. Under Windows, applications such as ZoneAlarm or the Windows XP personal firewall may need to be configured not to block the MySQL port.
Here are some reasons the
Can't connect to local
MySQL server error might occur:
You're running a MySQL server on Windows with many TCP/IP
connections to it. If you're experiencing that quite often
your clients get that error, you can find a workaround
Section B.188.8.131.52, “
Connection to MySQL Server Failing on Windows”.
You are running on a system that uses MIT-pthreads. If you are running on a system that doesn't have native threads, mysqld uses the MIT-pthreads package. See Section 2.1.1, “Operating Systems On Which MySQL Is Known To Run”. However, not all MIT-pthreads versions support Unix socket files. On a system without socket file support, you must always specify the host name explicitly when connecting to the server. Try using this command to check the connection to the server:
mysqladmin -h `hostname` version
Someone has removed the Unix socket file that
/tmp/mysql.sock by default). For
example, you might have a cron job that
removes old files from the
directory. You can always run mysqladmin
version to check whether the Unix socket file
that mysqladmin is trying to use really
exists. The fix in this case is to change the
cron job to not remove
mysql.sock or to place the socket
file somewhere else. See
Section B.5.4.5, “How to Protect or Change the MySQL Unix Socket File”.
You have started the mysqld server with
option, but forgotten to tell client programs the new name
of the socket file. If you change the socket path name for
the server, you must also notify the MySQL clients. You
can do this by providing the same
--socket option when you
run client programs. You also need to ensure that clients
have permission to access the
mysql.sock file. To find out where
the socket file is, you can do:
netstat -ln | grep mysql
You are using Linux and one server thread has died (dumped core). In this case, you must kill the other mysqld threads (for example, with kill or with the mysql_zap script) before you can restart the MySQL server. See Section B.5.4.2, “What to Do If MySQL Keeps Crashing”.
The server or client program might not have the proper
access privileges for the directory that holds the Unix
socket file or the socket file itself. In this case, you
must either change the access privileges for the directory
or socket file so that the server and clients can access
them, or restart mysqld with a
--socket option that
specifies a socket file name in a directory where the
server can create it and where client programs can access
If you get the error message
Can't connect to MySQL
server on some_host, you can try the following
things to find out what the problem is:
Check whether the server is running on that host by
telnet some_host 3306 and
pressing the Enter key a couple of times. (3306 is the
default MySQL port number. Change the value if your server
is listening to a different port.) If there is a MySQL
server running and listening to the port, you should get a
response that includes the server's version number. If you
get an error such as
telnet: Unable to connect to
remote host: Connection refused, then there is
no server running on the given port.
If the server is running on the local host, try using
mysqladmin -h localhost variables to
connect using the Unix socket file. Verify the TCP/IP port
number that the server is configured to listen to (it is
the value of the
If you are running under Linux and Security-Enhanced Linux
(SELinux) is enabled, make sure you have disabled SELinux
protection for the
When you're running a MySQL server on Windows with many
TCP/IP connections to it, and you're experiencing that quite
often your clients get a
Can't connect to MySQL
server error, the reason might be that Windows
does not allow for enough ephemeral (short-lived) ports to
serve those connections.
The purpose of
TIME_WAIT is to keep a
connection accepting packets even after the connection has
been closed. This is because Internet routing can cause a
packet to take a slow route to its destination and it may
arrive after both sides have agreed to close. If the port is
in use for a new connection, that packet from the old
connection could break the protocol or compromise personal
information from the original connection. The
TIME_WAIT delay prevents this by ensuring
that the port cannot be reused until after some time has
been permitted for those delayed packets to arrive.
It is safe to reduce
TIME_WAIT greatly on
LAN connections because there is little chance of packets
arriving at very long delays, as they could through the
Internet with its comparatively large distances and
By default, Windows allows 5000 ephemeral (short-lived) TCP
ports to the user. After any port is closed it will remain
TIME_WAIT status for 120 seconds.
The port will not be available again until this time
With a small stack of available TCP ports (5000) and a high
number of TCP ports being open and closed over a short
period of time along with the
status you have a good chance for running out of ports.
There are two ways to address this problem:
Reduce the number of TCP ports consumed quickly by investigating connection pooling or persistent connections where possible
Tune some settings in the Windows registry (see below)
IMPORTANT: The following procedure involves modifying the Windows registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, view the following article in the Microsoft Knowledge Base: http://support.microsoft.com/kb/256986/EN-US/.
Start Registry Editor
Locate the following key in the registry:
Edit menu, click
Value, and then add the following registry
Value Name: MaxUserPort Data Type: REG_DWORD Value: 65534
This sets the number of ephemeral ports available to any user. The valid range is between 5000 and 65534 (decimal). The default value is 0x1388 (5000 decimal).
Edit menu, click
Value, and then add the following registry
Value Name: TcpTimedWaitDelay Data Type: REG_DWORD Value: 30
This sets the number of seconds to hold a TCP port
TIME_WAIT state before
closing. The valid range is between 0 (zero) and 300
(decimal). The default value is 0x78 (120 decimal).
Quit Registry Editor.
Reboot the machine.
Note: Undoing the above should be as simple as deleting the registry entries you've created.