全新安裝的 MySQL 預設 bind-address = 127.0.0.1,導致 3306 埠僅本機可訪問。遠程連線時 telnet ip 3306 不通,錯誤通常為 Can't connect to MySQL server (10061/111)。
[mysqld]
# 註釋或刪除預設綁定
# bind-address = 127.0.0.1
# 方案 A:綁定所有介面 (推薦)
bind-address = 0.0.0.0
# 方案 B:指定具體業務 IP (更安全)
# bind-address = 192.168.1.100
# 確保未啟用 skip-networking
# skip-networking
修改後重啟:systemctl restart mysqld 或 service mysql restart。
[mysqld]
bind-address = 0.0.0.0
# 或註釋掉 bind-address 行
重啟服務:net stop mysql && net start mysql。
MySQL 8.0+ 建議用 CREATE USER + GRANT,舊版可直接 GRANT 隱式建立。
-- 允許指定 IP 訪問所有庫所有表
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass#2024';
GRANT ALL PRIVILEGES ON `mydb`.* TO 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;
-- 或允許任意 IP (僅內網/測試環境)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass#2024';
GRANT ALL PRIVILEGES ON `mydb`.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
注意:MySQL 8.0 預設採用 caching_sha2_password 插件,舊版驅動可能不支援。若連線失敗,可指定插件:
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass#2024';
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
ufw allow 3306/tcp
ufw reload
阿里雲/騰訊雲/AWS/Azure 等控制台需額外在「安全組/防火牆」規則放行 3306 入站。
# 客戶端機器測試
telnet 3306
# 或
mysql -h -u app_user -p
% 全網暴露。REQUIRE SSL 於 GRANT 中指定。mysql.user 表異常帳號。配置 → 授權 → 放行,三步完成遠程訪問閉環。