預設 MySQL 僅監聽 127.0.0.1,開放遠端需完成配置檔、帳號授權、作業系統防火牆、雲端安全組四層設定,缺一不可。
# /etc/mysql/my.cnf 或 my.ini [mysqld] # bind-address = 127.0.0.1 # 註解或改為 0.0.0.0 監聽所有介面 bind-address = 0.0.0.0 # 或具體業務 IP:bind-address = 192.168.1.100
重啟服務:systemctl restart mysql / /etc/init.d/mysql restart。
mysql -u root -p USE mysql; SELECT user, host FROM user; -- 確認現有 host 值 -- 方案 A:修改現有 root host(不建議生產使用) UPDATE user SET host = '%' WHERE user = 'root' AND host = '127.0.0.1'; FLUSH PRIVILEGES; -- 方案 B:建立專用遠端帳號(最佳實務) GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%' IDENTIFIED BY 'strong_password' WITH GRANT OPTION; -- 僅允許特定 IP GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'192.168.1.102' IDENTIFIED BY 'strong_password' WITH GRANT OPTION; FLUSH PRIVILEGES;
# CentOS 7+ firewalld firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload # Ubuntu ufw ufw allow 3306/tcp # iptables 經典 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT service iptables save
控制台 → 安全組規則 → 入站規則 → 新增:TCP 3306,來源 0.0.0.0/0 或具體 CIDR。
# 遠端機器 mysql -h 伺服器公網IP -u app_user -p telnet 伺服器公網IP 3306 # 測試埠通達性
安全加固建議:
• 嚴禁 root 使用%',建立專用帳號並限制來源 IP。
• 啟用 SSL 加密傳輸(REQUIRE SSL)。
• 非必要不開放公網,改用 SSH 隧道或 VPN。
• 定期審計SHOW GRANTS、SELECT user,host FROM mysql.user。