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

CentOS 修改 MySQL 資料目錄 datadir 完整操作:遷移、權限、SELinux、Socket 修正

     編輯:MySQL 綜合教學

CentOS 修改 MySQL 資料目錄 datadir 完整操作:遷移、權限、SELinux、Socket 修正

將 MySQL 資料目錄從預設 /var/lib/mysql 遷移至大容量掛載點(如 /home/data),需同步修改配置檔、啟動腳本、Socket 路徑、SELinux 上下文。本文提供最小化停機、可回滾的標準化流程。

1. 停止服務並複製資料

service mysqld stop
cp -Rp /var/lib/mysql /home/data   # -p 保留權限、時間戳、SELinux 上下文
chown -R mysql:mysql /home/data

2. 修改主配置檔 /etc/my.cnf

[mysqld]
datadir=/home/data
socket=/home/data/mysql.sock

# 建議同步加入 client 區段,避免客戶端連不上
[client]
socket=/home/data/mysql.sock

3. 修改啟動腳本 /etc/init.d/mysqld

# 找到 datadir 變數行,修改為
datadir="/home/data"

4. 啟動驗證

service mysqld start

# 若啟動失敗,嘗試臨時關閉 SELinux
setenforce 0
service mysqld start

5. 客戶端連線 Socket 不匹配修正

現象:mysql -uroot -p 報 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'。

原因:客戶端讀取 /etc/my.cnf 的 [client] socket,若未設則用編譯時預設 /var/lib/mysql/mysql.sock。

# 在 /etc/my.cnf 追加/確認
[client]
socket=/home/data/mysql.sock

# 或連線時顯式指定
mysql -uroot -p -S /home/data/mysql.sock

6. SELinux 正式上下文設定(生產環境必做)

# 1. 查看預設上下文
ls -Z /var/lib/mysql
# system_u:object_r:mysqld_db_t:s0

# 2. 給新目錄打標
semanage fcontext -a -t mysqld_db_t "/home/data(/.*)?"
restorecon -Rv /home/data

# 3. 驗證
ls -Z /home/data
# 應顯示 mysqld_db_t

完成後可重新 setenforce 1 開啟 SELinux。

7. 回滾方案

service mysqld stop
mv /home/data /var/lib/mysql   # 或恢復備份
# 還原 my.cnf、init.d 腳本
service mysqld start

關鍵檢查清單

  • ✅ cp -Rp 保留屬性
  • ✅ chown mysql:mysql
  • ✅ my.cnf [mysqld] + [client] 同步修改 socket
  • ✅ init.d 腳本 datadir 同步
  • ✅ SELinux 上下文 mysqld_db_t
  • ✅ 防火牆/安全組無阻擋

按清單逐項核對,可確保遷移零故障、秒級回滾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved