MySQL 預設資料目錄(/var/lib/mysql)所在檔案系統空間有限,當特定資料表(如 tbldevice)體積龐大導致磁碟爆滿時,若能將該表檔案移至另一掛載點(如 /mnt/sdb1)且不需修改應用程式連線設定,將是最理想的解決方案。Linux 符號連結(Symbolic Link)完美滿足此需求。
/var/lib/mysql//mnt/sdb1xxdbtbldevice.frm(含對應 .ibd、.MYD、.MYI 等)mkdir -p /mnt/sdb1/xxdb
mv /var/lib/mysql/xxdb/tbldevice.* /mnt/sdb1/xxdb/
注意: 建議一次移動該表所有相關檔案(.frm、.ibd 或 .MYD/.MYI),避免遺漏導致表損壞。
ln -s /mnt/sdb1/xxdb/tbldevice.frm /var/lib/mysql/xxdb/tbldevice.frm
ln -s /mnt/sdb1/xxdb/tbldevice.ibd /var/lib/mysql/xxdb/tbldevice.ibd
# 若為 MyISAM 則對應 .MYD / .MYI
此時原路徑下的檔案實為指向 /mnt/sdb1/xxdb/ 的軟連結,MySQL 讀寫時會自動導向實體檔案。
無需重啟 MySQL 服務,直接查詢該表即可驗證是否正常運作:
SELECT COUNT(*) FROM xxdb.tbldevice;
| 優勢 | 說明 |
|---|---|
| 零停機 | 操作過程 MySQL 持續線上服務,適合 7×24 環境 |
| 透明遷移 | 應用端連線字串、SQL 語法完全無需變更 |
| 彈性擴充 | 未來磁碟再滿時,可重複此流程遷移其他大表 |
mysql:mysql)一致,否則會報 Errcode: 13 Permission denied。symlink(ext4、xfs、btrfs 均支援;NFS 需確認伺服端設定)。mysqldump 或 xtrabackup 時,符號連結會被正確解析,但若採用檔案層級備份(如 tar 整個 /var/lib/mysql),需確認備份工具是否會跟隨符號連結(tar -h 或 rsync -L)。innodb_file_per_table=OFF,所有表資料集中在 ibdata1 中,無法單表遷移,需先開啟獨立表空間並重建表。若需整庫遷移,同樣原理:
systemctl stop mysqld
mv /var/lib/mysql/xxdb /mnt/sdb1/
ln -s /mnt/sdb1/xxdb /var/lib/mysql/xxdb
systemctl start mysqld
此時需短暫停機,但操作更簡單、風險更低。