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

MySQL 修改資料目錄完整指南:避開 ERROR 2002 (HY000) Socket 連線失敗陷阱

     編輯:MySQL 綜合教學

MySQL 修改資料目錄完整指南:避開 ERROR 2002 (HY000) Socket 連線失敗陷阱

遷移 MySQL datadir 是常見運維操作,但許多人遷移後啟動服務正常,卻發現客戶端無法連線,報錯:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

本文詳解遷移標準流程、失敗根因與三種解決方案。

標準遷移流程(5 步)

  1. 停止服務
    service mysqld stop
  2. 建立新目錄並遷移資料
    mkdir -p /data
    mv /var/lib/mysql /data/
  3. 修改 my.cnf
    vi /etc/my.cnf
    [mysqld]
    datadir=/data/mysql
    socket=/data/mysql/mysql.sock
  4. 修改啟動腳本(/etc/init.d/mysqld)

    將腳本內 datadir=/var/lib/mysql 改為 datadir=/data/mysql

  5. 啟動服務
    service mysqld start

為什麼會報 ERROR 2002?

服務端已正確讀取新 socket 路徑並啟動,但客戶端程式(mysql 命令列)仍去預設路徑 /var/lib/mysql/mysql.sock 尋找 Socket 檔案。MySQL 客戶端預設 Socket 路徑在編譯時固化,不受 [mysqld] 區塊影響。

三種解決方案(任選一)

方案一:建立軟連結(最快、最兼容)

ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock
service mysqld restart

客戶端找到舊路徑軟連結 → 指向新 Socket → 連線成功。

方案二:在 my.cnf 客戶端區塊指定 Socket

vi /etc/my.cnf
[mysql]
socket=/data/mysql/mysql.sock

mysql 客戶端啟動時會讀取 [mysql] 區塊配置,直接使用新路徑。

方案三:修正目錄權限(常被忽略)

chown -R mysql:mysql /data/mysql/
chmod 660 /data/mysql/test/*

確保 MySQL 進程使用者對新目錄有完整讀寫權限。

驗證遷移成功

mysql -u root -p
# 成功進入交互模式表示遷移完成

SHOW VARIABLES LIKE 'datadir';
SHOW VARIABLES LIKE 'socket';

遷移前檢查清單

  • 新分區掛載點正確、空間充足、檔案系統支援大檔案
  • SELinux/AppArmor 政策允許 MySQL 存取新路徑(semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?")
  • 備份原 my.cnf 與啟動腳本,便於回滾
  • 遷移後執行 mysqlcheck -A --auto-repair 檢查表完整性
核心心法:服務端與客戶端 Socket 路徑必須一致。方案一兼容性最好(不改動任何客戶端配置),方案二最標準,方案三常被遺漏但同樣關鍵。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved