將資料庫遷移至伺服器後,嘗試遠程連線報錯:
ERROR 1130 (HY000): Host '192.168.1.3' is not allowed to connect to this MySQL server
原因:MySQL 預設安裝僅允許本機 (localhost/127.0.0.1) 連線,root 帳號的 host 欄位未包含遠程 IP 或通配符 %。
# 1. 本機登入 MySQL
mysql -u root -p
# 2. 切換到 mysql 系統庫
USE mysql;
# 3. 修改 root 帳號 host 為 %(允許所有 IP)
UPDATE user SET host = '%' WHERE user = 'root';
# 4. 驗證修改
SELECT host, user FROM user;
# 應顯示 root | % 記錄
# 5. 刷新權限生效
FLUSH PRIVILEGES;
生產環境建議限制具體 IP而非開放 %:
# 僅允許 192.168.1.0/24 網段
CREATE USER 'root'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
若授權後仍無法連線,檢查 MySQL 監聽地址:
# 查看監聽狀態
netstat -tunlp | grep 3306
# 若僅顯示 127.0.0.1:3306,需修改配置
# 編輯配置檔
vi /etc/my.cnf
# 找到 [mysqld] 區段
# 註釋或修改 bind-address
# bind-address = 127.0.0.1 → bind-address = 0.0.0.0
# 或直接註釋掉該行
# 重啟服務生效
systemctl restart mysqld
# CentOS 7+ firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# 雲廠商安全組:入站規則開放 TCP 3306,來源設為應用伺服器 IP
# 客戶端測試
mysql -h 192.168.1.100 -u root -p
# 成功進入 MySQL monitor 表示配置生效
bind-address = 0.0.0.0 監聽所有介面REQUIRE SSL)mysql.user 表,移除過期帳號