在 CentOS 8 中開放 MySQL 默認端口 3306,需要配置防火墻和 SELinux。以下是詳細步驟:
1. 開放防火墻端口(Firewalld)
CentOS 8 默認使用 firewalld
管理防火墻,執行以下命令開放 3306 端口:
# 開放 TCP 3306 端口
sudo firewall-cmd --permanent --add-port=3306/tcp# 重載防火墻規則使其生效
sudo firewall-cmd --reload# 驗證端口是否開放
sudo firewall-cmd --list-ports
輸出示例:
3306/tcp
2. 配置 SELinux 允許 MySQL 訪問 3306 端口
若 SELinux 處于 enforcing 模式,還需配置 SELinux 策略:
# 檢查 SELinux 是否允許 MySQL 使用 3306 端口
sudo semanage port -l | grep mysql# 如果未列出 3306,添加端口(通常不需要,MySQL 默認已關聯 3306)
sudo semanage port -a -t mysql_port_t -p tcp 3306
3. 驗證 MySQL 是否監聽 3306 端口
確保 MySQL 服務正常運行且監聽 3306 端口:
# 檢查 MySQL 服務狀態
sudo systemctl status mysqld# 查看端口監聽情況(確認 3306 端口已監聽)
sudo ss -tulpn | grep :3306
輸出示例:
tcp LISTEN 0 128 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=1234,fd=22))
4. 配置 MySQL 允許遠程訪問(可選)
默認情況下,MySQL 僅允許本地訪問。若需遠程連接,需修改配置文件:
# 編輯 MySQL 配置文件
sudo vi /etc/my.cnf # 或 /etc/mysql/my.cnf# 添加或修改以下行(注釋掉 bind-address 或設置為 0.0.0.0)
bind-address = 0.0.0.0 # 允許所有 IP 訪問
# 或指定特定 IP
bind-address = 192.168.1.100 # 僅允許該 IP 訪問# 重啟 MySQL 服務
sudo systemctl restart mysqld
5. 驗證遠程連接
在另一臺機器上使用 mysql
客戶端測試連接:
mysql -h your_server_ip -u love -p
若遇到連接問題,可檢查:
- 服務器是否有公網 IP 且 3306 端口已在云服務商防火墻開放
- MySQL 用戶是否被授權從遠程主機連接(
CREATE USER 'love'@'%' ...
)
注意事項
-
安全風險:開放 3306 端口會暴露數據庫,請確保:
- 使用強密碼
- 限制允許訪問的 IP(如
bind-address
設置) - 定期備份數據
-
端口沖突:若 3306 被其他服務占用,可修改 MySQL 監聽端口:
# 在 /etc/my.cnf 中添加或修改 port = 3307# 重啟 MySQL 和防火墻 sudo systemctl restart mysqld sudo firewall-cmd --permanent --remove-port=3306/tcp sudo firewall-cmd --permanent --add-port=3307/tcp sudo firewall-cmd --reload
完成以上步驟后,MySQL 服務即可通過 3306 端口被外部訪問。