Ubuntu
無法從另一台伺服器連接到 MySQL
我在同一個子網上有兩台伺服器。
- 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
可能會拒絕連接。查看您的root
mysql 使用者帳戶並確保該Host
欄位設置為允許連接。如果您不知道您要連接的機器的 IP 地址或主機名,您應該在使用者表中放置一個帶有 ‘%’ 作為 Host 列值的行。
嘗試從客戶端電腦連接後,使用 SELECT USER() 查詢來查看您是如何真正連接的。然後將使用者表行中的“%”更改為日誌中顯示的實際主機名。否則,您的系統將不安全,因為它允許來自任何主機的給定使用者名的連接。
我懷疑連接時表格的排序方式會導致問題。您可能需要查看訪問控制,第 1 階段:連接驗證