首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 遠程訪問配置全攻略:bind-address、授權、防火牆三步走

     編輯:MySQL 綜合教學

MySQL 遠程訪問配置全攻略:bind-address、授權、防火牆三步走

現象:賬號密碼正確、權限已授,但遠程連不上,telnet ip 3306 不通。核心原因:MySQL 默認 bind-address = 127.0.0.1 僅監聽本地回環。

一、修改綁定地址(核心步驟)


vim /etc/my.cnf   # 或 /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到 [mysqld] 區段
# bind-address = 127.0.0.1   <-- 在行首加 # 註釋掉
# 或改為具體 IP(多網卡場景)
bind-address = 0.0.0.0       # 監聽所有介面(推薦內網環境)
# bind-address = 192.168.1.100  # 僅監聽特定內網 IP

保存後必須重啟:


systemctl restart mysqld   # 或 service mysql restart

驗證:


netstat -ntlp | grep 3306
# 應顯示 0.0.0.0:3306 或指定 IP:3306
telnet 192.168.1.100 3306  # 遠程機器測試

二、賬號授權(配合 bind-address)

方法 1:改表法(不推薦,5.7+ 已移除 password 欄位)


mysql -u root -p
USE mysql;
UPDATE user SET host = '%' WHERE user = 'root';
FLUSH PRIVILEGES;

方法 2:GRANT 授權法(標準、跨版本兼容)


-- 允許 kevin 從任意主機訪問所有庫所有表
GRANT ALL PRIVILEGES ON *.* TO 'kevin'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

-- 僅允許特定 IP
GRANT ALL PRIVILEGES ON *.* TO 'kevin'@'192.168.101.234' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

-- 僅特定庫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'%' IDENTIFIED BY 'apppass';

FLUSH PRIVILEGES;

查看權限:SHOW GRANTS FOR 'kevin'@'%';

三、防火牆放行 3306(常被遺漏)


# firewalld (CentOS 7+, Ubuntu 20.04+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# iptables (舊版)
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

# ufw (Ubuntu)
ufw allow 3306/tcp

四、雲服務器安全組(必檢)

阿里雲 / AWS / 騰訊雲 / 華為雲控制台 → 安全組/防火牆規則 → 入方向開放 TCP 3306,來源建議限定應用服務器 CIDR(如 10.0.0.0/8),禁止 0.0.0.0/0。

五、常見避坑清單

現象排查順序
本機連得上,遠程連不上1. bind-address 2. GRANT host='%' 3. 防火牆/安全組 4. SELinux/AppArmor
ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connectGRANT host 不匹配,需精確到 IP 或 %
telnet 通但報錯 "Authentication plugin 'caching_sha2_password' cannot be loaded"客戶端版本過低(<8.0),改用 mysql_native_password:ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';
連接慢(>5s)DNS 反向解析,skip-name-resolve=1 加入 my.cnf

六、生產環境加固建議

  1. 最小權限:業務賬號僅授予必要庫、表、列權限。
  2. IP 白名單:GRANT ... TO 'user'@'10.0.%' + 安全組 CIDR 双層防護。
  3. SSL 加密傳輸:REQUIRE SSL 強制加密,防內網劫持。
  4. 審計日誌:企業版 audit_log 或開源 MariaDB Audit Plugin 記錄所有登入/查詢。
  5. 定期輪換密碼:ALTER USER 'user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;

「bind-address 開放 → 賬號授權精確 → 防火牆/安全組放行」三步缺一不可,按清單逐項核對,遠程連接一次成功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved