遠程連接 MySQL 涉及網絡通達性、主機防火牆/安全軟件、數據庫賬號授權三層防護。本文提供生產環境可直接執行的標準化流程,強調「僅授權備份 IP、僅授 SELECT/LOCK TABLES 權限」的最小權限原則。
firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload (CentOS 7+)115.28.36.60(文中示例,實際以服務商提供為準)。mysql -u root -p
# 輸入 root 密碼進入 mysql> 交互界面
-- 僅授權 SELECT 與 LOCK TABLES(mysqldump --single-transaction 需鎖表)
GRANT SELECT, LOCK TABLES ON discuz.* TO 'ted'@'115.28.36.60' IDENTIFIED BY 'StrongPass123!';
-- 通配符 IP(不推薦生產):'%' 表示任意 IP
-- GRANT SELECT, LOCK TABLES ON discuz.* TO 'ted'@'%' IDENTIFIED BY 'StrongPass123!';
-- 全庫全表授權(極不推薦):*.*
-- GRANT SELECT, LOCK TABLES ON *.* TO 'ted'@'115.28.36.60' IDENTIFIED BY 'StrongPass123!';
-- 立即生效
FLUSH PRIVILEGES;
| 授權語法 | 生效範圍 | 風險等級 |
|---|---|---|
| db.* | 指定庫所有表 | 低 |
| db.table | 指定庫指定表 | 極低 |
| *.* | 所有庫所有表 | 高(含系統庫) |
SELECT Host, User FROM mysql.user WHERE User='ted';
-- 輸出應包含:115.28.36.60 | ted
SHOW GRANTS FOR 'ted'@'115.28.36.60';
-- 輸出應含:GRANT SELECT, LOCK TABLES ON `discuz`.* TO 'ted'@'115.28.36.60'
SELECT + LOCK TABLES:備份工具(mysqldump/xtrabackup)僅需讀取數據與短暫鎖表,無法修改、刪除、DDL、授權。audit_log 插件記錄所有遠程連接與操作。telnet 3306 不通 → 防火牆/安全組/安全狗攔截。Access denied → 賬號/密碼/IP 不匹配,檢查 mysql.user 表 Host 列。Host 'x.x.x.x' is not allowed to connect → skip_name_resolve=1 導致反解失敗,授權時用 IP 而非主機名。require_secure_transport。遵循「網絡→主機→數據庫」三層授權、最小權限、IP 綁定、審計日誌,可安全、合規地開放 MySQL 遠程備份通道。