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

MySQL 數據目錄重定位完全指南:啟動參數法 vs 符號鏈接法

     編輯:MySQL 綜合教學

為什麼要重定位數據目錄?

  • 默認數據目錄磁碟空間不足,需遷移至大容量掛載點。
  • I/O 熱點分離:將數據、日誌、臨時文件分布在不同物理磁碟。
  • 運行多實例:每個實例獨立數據目錄,繞開單進程文件描述符限制。
  • 規範化管理:如將 PID 文件統一放入 /var/run。

可重定位對象與方法對照表

對象啟動參數法符號鏈接法
整個數據目錄✓ --datadir✓
單個數據庫目錄✗✓
單個表文件✗✓ (MyISAM *.MYD/*.MYI)
PID 文件✓ --pid-file✗
一般日誌✓ --log✗
更新日誌✓ --log-update✗

方法一:啟動參數法(推薦用於整個數據目錄、日誌、PID)

  1. 停止服務:systemctl stop mysqld
  2. 移動數據目錄:mv /var/lib/mysql /data/mysql
  3. 編輯 /etc/my.cnf ([mysqld] 區塊):
    [mysqld]
    datadir = /data/mysql
    pid-file = /data/mysql/mysqld.pid
    log-error = /data/mysql/error.log
    slow_query_log_file = /data/mysql/slow.log
  4. 更新 AppArmor/SELinux 策略(Ubuntu/CentOS 必做)。
  5. 啟動驗證:systemctl start mysqld && mysql -e "SHOW VARIABLES LIKE 'datadir';"

方法二:符號鏈接法(適用於單庫、單表、跨磁碟分布)

# 停止服務
systemctl stop mysqld

# 移動目標庫目錄
mv /var/lib/mysql/big_db /mnt/disk2/big_db

# 建立符號鏈接
ln -s /mnt/disk2/big_db /var/lib/mysql/big_db

# 啟動服務
systemctl start mysqld

注意: MyISAM 表可單獨鏈接 .MYD/.MYI 文件;InnoDB 共享表空間模式下不支援單表鏈接,需啟用 innodb_file_per_table=1 後遷移 .ibd 文件並執行 ALTER TABLE ... IMPORT TABLESPACE。

最佳實踐建議

  1. 優先使用啟動參數法遷移整個數據目錄,配置清晰、易維護。
  2. 符號鏈接僅用於局部調整(單庫/單表),避免過度碎片化管理。
  3. 遷移前務必全量備份,驗證權限(mysql:mysql)、SELinux/AppArmor 上下文。
  4. 多實例部署時,每實例獨立 datadir、socket、port、pid-file、log-error。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved