首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 綁定特定 IP 地址的兩種配置方式與安全最佳實踐

     編輯:MySQL 綜合教學

預設 MySQL 監聽 0.0.0.0:3306 (所有網卡介面),暴露於公網極度危險。限制僅監聽 127.0.0.1 (本機) 或內網特定 IP,是資料庫網路層面的第一道防線。

方式一:配置檔 bind-address (推薦、標準、持久化)

編輯 /etc/my.cnf 或 /etc/mysql/my.cnf:

[mysqld]
# 僅本機回環
bind-address = 127.0.0.1

# 或僅特定內網 IP (單 IP)
bind-address = 10.0.1.5

# MySQL 8.0+ 支援多 IP (逗號分隔)
bind-address = 127.0.0.1,10.0.1.5

重啟生效:systemctl restart mysqld。

方式二:啟動腳本傳參 --bind-address (臨時、測試、容器化適用)

編輯 /etc/init.d/mysql (SysVinit) 或 systemd 服務檔:

# SysVinit 範例
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --bind-address=127.0.0.1 &

# systemd 臨時覆蓋
systemctl edit mysqld
# 輸入:
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --bind-address=127.0.0.1 $MYSQLD_OPTS

驗證綁定結果

# 檢查監聽狀態
netstat -tlnp | grep 3306
# 輸出應僅顯示:
# tcp  0  0 127.0.0.1:3306  0.0.0.0:*  LISTEN  1234/mysqld

ss -tlnp | grep 3306  # 現代替代指令

進階安全組合拳

層面措施指令/配置
網路bind-address 限制介面bind-address = 127.0.0.1
防火牆僅允許應用伺服器 IP 存取 3306ufw allow from 10.0.1.0/24 to any port 3306
帳號root 僅 localhost,應用帳號指定 HostCREATE USER 'app'@'10.0.1.%' IDENTIFIED BY '...';
加密強制 SSL/TLS 連線REQUIRE SSL / mysql_ssl_rsa_setup
審計啟用審計日誌記錄登入/查詢plugin-load-add=audit_log.so

常見誤區

  • 以為 skip-networking 等同綁定本機:skip-networking 會完全禁用 TCP/IP,**只能用 Unix Socket 連線**,會導致部分語言驅動 (預設 TCP) 連線失敗。bind-address=127.0.0.1 仍保留 TCP 回環連線,相容性更好。
  • Docker 容器內綁定 127.0.0.1 導致宿主機無法連線:容器內 127.0.0.1 僅限容器內部。容器化部署應綁定 0.0.0.0,靠宿主機防火牆/安全群組控制存取,或使用 Docker Network 隔離。
  • 修改配置後未重啟:動態修改 SET GLOBAL bind_address **不支援**,必須重啟服務。

排查清單

  1. grep bind-address /etc/my.cnf /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 確認配置生效檔案。
  2. systemctl restart mysqld && sleep 2 && netstat -tlnp | grep 3306 驗證。
  3. 應用端測試連線:mysql -h 127.0.0.1 -u app -p。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved