三步走核心流程
- 配置文件綁定 0.0.0.0
- 授權遠程用戶/主機
- 防火牆/安全組放行 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 |
| iptables | iptables -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-address | telnet 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 記錄登入嘗試。