Ubuntu

無法從另一台伺服器連接到 MySQL

  • December 13, 2014

我在同一個子網上有兩台伺服器。

  • 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 說這是真的:

root@192.168.100.1 /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 說不錯

root@192.168.100.1 /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客戶端說很好:

root@192.168.100.1 /etc/mysql $ mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

當我嘗試連接時.100.2,在連接超時之前我什麼也得不到:

root@192.168.100.2 /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 授權設置:

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)

更新

原來系統被我不知道的系統文件更改以某種方式鎖定。顯然,它阻止了某些非標準的網路操作。老實說,給我這個盒子的人忘記了這一切,這真的令人沮喪。老實說,我不知道他們對它做了什麼,甚至他們也不記得了。儘管如此,這裡列出的答案是針對普通人的最徹底的故障排除指南。應該是這些問題之一。

從您的 php 伺服器連接到您的 mysql 伺服器時,您似乎收到了Enter password:提示,但之後就沒有了。如果是這樣,那麼使用者的 mysql 使用者帳戶設置root可能會拒絕連接。查看您的rootmysql 使用者帳戶並確保該Host欄位設置為允許連接。

來自(MySQL)拒絕訪問錯誤的原因

如果您不知道您要連接的機器的 IP 地址或主機名,您應該在使用者表中放置一個帶有 ‘%’ 作為 Host 列值的行。

嘗試從客戶端電腦連接後,使用 SELECT USER() 查詢來查看您是如何真正連接的。然後將使用者表行中的“%”更改為日誌中顯示的實際主機名。否則,您的系統將不安全,因為它允許來自任何主機的給定使用者名的連接。

我懷疑連接時表格的排序方式會導致問題。您可能需要查看訪問控制,第 1 階段:連接驗證

引用自:https://serverfault.com/questions/652220