本文以 Windows 7 客戶端連接 Linux(192.168.0.53)MySQL 為例,詳細演示命令列連線語法、兩大高頻報錯(Can't connect、Access denied)的根因分析與解決方案,並提供 bind-address 綁定調整、遠程賬號授權、防火牆/雲安全組放行的完整檢查清單。
mysql -h 192.168.0.53 -P 3306 -u vicky -padmin
-h:目標主機 IP-P:端口(預設 3306)-u:用戶名-p:密碼(緊跟 -p 無空格)可能原因:
systemctl start mysqld 或 service mysql start/etc/mysql/my.cnf 註釋 bind-address = 127.0.0.1 或改為 0.0.0.0,重啟服務iptables -A INPUT -p tcp --dport 3306 -j ACCEPT 或雲控制台放行驗證監聽地址:
netstat -anp | grep 3306 # 正常應顯示 0.0.0.0:3306 或 :::3306
根因:root 預設僅允許 localhost 登入,mysql.user 表中無 % 或客戶端 IP 的授權記錄。
SELECT User, Host FROM mysql.user; -- 僅顯示 root@localhost
-- 建立 vicky@% 允許任意 IP 連線,密碼 admin GRANT ALL PRIVILEGES ON *.* TO 'vicky'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION; FLUSH PRIVILEGES;
生產環境建議將 % 縮小為具體應用伺服器 IP 段,並遵循最小權限原則。
| 層級 | 檢查項 | 命令/操作 |
|---|---|---|
| 服務 | MySQL 運行狀態 | systemctl status mysqld |
| 配置 | bind-address | grep bind-address /etc/mysql/my.cnf |
| 網路 | 端口監聽 | netstat -anp | grep 3306 |
| 防火牆 | 3306 放行 | firewall-cmd --add-port=3306/tcp --permanent |
| 賬號 | 遠程授權 | SELECT User, Host FROM mysql.user; |
| 雲端 | 安全組規則 | 控制台入站規則添加 3306 |
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | +--------------------+