連接失敗通常與服務狀態、配置文件、用戶權限、網絡/防火墻相關,以下是系統化的排查步驟:
首先確認MySQL服務(mysqld
)是否處于運行狀態。使用以下命令查看服務狀態:
sudo systemctl status mysqld
sudo systemctl start mysqld
啟動;sudo systemctl enable mysqld
。默認情況下,MySQL僅允許localhost
(127.0.0.1)連接。需修改配置文件/etc/my.cnf
(或/etc/mysql/my.cnf
),找到[mysqld]
部分,將bind-address
設置為0.0.0.0
(允許所有IP連接)或服務器實際IP:
[mysqld]
bind-address = 0.0.0.0
修改后保存,重啟MySQL服務使配置生效:
sudo systemctl restart mysqld
CentOS默認啟用firewalld
,需開放MySQL的默認端口(3306):
# 添加3306端口到防火墻規則(永久生效)
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重新加載防火墻配置
sudo firewall-cmd --reload
若使用iptables
,可執行sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
并保存規則。
若需從遠程主機連接,需確保用戶擁有對應權限。登錄MySQL(mysql -u root -p
),執行以下命令:
-- 查看現有用戶及主機權限(確認是否有遠程訪問權限)
SELECT user, host FROM mysql.user;
-- 創建遠程用戶(示例:用戶名test,密碼123456,允許所有主機連接)
CREATE USER 'test'@'%' IDENTIFIED BY '123456';
-- 授予用戶所有數據庫的所有權限(生產環境建議限制為特定數據庫)
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;
-- 刷新權限(使更改立即生效)
FLUSH PRIVILEGES;
若用戶已存在,可直接修改權限或刪除重建。
在客戶端機器上,使用ping
和telnet
測試與MySQL服務器的連接:
# 測試服務器是否可達
ping <MySQL服務器IP>
# 測試3306端口是否開放(若telnet未安裝,執行sudo yum install telnet)
telnet <MySQL服務器IP> 3306
ping
不通,需檢查網絡配置或聯系網絡管理員;telnet
失敗,需重新排查防火墻或端口設置。若以上步驟均無法解決,查看MySQL錯誤日志獲取詳細信息。日志路徑通常為/var/log/mysqld.log
,使用以下命令查看最新日志:
sudo tail -n 100 /var/log/mysqld.log
日志中可能包含“Connection refused”“Access denied”“Port already in use”等關鍵錯誤,幫助進一步定位問題。
通過以上步驟逐一排查,可解決大部分CentOS下MySQL連接失敗的問題。若問題仍存在,建議根據錯誤日志中的具體信息調整配置或尋求專業技術支持。