# my.cnf / my.ini [mysqld]
bind-address = 0.0.0.0 # 監聽所有介面,或具體內網 IP
# 重啟生效
systemctl restart mysqld
-- 指定 IP(推薦生產)
CREATE USER 'app'@'10.0.0.5' IDENTIFIED BY 'strong_pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON `prod`.* TO 'app'@'10.0.0.5';
-- 通配符(僅測試環境)
CREATE USER 'app'@'%' IDENTIFIED BY 'strong_pass';
GRANT ALL PRIVILEGES ON *.* TO 'app'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# iptables
iptables -I INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT
service iptables save
# firewalld
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
# 云安全組/安全組:入站規則 TCP 3306 來源 10.0.0.0/8
# 客戶端測試
mysql -h db_server_ip -u app -p'strong_pass' -P 3306 -e "SELECT 1;"
# 或 telnet
telnet db_server_ip 3306
%。REQUIRE SSL,客戶端配置 --ssl-mode=VERIFY_CA。max_connect_errors、connect_timeout 防暴力破解。mysql.user、information_schema.processlist。| 錯誤 | 原因 | 解決 |
|---|---|---|
| ERROR 2003 (HY000) | 網路不通/防火牆/bind-address | 檢查 3 步驟 |
| ERROR 1045 (28000) | 帳號/密碼/Host 不匹配 | 核對 user 表、授權語句 |
| ERROR 2026 (HY000) | SSL 握手失敗 | 客戶端加 --ssl-mode=DISABLED 或配置 CA |
| Host 'x.x.x.x' is not allowed | 帳號 Host 欄位不匹配 | 建立對應 Host 帳號或用 % |
三步驟(bind-address、授權、防火牆)缺一不可,按表排查即可通。