Mysql

如何從特定 IP 連接到遠端 MySQL?

  • January 24, 2022

我的伺服器 A中有兩個 IP(192.168.13.1192.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 中執行的應用程序試圖從遠端伺服器獲取也無法正常工作,直到我提供grantsIP。我的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

我有兩個問題:

  1. 如何特定 IPmysql遠端登錄(在我的情況下,從 192.168.13.2 )?
  2. 是否有必要為應用程序(使用 MySQL)grants提供主 IP,即使我正在嘗試從另一個 IP 中的應用程序?還是我錯過了什麼?

讓我以更格式的形式回答:

  • MySQL 伺服器不管理伺服器上的客戶端 ip,也不管理客戶端上的傳出。伺服器可以選擇 IP 地址僅用於偵聽。

伺服器只需將客戶端 IP 與權限表進行比較並允許或拒絕訪問。我不知道如何告訴 mysql 客戶端(包括使用專用傳出 ip 的庫)的方法。

你可以做什麼:

萬用字元使 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

引用自:https://dba.stackexchange.com/questions/166400