37

这个问题与以下问题有关:

我正在本地机器上配置一个新的 MySQL (5.1) 服务器。我需要提供对数据库的远程访问。我做了以下步骤:

  1. bind-address在 my.cnf 中评论:

    # bind-address      = 192.168.1.3
    
  2. 授予权限:

    GRANT ALL PRIVILEGES ON *.* TO 'nickruiz'@'%' IDENTIFIED BY PASSWORD 'xxxx';
    
  3. 在路由器上设置端口转发(TCP 和 UDP,端口 3306、192.168.1.3)
  4. 为防火墙配置 iptables

    sudo iptables -I INPUT -p udp --dport 3306 -j ACCEPT
    
    sudo iptables -I INPUT -p tcp --dport 3306 --syn -j ACCEPT
    
    sudo iptables-save
    
  5. 重启mysql服务器sudo /etc/init.d/mysql restart

测试时,我得到以下信息:

局域网:

mysql -h 192.168.1.3 -u nickruiz -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)

偏僻的:

mysql -h 1xx.xx.4.136 -u nickruiz -p
ERROR 2003 (HY000): Can't connect to MySQL server on '1xx.xx.4.136' (111)

显然有什么问题阻止了我使用我的全球 IP 地址。

笔记:

  • 我尝试在同一台机器上测试远程连接,也尝试通过远程机器上的 SSH 测试远程连接。
  • 我不确定我的 ISP 是否给了我一个静态 IP。

有任何想法吗?

更新: telnet 似乎没有工作。

telnet 192.168.1.3 3306
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.
E
5.1.63-0ubuntu0.11.04.1,0g8!:@pX;]DyY0#\)SIConnection closed by foreign host.
4

11 回答 11

16

请检查您的监听端口:

netstat -nat |grep :3306

如果显示

 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN 

这对您的远程连接没问题。

但在这种情况下,我认为你有

tcp        0     192.168.1.3:3306            0.0.0.0:*               LISTEN 

这对您的远程连接没问题。您还应该检查您的防火墙(如果您使用 centos/redhat,则为 iptables)

services iptables stop

用于测试或使用:

iptables -A input -p tcp -i eth0 --dport 3306 -m state NEW,ESTABLISHED -j ACCEPT
iptables -A output -p tcp -i eth0 --sport 3306 -m state NEW,ESTABLISHED -j ACCEPT

还有另一件事是检查您对远程连接的授予权限:

GRANT ALL ON *.* TO remoteUser@'remoteIpadress' IDENTIFIED BY 'my_password';
于 2014-10-27T05:27:37.163 回答
6

errno 111 是 ECONNREFUSED,我想路由器的 DNAT 有问题。

您的 ISP 也可能正在过滤该端口。

于 2012-08-01T12:00:56.740 回答
4

检查您的远程主机(即您尝试从其连接的网络托管服务器)是否允许端口 3306 上的 OUTGOING 流量。

在这种情况下,我看到了 (100) 错误。我可以从我的 PC/Mac 连接,但不能从我的网站连接。MySQL 实例可以通过 Internet 访问,但我的托管公司不允许我的网站连接到端口 3306 上的数据库。

一旦我要求我的托管公司在端口 3306 上为传出流量打开我的网络托管帐户,我的网站就可以连接到我的远程数据库。

于 2013-02-04T15:53:25.933 回答
3
/etc/mysql$ sudo nano my.cnf

对我有用的相关部分:

#skip-networking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = MY_IP

MY_IP可以使用ifconfig或找到curl -L whatismyip.org |grep blue

重新启动 mysql 以确保加载新配置:

/etc/mysql$ sudo service mysql restart
于 2015-11-12T15:24:22.730 回答
2

我在尝试连接到远程 mysql 数据库时遇到了同样的问题。

我通过打开数据库服务器上的防火墙以允许流量通过来修复它:

sudo ufw allow mysql
于 2017-06-29T19:50:44.873 回答
0

如果你使用的系统是CentOS/RedHat,而你安装MySQL的方式是rpm,/etc/文件夹下没有my.cnf,你可以使用:#whereis mysql #cd /usr/share/mysql/ cp -f /usr/share/mysql/my-medium.cnf /etc/my.cnf

于 2014-06-16T07:47:59.890 回答
0

我有同样的错误,但我不明白,但我意识到我的调制解调器使用与 mysql 相同的端口。好吧,我停止了 apache2.servicesudo systemctl stop apache2.service并重新启动了 xammp,sudo /opt/lampp/lampp start

只是也许,如果您还没有使用 mysql 的密码1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),那么您必须传递一个空字符串作为密码

于 2020-10-14T17:12:11.140 回答
0

我如上所述正确设置了我的绑定地址,但忘记重新启动 mysql 服务器(或重新启动):)面对手掌- 所以这对我来说是这个错误的根源!

于 2017-04-02T15:08:14.180 回答
0

有时,当密码中有特殊字符时,您需要将其包装在''字符中,因此要连接到 db,您可以使用:

mysql -uUSER -p'pa$$w0rd'

我有同样的错误,这个解决方案解决了它。

于 2017-09-04T00:26:54.927 回答
0

我和你有同样的问题,我使用wireshark来捕获我发送的TCP数据包,我发现当我使用mysqlbin连接远程主机时,它连接了远程的3307端口,这是我的错误/etc/mysql/my.cnf,3307是另一个项目mysql端口,但是我在my.cnf[client] 部分更改了该配置,当我使用-P选项指定 3306 端口时,没关系。

于 2015-12-24T05:23:03.893 回答
-1

不确定在您提到的步骤中看不到它。

请尝试FLUSH PRIVILEGES [从 mysql 数据库中的授权表重新加载权限]:

刷新特权;

您需要在 GRANT 之后执行它

希望这有帮助!

于 2012-08-01T12:17:13.093 回答