虛擬機(VMware/VirtualBox)內 Linux MySQL 預設僅允許本地連接,遠程訪問需同時解決資料庫授權與系統防火牆兩層限制。
# 1. 進入 MySQL 控制台 mysql -u root -p # 2. 授權 root 遠程訪問(% 代表任意 IP) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongPass123!' WITH GRANT OPTION; # 3. 刷新權限 FLUSH PRIVILEGES; # 4. 驗證用戶宿主 SELECT User, Host FROM mysql.user WHERE User='root'; # 應顯示 root | % 及 root | localhost
安全建議:生產環境禁止 root 遠程登入,應建立專用業務帳號並限制具體 IP:
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'AppPass456@'; GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app_user'@'192.168.1.%'; FLUSH PRIVILEGES;
# 1. 編輯規則文件 vi /etc/sysconfig/iptables # 2. 在 COMMIT 前插入(建議放在 22 端口規則後) -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT # 完整示例: *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
# 3. 重啟防火牆生效 service iptables restart # 4. 驗證規則 iptables -L -n -v | grep 3306
| 環境 | 檢查項 |
|---|---|
| 阿里雲/騰訊雲/AWS | 安全組/安全組規則入站開放 TCP 3306 |
| VMware NAT 模式 | 虛擬網絡編輯器 → NAT 設置 → 端口轉發 3306 |
| VirtualBox | 網絡 → 端口轉發 → 宿主 3306 → 客體 3306 |
| Docker 容器 | -p 3306:3306 映射,容器內 bind-address=0.0.0.0 |
# /etc/my.cnf 或 /etc/mysql/my.cnf [mysqld] bind-address = 0.0.0.0 # 監聽所有介面,預設 127.0.0.1 # 修改後需重啟 service mysqld restart
# 宿主機/其他機器 mysql -h 192.168.16.128 -u root -p # 或使用 Navicat、DataGrip 等 GUI 工具測試
telnet 192.168.x.x 3306 通 → 網絡/防火牆通,檢查 MySQL 授權/bind-address。telnet 不通 → 檢查 iptables、雲安全組、虛擬機網絡模式、MySQL 進程是否監聽 netstat -ntlp | grep 3306。Host 'x.x.x.x' is not allowed to connect → 權限表無對應 Host,重新 GRANT。Authentication plugin 'caching_sha2_password' not supported → 客戶端版本過低,改用 mysql_native_password 或升級驅動。