MySQL Command Line Client 輸入密碼後立即閃退 (視窗關閉),是新手最常遇到的挫折。絕大多數原因是 **MySQL 服務未啟動**,其次為連接參數錯誤、配置檔問題、權限不足。本文提供系統化排查流程、常見錯誤代碼對照與永久解決方案。
| 現象 | 核心原因 | 驗證方式 |
|---|---|---|
| 輸入密碼後視窗立即關閉 | **MySQL 服務未啟動** (最常見,>90%) | net start mysql / 服務管理員 |
| ERROR 2003 (HY000): Can't connect to MySQL server | 服務未啟動 / 埠錯誤 / 防火牆 / bind-address | telnet localhost 3306 |
| ERROR 1045 (28000): Access denied | 密碼錯誤 / 帳號不存在 / 主機不匹配 | 重設 root 密碼 |
| ERROR 2002 (HY000): Can't connect through socket | Linux/Unix socket 路徑錯誤 / 服務掛掉 | 檢查 my.cnf socket 參數 |
cmd> net start mysql
cmd> mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor...
mysql>
| 錯誤 | 原因 | 解決 |
|---|---|---|
| 服務啟動後自動停止 | my.ini 配置錯誤 (路徑、編碼、參數) | 檢查 .err 錯誤日誌,修正配置 |
| 錯誤 1067: 程序意外終止 | 資料目錄權限 / ibdata1 損壞 / 記錄檔不匹配 | 以管理員身分執行 mysqld --console 看即時輸出 |
| InnoDB: ibdata1 size 不符 | 手動修改 innodb_data_file_path 不匹配現有檔案 | 還原原配置或重建資料目錄 |
| Port 3306 已被佔用 | 另一 MySQL 執行個體/其他程式佔用 | netstat -ano | findstr 3306 找 PID 終止或改埠 |
my.ini 關鍵檢查點[mysqld]
# 基礎路徑 (必須存在、權限正確)
basedir="C:/Program Files/MySQL/MySQL Server 8.0/"
datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data/"
# 連接埠
port=3306
# 字元集 (8.0 預設 utf8mb4,5.7 常用 utf8)
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 允許遠端連線 (生產請限制具體 IP)
bind-address=0.0.0.0
# SQL 模式 (避免嚴格模式導入舊資料失敗)
sql_mode=NO_ENGINE_SUBSTITUTION
# InnoDB 核心 (依記憶體調整)
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1
⚠️ **修改 my.ini 後必須重啟服務生效**。編碼改為 UTF-8 導致無法啟動,通常是 datadir 路徑包含中文/特殊字元、或檔案本身編碼儲存錯誤 (需用 ANSI/UTF-8 無 BOM)。
# 1. 服務狀態
systemctl status mysqld
# 或
service mysql status
# 2. 啟動
systemctl start mysqld
# 3. 即時錯誤輸出 (最強診斷)
mysqld --console --user=mysql
# 4. 檢查錯誤日誌
tail -f /var/log/mysqld.log
# 或
tail -f /var/log/mysql/error.log
# 5. 連接測試
mysql -u root -p -h 127.0.0.1 -P 3306
mysqld --skip-grant-tables --consolesystemctl stop mysqld && mysqld_safe --skip-grant-tables &mysql -u rootFLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStr0ngP@ss!';
-- 5.7 以下
UPDATE mysql.user SET authentication_string=PASSWORD('NewStr0ngP@ss!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
#!/bin/bash
if ! mysqladmin ping -h localhost --silent; then
systemctl restart mysqld
echo "$(date) MySQL restarted" >> /var/log/mysql_health.log
fi
mysql_up、連線數、慢查詢、磁碟使用率
MySQL 閃退
│
├─► net start mysql / systemctl start mysqld ──► 成功? ──► 完成
│ │
│ └─► 失敗 ──► 查看 .err 日誌 / mysqld --console
│ │
│ ├─► 配置錯誤 ──► 修正 my.ini/my.cnf
│ ├─► 權限/目錄 ──► 修正 datadir 權限、擁有者
│ ├─► 檔案損壞 ──► 還原備份 / 重建資料目錄
│ └─► 埠衝突 ──► 修改 port / 終止佔用程序
│
└─► 服務已運行但仍閃退
│
├─► 密碼錯誤 ──► 重設 root 密碼
├─► 連接參數錯誤 ──► 確認 -h -P --protocol
└─► 用戶端版本不匹配 ──► 升級/降級 mysql client
MySQL 閃退 99% 是**服務未啟動**或**配置錯誤**。建立「服務自動啟動 + 健康檢查 + 錯誤日誌監控 + 定期備份驗證」四位一體維運體系,即可徹底消除此類基礎故障,專注於 SQL 優化與架構演進。