首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux MySQL 開啟遠程訪問完整指南:配置文件、授權、防火牆、驗證全流程

     編輯:MySQL 資料庫相關知識

三步走核心流程

  1. 配置文件綁定 0.0.0.0
  2. 授權遠程用戶/主機
  3. 防火牆/安全組放行 3306

1. 修改 my.cnf 綁定地址

# 典型路徑:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf
# 找到 [mysqld] 區塊
bind-address = 0.0.0.0
# 或註釋掉默認的 bind-address = 127.0.0.1
# 修改後必須重啟:systemctl restart mysqld

2. 數據庫授權(兩種等效方式)

方式 A:GRANT 授權(推薦,5.7+)

-- 允許用戶 admin 從 192.168.1.100 訪問所有庫
CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'StrongPwd123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.100' WITH GRANT OPTION;
FLUSH PRIVILEGES;

方式 B:直接操作 mysql.user 表(舊版兼容)

USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

關鍵區別:GRANT 會自動創建用戶(若不存在)並刷新權限;直接 UPDATE 易漏刷新、易產生重複主鍵錯誤(Duplicate entry '%-root' for key 'PRIMARY')。

3. 防火牆與雲安全組

環境命令示例
firewalld (CentOS 7/8)firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload
iptablesiptables -A INPUT -p tcp --dport 3306 -j ACCEPT && service iptables save
ufw (Ubuntu/Debian)ufw allow 3306/tcp
阿里云/騰訊雲安全組控制台 → 安全組 → 入站規則 → 添加 TCP 3306,來源 0.0.0.0/0 或限定 IP 段

4. 連接驗證

# 客戶端測試
mysql -h <服務器公網IP> -u admin -pStrongPwd123! -P 3306

# 服務端檢查連接
SHOW PROCESSLIST;
SELECT Host, User FROM mysql.user WHERE User='admin';

常見報錯速查表

錯誤碼/信息原因解決
ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed用戶 Host 欄不匹配GRANT ... TO 'user'@'x.x.x.x' 或 '@%'
ERROR 2003 (HY000): Can't connect to MySQL server網絡不通/防火牆/bind-addresstelnet IP 3306、檢查防火牆、my.cnf bind-address
ERROR 1045 (28000): Access denied密碼錯誤/插件不匹配確認密碼、authentication_plugin (caching_sha2_password vs mysql_native_password)
SSL connection error客戶端/服務端 SSL 協議不一致加 --ssl-mode=DISABLED 或統一 TLS 版本

安全加固建議

  • 禁用 root 遠程登入:RENAME USER 'root'@'%' TO 'root'@'localhost';
  • 最小權限:應用賃戶僅授予所需庫 GRANT SELECT,INSERT,UPDATE ON app_db.* TO 'app'@'%';
  • 啟用 SSL:REQUIRE SSL 強制加密傳輸。
  • 審計日志:安裝 MariaDB Audit Plugin 或開啟 general_log 記錄登入嘗試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved