| 方法 | 適用對象 | 操作方式 | 優點 | 缺點 |
|---|---|---|---|---|
| 啟動參數 | 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 會破壞表級連結、備份工具需支援 |
# 停服務
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;"
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
[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
log-bin = /logs/binlog → 生成 /logs/binlog.000001, .000002...log-bin = /logs/binlog. (以點結尾) → 同樣生成序列log-bin = /logs/binlog.fixed (有擴展名) → **僅生成固定名稱**,不滾動,生產嚴禁。mysql:mysql,權限 750 (目錄) / 640 (文件)。--datadir,mydumper 讀取配置文件自動識別。file_per_table=OFF):ibdata1 必須隨 datadir 移動,不可單獨符號連結。mysqld_safe 重定向 stderr 產生,無法通過參數重定位,需修改 mysqld_safe 腳本或用 log-error (8.0+ 支援)。數據目錄重定位首選 選項文件法 (標準化、可版控);單庫遷移用 符號連結法 (秒級、零配置變更);狀態文件統一規劃至 /var/log/mysql、/var/run/mysqld 符合 FHS 規範。操作前必備份,操作後驗證 SELECT @@datadir, @@log_bin, @@slow_query_log_file;。