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

MySQL 啟動失敗:Can't start server - Bind on unix socket /var/run/mysqld/mysqld.sock 解決實錄

     編輯:MySQL 綜合教學

錯誤日誌顯示:

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

排查過程

  1. 檢查進程:ps aux | grep mysqld 確無殘留進程。
  2. 檢查 socket 目錄:ls -ld /var/run/mysqld 發現目錄不存在。
  3. 追溯原因:曾執行 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 會遺失?

  • /var/run (或 /run) 屬於 tmpfs 記憶體檔案系統,**重開機自動清空**。
  • 套件安裝時會建立 /var/run/mysqld 目錄並設定權限,但此目錄**不會**由 systemd 自動重建 (除非啟用 RuntimeDirectory=mysqld)。
  • 手動清理 /var/run 或套件升級移除舊版目錄,皆會導致此問題。

永久解決方案:systemd RuntimeDirectory

編輯 /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 use3306 埠被佔用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 tablesmysql 系統表損毀/遺失mysql_install_db 或從備份還原
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved