Mysql
如何從特定 IP 連接到遠端 MySQL?
我的伺服器 A中有兩個 IP(192.168.13.1和192.168.13.2),並為輔助 IP/虛擬 IP(192.168.13.2)提供了對另一個伺服器 B的訪問。
select
mysql> show grants for web_app@192.168.13.2; +------------------------------------------------------------------------------------------------------------------------------+ | Grants for user@192.168.13.2 | +------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT ON *.* TO 'user'@'192.168.13.2' IDENTIFIED BY PASSWORD '*pass' | +------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
當我嘗試將
mysql
伺服器 A 連接到伺服器 B(來自 Linux)時,主 IP正在嘗試連接到 MySQL 並且訪問被拒絕[root@13-1 ~]# mysql -h 192.168.12.1 -u user -p Enter password: ERROR 1130 (HY000): Host '192.168.13.1' is not allowed to connect to this MySQL server
然後我為 192.168.13.1 提供完全相同的
grants
資訊,我就可以登錄了。我在 192.168.13.2 中執行的應用程序試圖從遠端伺服器獲取也無法正常工作,直到我提供grants
主IP。我的ifconfig
詳細資訊::[root@13-1 ~]# ifconfig | grep inet inet 192.168.13.1 netmask 255.255.254.0 broadcast 192.168.13.255 inet 192.168.13.2 netmask 255.255.254.0 broadcast 192.168.13.255 inet 192.168.13.3 netmask 255.255.254.0 broadcast 192.168.13.255
我有兩個問題:
- 如何從特定 IP
mysql
遠端登錄(在我的情況下,從 192.168.13.2 )?- 是否有必要為應用程序(使用 MySQL)
grants
提供主 IP,即使我正在嘗試從另一個 IP 中的應用程序?還是我錯過了什麼?
讓我以更格式的形式回答:
- MySQL 伺服器不管理伺服器上的客戶端 ip,也不管理客戶端上的傳出。伺服器可以選擇 IP 地址僅用於偵聽。
伺服器只需將客戶端 IP 與權限表進行比較並允許或拒絕訪問。我不知道如何告訴 mysql 客戶端(包括使用專用傳出 ip 的庫)的方法。
你可以做什麼:
- 使用萬用字元,例如 - user@192.168.12.%
- 使用域名,例如 - user@serverB.yourdomain.com
萬用字元使 IP 地址列表超出必要範圍,但同時使用 DNS 解析:
- 高負載下的減速性能
- 可能與網路相關的問題完全崩潰
您可以結合萬用字元 + 防火牆規則來減少允許的 IP 數量。
–bind-address=ip_address
在具有多個網路介面的電腦上,此選項可用於選擇在連接到 MySQL 伺服器時使用哪個介面。
從 MySQL 5.6.1 開始支持此選項。
https://dev.mysql.com/doc/refman/5.6/en/mysql-command-options.html#option_mysql_bind-address