萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 開啟遠程訪問完整指南:配置、授權與防火牆三步走

核心障礙:MySQL 預設只綁定 127.0.0.1

全新安裝的 MySQL 預設 bind-address = 127.0.0.1,導致 3306 埠僅本機可訪問。遠程連線時 telnet ip 3306 不通,錯誤通常為 Can't connect to MySQL server (10061/111)。

步驟一:修改配置檔開放綁定位址

Linux (my.cnf / mysqld.cnf)

[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。

Windows (my.ini)

[mysqld]
bind-address = 0.0.0.0
# 或註釋掉 bind-address 行

重啟服務:net stop mysql && net start mysql。

步驟二:建立遠程訪問帳號並授權

MySQL 8.0+ 建議用 CREATE USER + GRANT,舊版可直接 GRANT 隱式建立。

通用授權語句 (MySQL 5.7/8.0 通用)

-- 允許指定 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';

步驟三:放行防火牆 3306 埠

firewalld (CentOS 7+/RHEL 7+)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

iptables (傳統)

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

ufw (Ubuntu/Debian)

ufw allow 3306/tcp
ufw reload

雲廠商安全組

阿里雲/騰訊雲/AWS/Azure 等控制台需額外在「安全組/防火牆」規則放行 3306 入站。

驗證連通性

# 客戶端機器測試
telnet  3306
# 或
mysql -h  -u app_user -p

安全加固建議

  • 僅對應用伺服器 IP 段開放,避免 % 全網暴露。
  • 強制 SSL 連線:REQUIRE SSL 於 GRANT 中指定。
  • 定期輪換密碼,審計 mysql.user 表異常帳號。
  • 考慮使用 SSH 隧道或 VPN 代替直連。

配置 → 授權 → 放行,三步完成遠程訪問閉環。

copyright © 萬盛學電腦網 all rights reserved