預設 MySQL 僅允許 localhost 連線,遠程訪問會報 ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect。本文提供「改表法」「授權法」兩大核心方案,並補充防火牆、配置文件等易忽略細節。
mysql -u root -pUSE mysql;%(任意 IP)或指定 IP:
UPDATE user SET host = '%' WHERE user = 'root';
-- 或指定單 IP
UPDATE user SET host = '192.168.1.100' WHERE user = 'root';
FLUSH PRIVILEGES; 讓修改即時生效⚠️ 風險提示:root 開放 % 極不安全,生產環境請建立專用低權限賬號。
任意 IP 訪問:
GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%' IDENTIFIED BY 'StrongPass#2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;
限定單一 IP 訪問:
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.100' IDENTIFIED BY 'StrongPass#2024';
FLUSH PRIVILEGES;
僅開放特定庫/表:
GRANT SELECT, UPDATE ON mydb.orders TO 'readonly_user'@'%' IDENTIFIED BY 'ReadOnly#2024';
/etc/my.cnf 或 my.ini 中 bind-address = 0.0.0.0(預設 127.0.0.1),修改後重啟 systemctl restart mysqld。firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reloadufw allow 3306/tcpnetstat -antp | grep 3306 應顯示 0.0.0.0:3306 而非 127.0.0.1:3306。# 遠程測試
mysql -h 192.168.1.200 -u app_user -p -e "SELECT USER(), CURRENT_USER();"
輸出包含 app_user@192.168.1.x 即成功。
「授權法 + bind-address 0.0.0.0 + 防火牆精準放行 + 專用低權賬號」是生產環境標準姿勢。切記:動權限必刷新,改配置必重啟,開端口必最小化。