錯誤日誌顯示:
080329 16:01:29 [ERROR] Can't start server: Bind on unix socket: No such file or directory
[ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock?
[ERROR] Aborting
ps aux | grep mysqld 確無殘留進程。ls -ld /var/run/mysqld 發現目錄不存在。rm -rf /var/run/* 清理臨時檔案,導致 /var/run/mysqld 目錄被誤刪。MySQL 啟動腳本預期目錄存在且屬主為 mysql:mysql,缺失則無法建立 socket 檔案。mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
chmod 755 /var/run/mysqld
systemctl start mysqld
/var/run (或 /run) 屬於 tmpfs 記憶體檔案系統,**重開機自動清空**。/var/run/mysqld 目錄並設定權限,但此目錄**不會**由 systemd 自動重建 (除非啟用 RuntimeDirectory=mysqld)。/var/run 或套件升級移除舊版目錄,皆會導致此問題。編輯 /usr/lib/systemd/system/mysqld.service (或 /etc/systemd/system/mysqld.service.d/override.conf):
[Service]
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755
# 系統啟動時自動建立 /run/mysqld 並設定擁有者為 User=Group=mysql
重載生效:systemctl daemon-reload && systemctl restart mysqld。
ls -ld /run/mysqld
# drwxr-xr-x 2 mysql mysql 40 Jan 15 10:00 /run/mysqld
systemctl status mysqld # active (running)
| 錯誤現象 | 常見原因 | 解決方向 |
|---|---|---|
| Bind on TCP port: Address already in use | 3306 埠被佔用 | netstat -tlnp | grep 3306 找出佔用進程 kill 或改 port |
| Permission denied on /var/lib/mysql | 資料目錄權限錯誤 | chown -R mysql:mysql /var/lib/mysql |
| InnoDB: Unable to lock ./ibdata1 | 多實例共用資料目錄 | 檢查 datadir 設定、innodb_lock_wait_timeout |
| Fatal error: Can't open and lock privilege tables | mysql 系統表損毀/遺失 | mysql_install_db 或從備份還原 |