我在同一个子网上有两台服务器。
- 192.168.100.1(mysql)
- 192.168.100.2 (php)
MySQL 似乎在其机器上运行良好,但我似乎无法连接到它。这些都是 ubuntu 机器,iptables 和 ufw 均未运行。以下命令均来自 MySQL 机器本身。这些均无法从.100.2
(php) 机器运行。
我的cnf
#bind-address = 127.0.0.1
bind-address = 192.168.100.1
netstat 说这是真的:
[email protected] /etc/mysql $ netstat -plutn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 8583/sshd
tcp 0 0 192.168.100.1:3306 0.0.0.0:* LISTEN 30654/mysqld
tcp 0 0 0.0.0.0:2828 0.0.0.0:* LISTEN 29946/monit
tcp 0 0 0.0.0.0:1167 0.0.0.0:* LISTEN 23175/cdp
tcp6 0 0 :::22 :::* LISTEN 8583/sshd
telnet 说它很好
[email protected] /etc/mysql $ telnet 192.168.100.1 3306
Trying 192.168.100.1...
Connected to 192.168.100.1.
Escape character is '^]'.
[
5.5.40-0ubuntu0.12.04.1&KM~Se$!u??L\hw=gp{<Uvrmysql_native_password
!#08S01Got packets out of orderConnection closed by foreign host.
mysql 客户端说它很好:
[email protected] /etc/mysql $ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
当我尝试连接时,.100.2
我没有得到任何返回,直到超时:
[email protected] /etc/php5/fpm $ mysql -uroot -p -h 192.168.100.1 --connect-timeout 4
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.100.1' (4)
我可以ping
.100.1
从.100.2
盒子里取出亚毫秒级的响应时间。
以下是 MySQL Grant 设置:
mysql> SELECT user,host from mysql.user;
+------------------+--------------+
| user | host |
+------------------+--------------+
| root | 127.0.0.1 |
| root | 192.168.1.% |
| root | 192.168.100.%|
| root | 192.168.200.%|
| root | ::1 |
| debian-sys-maint | localhost |
| example | localhost |
| o3backup | localhost |
| root | localhost |
| root | voice-mysql |
+------------------+--------------+
10 rows in set (0.00 sec)
我为所有地方添加了新的授权,但问题仍然存在。
mysql> show grants for 'root'@'%';
+--------------------------------------------------------------------------------------------------------------+
| Grants for root@% |
+--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '...' |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
更新
事实证明,系统不知何故被我所不知道的系统文件更改所锁定。显然,它阻止了某些非标准的网络操作。老实说,这真令人沮丧,给我这个盒子的人竟然把这件事忘得一干二净。老实说,我不知道他们对它做了什么,甚至他们也记不清了。尽管如此,这里列出的答案对于普通人来说是最全面的故障排除指南。它应该是这些问题之一。
答案1
看起来您Enter password:
在从 php 服务器连接到 mysql 服务器时收到了提示,但之后什么都没有了。如果是这样,那么用户的 mysql 用户帐户设置root
可能拒绝了连接。查看您的root
mysql 用户帐户并确保Host
字段设置为允许连接。
如果您不知道所连接的计算机的 IP 地址或主机名,则应在用户表中放置一行以“%”作为主机列值。
尝试从客户端计算机连接后,使用 SELECT USER() 查询查看您实际的连接方式。然后将用户表行中的“%”更改为日志中显示的实际主机名。否则,您的系统将变得不安全,因为它允许给定用户名从任何主机进行连接。
我怀疑连接时表格的排序方式会给你带来问题。你可能需要查看访问控制,第 1 阶段:连接验证
答案2
阅读错误 2003 的详细手册http://dev.mysql.com/doc/refman/5.0/en/access-denied.html