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

MySQL 數據目錄重定位完整指南:datadir、單庫、單表、狀態文件三種方法對比

     編輯:MySQL 資料庫相關知識

重定位原因

  • 預設分區空間不足,需移至大容量掛載點
  • 磁碟 I/O 平衡:將數據、日誌、臨時文件分散到不同物理磁碟
  • 多實例隔離:每個實例獨立數據目錄,繞開進程文件描述符限制
  • 規範化管理:PID 文件放 /var/run,日誌放 /var/log/mysql

三種重定位方法對比

方法適用對象操作方式優點缺點
啟動參數 datadir, pid-file, log-error, log-bin, relay-log, slow-query-log mysqld --datadir=/new/path --log-bin=/logs/binlog 顯式、版本控制友好、容器化首選 需修改啟動腳本/服務單元
選項文件 同上 /etc/my.cnf 或 --defaults-file 指定文件 持久化、集中管理、多實例隔離 修改後需重啟
符號連結 整個 datadir、單個資料庫目錄、單個 MyISAM 表文件 mv /var/lib/mysql/big_db /mnt/disk2/; ln -s /mnt/disk2/big_db /var/lib/mysql/ 零停機 (秒級)、無需改配置、適用單庫/單表 Windows 不支援、ALTER TABLE 會破壞表級連結、備份工具需支援

實戰操作流程

1. 重定位整個數據目錄 (datadir)

# 停服務
systemctl stop mysqld

# 移動數據目錄
mv /var/lib/mysql /data/mysql

# 方法 A:符號連結 (Linux)
ln -s /data/mysql /var/lib/mysql

# 方法 B:修改配置文件 /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /data/mysql/mysql.sock  # 同步更新 socket

# 方法 C:啟動參數 (臨時/容器)
mysqld --datadir=/data/mysql --socket=/data/mysql/mysql.sock &

# 啟動驗證
systemctl start mysqld
mysql -e "SELECT @@datadir;"

2. 重定位單個資料庫 (僅符號連結)

systemctl stop mysqld
mv /var/lib/mysql/big_db /mnt/disk2/mysql_data/
ln -s /mnt/disk2/mysql_data/big_db /var/lib/mysql/big_db
systemctl start mysqld
# 完成後可刪除備份目錄 big_db.old

3. 重定位狀態文件 (PID、錯誤日誌、一般日誌、Binlog、慢查詢日誌)

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/error.log
general-log-file = /var/log/mysql/general.log
slow-query-log-file = /var/log/mysql/slow.log
log-bin = /var/log/mysql/binlog
relay-log = /var/log/mysql/relaylog

# 目錄預建並授權
mkdir -p /var/run/mysqld /var/log/mysql
chown mysql:mysql /var/run/mysqld /var/log/mysql
chmod 750 /var/run/mysqld /var/log/mysql

4. 更新日誌命名規則

  • log-bin = /logs/binlog → 生成 /logs/binlog.000001, .000002...
  • log-bin = /logs/binlog. (以點結尾) → 同樣生成序列
  • log-bin = /logs/binlog.fixed (有擴展名) → **僅生成固定名稱**,不滾動,生產嚴禁。

避坑與最佳實踐

  1. 權限一致性:移動後確保目錄/文件擁有者為 mysql:mysql,權限 750 (目錄) / 640 (文件)。
  2. SELinux/AppArmor:新路徑需添加標籤或調整策略,否則啟動失敗 (Errcode 13)。
  3. 備份工具相容:XtraBackup 需指定 --datadir,mydumper 讀取配置文件自動識別。
  4. InnoDB 共享表空間 (file_per_table=OFF):ibdata1 必須隨 datadir 移動,不可單獨符號連結。
  5. 錯誤日誌 由 mysqld_safe 重定向 stderr 產生,無法通過參數重定位,需修改 mysqld_safe 腳本或用 log-error (8.0+ 支援)。

總結

數據目錄重定位首選 選項文件法 (標準化、可版控);單庫遷移用 符號連結法 (秒級、零配置變更);狀態文件統一規劃至 /var/log/mysql、/var/run/mysqld 符合 FHS 規範。操作前必備份,操作後驗證 SELECT @@datadir, @@log_bin, @@slow_query_log_file;。

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