本地 Navicat 連接遠程 MySQL 報錯:10060 - Can't connect to MySQL server on 'x.x.x.x' (10060) 或 1130 - Host 'x.x.x.x' is not allowed to connect。
-- 登錄服務器 MySQL
mysql -u root -p
-- 檢查現有用戶
SELECT User, Host, authentication_string FROM mysql.user;
-- 方案 A:創建允許遠程訪問的用戶(推薦)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON `mydb`.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
-- 方案 B:修改現有 root 允許遠程(不推薦生產)
-- ALTER USER 'root'@'%' IDENTIFIED BY 'StrongPass123!'; -- 8.0+
-- UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
-- FLUSH PRIVILEGES;
關鍵點:
Host='%' 表示允許任意 IP 連接;生產建議限制具體 IP 段(如 '10.0.%')caching_sha2_password 插件,Navicat 舊版可能不支持,需指定 mysql_native_password:
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
bind-address)# 編輯 my.cnf / my.ini
[mysqld]
# bind-address = 127.0.0.1 # 註釋或改為 0.0.0.0
bind-address = 0.0.0.0
127.0.0.1:僅本地回環0.0.0.0:監聽所有網卡firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports
# 臨時
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# 或編輯 /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
service iptables restart
阿里雲、騰訊雲、AWS 等控制台安全組/防火牆必須放行 3306 入站規則,來源可設為你的辦公 IP 或 0.0.0.0/0(不推薦)。
# 檢查 SELinux 狀態
getenforce
# 臨時關閉測試
setenforce 0
# 永久關閉:編輯 /etc/selinux/config -> SELINUX=disabled 並重啟
# 服務器本地測試
mysql -u app_user -p -h 127.0.0.1
# 客戶端測試
telnet server_ip 3306
# 或
nc -zv server_ip 3306
% 或具體 IP,插件兼容bind-address = 0.0.0.0 且已重啟telnet ip 3306 通暢逐項排查,99% 情況可解決。若仍失效,檢查 MySQL 錯誤日志 /var/log/mysqld.log 獲取詳細信息。