首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux MySQL 數據目錄遷移完整操作指南 (/var/lib/mysql → /home/mysql_data)

     編輯:MySQL 資料庫相關知識

遷移前準備

  • 目標分區空間充足 (df -h /home)
  • 確認 MySQL 版本、配置文件路徑
  • 規劃停機窗口,通知業務方

標準遷移流程

1. 停止 MySQL 服務

service mysqld stop
# 或 systemctl stop mysqld
# 驗證進程已停
ps aux | grep mysql

2. 複製數據目錄 (保留屬性)

cd /var/lib
cp -a mysql /home/mysql_data/
# -a = -dR --preserve=all 遞歸保留所有屬性、時間戳、软連結
大數據量建議用 rsync -av /var/lib/mysql/ /home/mysql_data/mysql/ 可斷點續傳、顯示進度。

3. 修改配置文件 (三處)

/etc/my.cnf

[mysqld]
datadir=/home/mysql_data/mysql
socket=/home/mysql_data/mysql/mysql.sock
# 原行註釋備份
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock

/etc/init.d/mysqld (或 /etc/rc.d/init.d/mysqld)

# 修改 datadir 變量
datadir="/home/mysql_data/mysql"

/usr/bin/mysqld_safe

# 修改 DATADIR 變量
DATADIR="/home/mysql_data/mysql"

4. 創建 Socket 軟連結 (兼容舊客戶端)

ln -s /home/mysql_data/mysql/mysql.sock /var/lib/mysql/mysql.sock

5. 修正目錄權限

chown -R mysql:mysql /home/mysql_data/mysql
chmod 750 /home/mysql_data/mysql

6. 啟動驗證

service mysqld start
# 檢查錯誤日誌
tail -f /var/log/mysqld.log
# 或 journalctl -u mysqld -f

# 連接測試
mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
mysql -u root -p -e "SELECT @@datadir;"

systemd 管理環境 (CentOS 7+/RHEL 7+) 特殊處理

# 1. 編輯服務單元文件
systemctl edit mysqld
# 添加覆蓋配置
[Service]
ExecStartPre=/bin/bash -c "mkdir -p /home/mysql_data/mysql && chown mysql:mysql /home/mysql_data/mysql"
# 或直接修改 /usr/lib/systemd/system/mysqld.service 中的 Environment 變量

# 2. 重載配置
systemctl daemon-reload

# 3. 啟動
systemctl start mysqld

SELinux 環境額外步驟

# 1. 標記目標目錄上下文
semanage fcontext -a -t mysqld_db_t "/home/mysql_data/mysql(/.*)?"
restorecon -Rv /home/mysql_data/mysql

# 2. 或暫時置寬容模式驗證
setenforce 0
# 確認無 SELinux 阻攔後再 enforce

驗證清單

檢查項命令預期結果
datadir 生效SHOW VARIABLES LIKE 'datadir';/home/mysql_data/mysql/
Socket 可連mysql -S /home/mysql_data/mysql/mysql.sock連接成功
權限正確ls -ld /home/mysql_data/mysqlmysql:mysql 750
數據完整SELECT COUNT(*) FROM core_table;行數一致
寫入測試INSERT INTO test_tbl VALUES (1);成功

回滾方案

# 1. 停止服務
service mysqld stop

# 2. 恢復配置文件三處 datadir 指回 /var/lib/mysql

# 3. 刪除軟連結
rm -f /var/lib/mysql/mysql.sock

# 4. 啟動
service mysqld start

總結

數據目錄遷移核心三步:停服務 → 複制數據保留屬性 → 修改三處配置 + Socket 連結 + 權限修正。systemd/SELinux 環境需額外處理單元文件與安全上下文。遷移前務必備份配置文件,驗證清單逐項確認,預留回滾方案。

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