[mysqld]
# 註釋或修改 bind-address
# bind-address = 127.0.0.1 # 默認僅本地
bind-address = 0.0.0.0 # 監聽所有網卡(推薦)
# 或指定具體業務 IP
# bind-address = 192.168.1.100
修改後必須重啟 MySQL:systemctl restart mysqld 或 net restart mysql
-- 方式一:任意主機訪問(開發/測試)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app_user'@'%';
-- 方式二:指定網段(生產推薦)
CREATE USER 'app_user'@'10.0.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app_user'@'10.0.%';
-- 方式三:指定單 IP
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app_user'@'192.168.1.50';
FLUSH PRIVILEGES;
# CentOS 7+ firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# Ubuntu ufw
ufw allow 3306/tcp
# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# Windows 防火牆
netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306
netstat -ntlp | grep 3306
# 輸出應包含 0.0.0.0:3306 或指定 IP:3306
ss -ntlp | grep 3306
# 命令行
mysql -h 192.168.1.100 -u app_user -p -e "SELECT USER(), VERSION();"
# 圖形工具
# Navicat / DataGrip / Workbench / DBeaver
# Host: 192.168.1.100, Port: 3306, User: app_user, Password: ******
| 現象 | 可能原因 | 排查命令 |
|---|---|---|
| Connection refused | bind-address 錯誤/服務未啟動 | netstat -ntlp, systemctl status mysqld |
| Host 'x.x.x.x' is not allowed | 用戶主機授權不匹配 | SELECT user, host FROM mysql.user; |
| Access denied | 密碼錯誤/權限不足 | SHOW GRANTS FOR 'user'@'host'; |
| Timeout | 防火牆/安全組/網絡不通 | telnet ip 3306, nc -zv ip 3306 |
| SSL connection error | 8.0 默認 SSL,客戶端不支持 | 連接串添加 ?useSSL=false 或配置 SSL |
DELETE FROM mysql.user WHERE user='root' AND host!='localhost'; FLUSH PRIVILEGES;require_secure_transport=ONaudit_log 插件記錄登錄、DDL、敏感操作validate_password 強制過期策略caching_sha2_password,舊客戶端需指定 --default-auth=mysql_native_password 或創建用戶時指定 IDENTIFIED WITH mysql_native_password BY 'pass'