MySQL-Front 等 GUI 工具連線遠端 Linux MySQL,本質上是標準 TCP/IP 客戶端連線。必須滿足三個層面條件:
bind-address = 0.0.0.0 或具體內網 IPmysql -u root -p -e "SELECT host, user FROM mysql.user;"
-- 典型輸出:root 僅 localhost
+-----------+------+
| host | user |
+-----------+------+
| localhost | root |
+-----------+------+
-- 1. 建立用戶並指定允許連線的 Host (IP/網段/通配符)
CREATE USER 'duan'@'192.168.0.%' IDENTIFIED BY '123456';
-- 或任意主機 (僅開發測試)
-- CREATE USER 'duan'@'%' IDENTIFIED BY '123456';
-- 2. 授予必要權限 (最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON mas.* TO 'duan'@'192.168.0.%';
-- 全庫全表權限 (謹慎)
-- GRANT ALL PRIVILEGES ON *.* TO 'duan'@'192.168.0.%';
-- 3. 刷新權限 (8.0+ 通常自動生效)
FLUSH PRIVILEGES;
-- 4. 驗證
SELECT host, user FROM mysql.user WHERE user = 'duan';
-- 查看 root 現狀
SELECT host, user FROM mysql.user WHERE user = 'root';
-- 修改 root 允許任意主機 (極高風險,生產嚴禁!)
-- UPDATE mysql.user SET host = '%' WHERE user = 'root' AND host = 'localhost';
-- FLUSH PRIVILEGES;
-- 正確做法:保留 root 僅 localhost,建立專用遠程管理用戶
CREATE USER 'dba_remote'@'10.0.0.%' IDENTIFIED BY '強密碼!';
GRANT ALL PRIVILEGES ON *.* TO 'dba_remote'@'10.0.0.%' WITH GRANT OPTION;
# 編輯配置檔
vi /etc/my.cnf
# 或
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# 監聽所有網卡介面
bind-address = 0.0.0.0
# 或僅內網介面
# bind-address = 192.168.0.50
# 確保未啟用 skip-networking
# skip-networking = 0
# 重啟生效
systemctl restart mysqld
# CentOS/RHEL 7+ (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
# Ubuntu (UFW)
ufw allow from 192.168.0.0/24 to any port 3306
ufw reload
# iptables 直接
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 3306 -j ACCEPT
service iptables save
# 雲廠商安全組 (AWS/Azure/GCP/阿里雲/騰訊雲)
# 入站規則:協議 TCP、端口 3306、來源 應用伺服器安全組 ID 或 IP 段
生產-MySQL-192.168.0.50)192.168.0.50 (遠端 Linux IP)3306 (預設)duan (步驟二建立的用戶)123456UTF-8 / utf8mb4| 錯誤碼 | 訊息 | 原因 | 解決 |
|---|---|---|---|
| 1045 | Access denied for user 'xxx'@'xxx' | 用戶/密碼/Host 不匹配 | 檢查 mysql.user Host 欄位、密碼正確性、用戶名拼寫 |
| 2003 | Can't connect to MySQL server on 'xxx' | 網路不通/防火牆/bind-address | 檢查防火牆、bind-address=0.0.0.0、服務啟動狀態 |
| 2026 | SSL connection error | SSL 憑證/協議不匹配 | 客戶端設定「不使用 SSL」或配置正確憑證 |
| 2058 | Authentication plugin 'caching_sha2_password' not supported | 舊客戶端不支援 8.0 預設認證 | 用戶改 mysql_native_password:ALTER USER 'duan'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; |
| 1130 | Host 'xxx' is not allowed to connect | 用戶 Host 限制不包含客戶端 IP | 修改用戶 Host 為 % 或具體 IP/網段 |
CREATE USER、GRANT 隱式建用戶。現代工具可能不相容CREATE USER、mysql_native_passwordmysql_native_passwordcaching_sha2_password、移除 GRANT ... IDENTIFIED BY、需 CREATE USER + GRANT 分步、skip-name-resolve 預設關閉require_secure_transport=ON 強制加密audit_log 記錄所有連線操作DELETE FROM mysql.user WHERE user='root' AND host!='localhost';MySQL-Front 遠程連線本質是標準 MySQL 客戶端連線。遵循「專用帳號、最小權限、具體 Host、防火牆隔離、SSL 加密」五重防護,配合版本相容性處理 (8.0 認證插件)、網路通達性驗證,即能穩定、安全地實現圖形化遠程資料庫管理。