MySQL无法连接远程服务器

时间:2014-02-07 12:08:44

标签: mysql networking port windows-server-2008-r2 firewall

我们在其中一个远程虚拟机(Windows Server 2008)中有一个MySQL服务器。直到昨天我们才能在我们本地机器上安装的工作台的帮助下连接到MySQL服务器。

昨天重启了安装了虚拟机的机器。之后我们无法连接到MYSQL。虽然我可以ping和远程连接这个特定的VM。我甚至可以在VM中安装的工作台内执行查询。

我不太擅长网络或安全相关的东西。请帮我解决这个问题。

错误:

  

用户“root”从主机到服务器的连接尝试失败:ABC:3306:无法连接到'ABC'上的MySQL服务器(10060)

7 个答案:

答案 0 :(得分:23)

实际上这可能是一个可能的原因,希望这是一个开始:

检查基本网络

从MySQL虚拟机打开命令提示符并键入IPCONFIG /ALL。这将显示绑定到不同网络适配器的所有IP地址。

检查您所连接的IP地址是否列在那里,虚拟机可能从DHCP获得了新IP,而不是在重启后拥有静态IP。

主机名与IP

您应该检查主机名解析,根据您引用的错误,它会建议您连接到主机名而不是服务器IP。检查您的计算机是否可以使用正确的IP地址解析为主机名 - 也可以在连接字符串中更改服务器的实际IP的主机名。

MySQL配置文件

你说你在Windows上运行MySQL,习惯上将my.cnf重命名为my.ini。 4.1.5之前的旧版MySQL的配置文件通常存储在c:\my.inic:\windows\my.ini中。对于此后的版本,默认位置通常是安装目录%PROGRAMDATA%\MySQL\MySQL Server xxx

找到配置文件后,请在记事本(或类似的文本编辑器)上打开它,找到[mysqld]部分并确保port=您尝试连接的端口bind-address= {1}}您尝试连接的IP地址。

服务器端口

从MySQL虚拟服务器打开命令提示符并键入netstat –ano,这将显示进程列表以及他们正在侦听的IP /端口。 MySQL服务器应该在这里列出,并且应该在配置文件定义的相同端口和IP上进行监听。

Windows防火墙

您应该有一个允许MySQL的防火墙规则,以下内容将在默认端口3306上添加一个

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

确定这是否是特定于机器的

您可以在另一个工作站上设置MySQL Workbench应用程序,并尝试连接以确定这是一个全局问题还是仅与您的特定工作站相关的问题。

答案 1 :(得分:9)

你的数据库的mysql管理员应该允许远程连接到mysql服务器。 在my.cnf中更改此内容:

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

并对此发表评论:

# skip-networking

答案 2 :(得分:6)

您的配置可能是针对已更改的IP设置的。默认情况下,mysql不允许您从远程主机连接,除非您明确地为特定模式或一组模式的特定用户授予权限,例如,如果您执行了类似的操作:

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

也许您实际做的是将授权设置到您自己的IP地址,即本地计算机的地址,如果您的本地计算机(不是远程服务器)更改了它的IP地址,那么mysql将不会让你连接的除非你有“1.2.3.4”IP地址,如果你有一个动态IP地址(通常用于DSL /电缆连接),你显然不再拥有它了

因此,通过SSH或Telnet或您使用的任何方式连接到您的Windows服务器并以root身份转到mysql并执行此操作:

SELECT * from information_schema.user_privileges;

这将向您显示所有用户的授权以及如何允许他们进行连接。如果您没有看到其中列出的本地IP地址或通配符(允许您从任何远程计算机连接到服务器),那么您必须将其设置为:

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

USERNAME当然是您的用户。看到之后有一个通配符/点/通配符,这意味着您希望该用户能够从任何网络的任何用户连接到任何模式(数据库,用于mysql)。但我建议您只为用户提供您需要连接的特定架构的授权。

然后,如果你真的有正确的信息但仍然无法连接,而是使用像nmap之类的portscanner进行端口扫描,看看是不是mysql:

  1. 打开并聆听外部网络
  2. 在您实际想要通过
  3. 连接的端口上运行

    如果1为真,则检查2,因为可能是端口配置错误。但是,如果这两个点中的任何一个起作用,那么它听起来绝对不像网络配置,而是用户设置或其他东西。

答案 3 :(得分:1)

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

这个命令应该为所有用户提供帮助@Gustavo Rubio已经给出了正确的解释。

确保在虚拟机中打开哪些端口运行cmd并键入。

netstat -a

TCP    127.0.0.1:3360     Hostname:3360   LISTENING

my.cnf位于Mysql-install-path \ MySQL \ MySQL Server xxx,请确保在更改之前备份原始文件

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

答案 4 :(得分:0)

您第一次需要测试并确保防火墙不会阻止您与mysql的连接。

要在群集中的每台主机上禁用防火墙,请在每台主机上执行以下步骤。

<强> 1。保存现有的iptables规则集。

iptables-save > /root/firewall.rules

<强> 2。禁用iptables。

对于RHEL,CentOS,Oracle和Debian:

chkconfig iptables off

/etc/init.d/iptables stop

对于SLES:

chkconfig SuSEfirewall2_setup off

rcSuSEfirewall2 stop

对于Ubuntu:

service ufw stop

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

答案 5 :(得分:0)

取决于您的设置,但是如果您使用的是cPanel,请转到RemoteMYSQL并输入主机。您也可以使用通配符。当我遇到错误时,下面为我工作

  

“无法以用户”身份连接到数据库服务器“。端口:主机”不是   允许连接到该MySQL服务器”

cPanel setup to allow remote mysql connection

答案 6 :(得分:0)

在 MySQL v5.6 上可能就是这种情况。 当另一台服务器通过通告其主机名而不是 IP 地址进行通信时,解析可能会失败(例如,因为您的用户使用的是 IP 地址而不是主机名)。

因此,您需要禁用以下内容,

skip-host-cache
skip-name-resolve

或者可以使用适当的主机名(而不是 IP 地址)创建用户。您可能会在与远程 MySQL 建立连接时找到主机名。