Question

We have a MySQL server in one of the remote Virtual Machine (Windows Server 2008). Till yesterday we were able to connect to the MySQL server, with the help of workbench installed in our local machine.

Yesterday there was a restart to the machine which has the Virtual Machine installed. After that we are unable to connect to MYSQL. Though I can ping and remote connect this particular VM. I can even execute the queries inside the workbench installed in the VM.

I am not too good at networking or security related stuffs. Please help me to solve this issue.

Error :

Your connection attempt failed for user 'root' from your host to server at ABC:3306: Can't connect to MySQL server on 'ABC' (10060)

Was it helpful?

Solution

Really this could be a magnitude of possible reasons, hopefully this is a start:

Check basic network

From the MySQL virtual machine open up a command prompt and type IPCONFIG /ALL. This will show you all the IP addresses bound to different network adapters.

Check that the IP address you're connected to is listed there, the virtual machine might have got a new IP from DHCP rather than having a static IP after its restart.

Hostname vs IP

You should check the hostname resolution, from your quoted error it would suggest you are you are connecting to a hostname rather than a server IP. Check your machine can resolve to the hostname using the correct IP address - it could also be worth changing the hostname for the actual IP of the server in the connection string.

MySQL config file

You've said you're running MySQL on Windows, it was customary to rename the my.cnf to my.ini. The configuration file for older versions of MySQL previous to 4.1.5 was usually stored in either c:\my.ini or c:\windows\my.ini. For versions after this the default location is the installation directory usually %PROGRAMDATA%\MySQL\MySQL Server xxx.

When you have located the configuration file please open it on Notepad (or similar text editor), locate the [mysqld] section and make sure that port= the port you're trying to connect to and bind-address= the IP address you're trying to connect to.

Server ports

From the MySQL virtual server open a command prompt and type netstat –ano, this will show you a list of processes and what IP's / ports they are listening on. The MySQL server should be listed here and should be listening on the same port and IP as the config file defines.

Windows firewall

You should have a firewall rule to allow MySQL, the following will add one on the default port of 3306

netsh advfirewall firewall add rule name="MySQL Server" action=allow protocol=TCP dir=in localport=3306

Identify if this is machine specific

You could setup the MySQL Workbench application on another workstation and try to connect to identify if this is a global problem or just one related to your specific workstation.

OTHER TIPS

mysql administrator of your database should allow remote connection to the mysql server. change this in my.cnf:

bind-address    = 127.0.0.1 # this shoul be your mysql server ip

and comment this:

# skip-networking

Chances are that your configuration was set up for an IP that has changed. By default, mysql won't let you connect from remote hosts unless you explicitly give permissions for a specific user on a specific schema or a group of schemas, for example if you did something like this:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Maybe what you actually did was to set the grant onto your own IP address, that is the address of your local machine, and if your local machine (not the remote server) has changed it's IP address, then mysql will not let you connect unless you have the "1.2.3.4" IP address which obviously you don't have anymore if you have a dynamic IP address (common with DSL/Cable connections)

So connect through SSH or Telnet or whatever you use to your windows server and go to mysql as root and do this:

SELECT * from information_schema.user_privileges;

That will show you the grants on all users and how they are allowed to connect. If you don't see your local IP Address listed there or a wildcard (which would allow you to connect from any remote machine to the server) then you have to set it up like this:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Where USERNAME of course is your user. See that after the on there is a wildcard / dot /wildcard that means you want that user to be able to connect to any schema (database, for mysql) from any user from any network. But I'd recommend that you only do the grant for the user for the specific schema you need to connect to.

Then after that, if you actually had the right information and still can't connect than use a portscanner like nmap or something like that to do a port scan and see if mysql is:

  1. Open and listening to external network
  2. Running on the port that you actually want to connect through

If 1 is true, then check 2 because maybe there is a misconfiguration of the port. But if any of these 2 points do work then it sounds definitely not like a network configuration but a user setting or something else.

GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';

this command should do the trick for all users @Gustavo Rubio has already given the proper explanation.

To ensure what ports are open run cmd in the virtual machine and type.

netstat -a

TCP    127.0.0.1:3360     Hostname:3360   LISTENING

The my.cnf is located Mysql-install-path\MySQL\MySQL Server xxx make sure you backup original before changing

Can't connect to [local] MySQL server

Testing The MySQL Server Installation on Microsoft Windows

MySQL Workbench: Manage MySQL on Windows Servers the Windows way

For the first time you need to test and make sure your connection to mysql is not blocked by the firewall.

To disable the firewall on each host in your cluster, perform the following steps on each host.

1. Save the existing iptables rule set.

iptables-save > /root/firewall.rules

2. Disable iptables.

For RHEL, CentOS, Oracle, and Debian:

chkconfig iptables off

and

/etc/init.d/iptables stop

For SLES:

chkconfig SuSEfirewall2_setup off

and

rcSuSEfirewall2 stop

For Ubuntu:

service ufw stop

https://www.cloudera.com/documentation/enterprise/5-7-x/topics/install_cdh_disable_iptables.html

Depends on your setup, but if you're using cPanel just go to RemoteMYSQL and enter your host. You can also use a wildcard. Below worked for me when I was getting the error

"Could not connect to DB server '' as user ''. port : Host '' is not allowed to connect to this MySQL server"

cPanel setup to allow remote mysql connection

On MySQL v5.6 this may be the case. When another server communicate by advertising its hostname instead of IP address, the resolution might fails (because your user is using IP address instead of hostname for example).

So, you need to disable the following,

skip-host-cache
skip-name-resolve

Or maybe create the user with appropriate hostname (instead of IP address). You may find the hostname when establishing the connection to the remote MySQL.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top