在使用 MySQL 數據庫時,遇到這樣的問題:
本地可以連接 MySQL,但遠程機器連接時,總是報錯
Host ... is not allowed to connect to this MySQL server
。
這通常是因為 MySQL 的用戶權限或配置限制了遠程訪問。
1. 登錄 MySQL 數據庫
首先,使用本地命令行登錄 MySQL:
mysql -u root -p
輸入 root 用戶的密碼進入數據庫。
2. 切換到 mysql 系統庫
MySQL 的用戶權限存放在 mysql
數據庫中,我們需要切換到它:
USE mysql;
3. 查看當前用戶和主機權限
執行以下命令查看當前 MySQL 用戶的 host 設置:
SELECT User, Host FROM mysql.user;
你會看到一張表,例如:
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
注意到 root
用戶的 Host
是 localhost
,這表示它 只能從本機連接,無法被遠程機器連接。
4. 修改 root 用戶的 Host 為 %
要允許 root 用戶從任意主機連接,需要把它的 Host
改成 %
(表示任意主機):
UPDATE mysql.user SET host='%' WHERE user='root' AND host='localhost';
5. 刷新權限生效
修改完權限后,需要刷新權限表才能生效:
FLUSH PRIVILEGES;
執行以下命令查看當前 MySQL 用戶的 host 設置:
SELECT User, Host FROM mysql.user;
你會看到一張表,root的host被設置為了%,表示可以接受遠程連接
+------------------+-----------+
| User | Host |
+------------------+-----------+
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
不出意外的話,現在你已經可以進行遠程連接了,如果還有問題可以進行6-7的排查
6. 檢查 MySQL 配置文件
有時候,MySQL 的配置文件 my.cnf
(或 my.ini
)會限制綁定的地址,默認只監聽 127.0.0.1
。
-
打開配置文件:
vim /etc/my.cnf
-
找到
[mysqld]
部分,修改:bind-address = 0.0.0.0
這表示監聽所有 IP,而不僅是本機。
-
保存后,重啟 MySQL:
systemctl restart mysqld
7. 確認防火墻是否開放 3306 端口
MySQL 默認端口是 3306
,linux為例確保服務器防火墻允許遠程訪問:
# 查看防火墻狀態
firewall-cmd --list-all# 開放 3306 端口(僅 firewalld 示例)
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
8. 總結
要解決 MySQL 無法遠程連接的問題,可以按照下面的步驟排查:
- 修改
mysql.user
表,把 root 的Host
改為%
- 刷新權限
- 檢查是否可以鏈接,不可以的話需要檢查配置和端口防火墻
- 檢查
my.cnf
配置,確保bind-address
是0.0.0.0
- 檢查防火墻是否開放 3306 端口