MySQL 預設僅允許本機連線,遠程連線會遭遇 ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect to this MySQL server。本文提供三種標準解決方案,並說明防火牆與網路層面的必要配合。
mysql -u root -p
USE mysql;
UPDATE user SET host = '%' WHERE user = 'root';
SELECT host, user FROM user; -- 驗證
FLUSH PRIVILEGES;
適用場景:快速開放既有 root 帳號遠程存取。風險:安全性極低,生產環境嚴禁。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
mysql -h localhost -u root -p -e "
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"
| 層面 | 檢查項目 | 指令/操作 |
|---|---|---|
| MySQL 綁定位址 | bind-address 是否為 0.0.0.0 或具體 IP | grep bind-address /etc/my.cnf → 設為 0.0.0.0 或註解掉 |
| 埠監聽確認 | 3306 埠是否在 LISTEN 狀態 | netstat -ntlp | grep 3306 或 ss -ntlp | grep 3306 |
| 系統防火牆 | firewalld/iptables 是否開放 3306 | firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload |
| 雲端安全群組 | AWS SG / Azure NSG / GCP Firewall 是否允許入站 3306 | 控制台配置入站規則:來源 IP/範圍、通訊協定 TCP、埠 3306 |
| SELinux/AppArmor | 是否阻擋 mysqld 網路連線 | getsebool -a | grep mysql、aa-status |
systemctl status mysqldbind-address = 0.0.0.0 並重啟服務GRANT ... TO 'user'@'%' ...FLUSH PRIVILEGESmysql -u user -p -h 127.0.0.1mysql -u user -p -h server_iproot@%,✅ 建立專用帳號 app_user@%GRANT ALL ON *.*,✅ 限定 GRANT SELECT,INSERT,UPDATE ON app_db.*REQUIRE SSL)SELECT host, user FROM mysql.user遵循「授權法 + 網路層防護 + 最小權限」三位一體策略,即能安全、穩定地解決 MySQL 遠程連線需求。