萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 表空間不足?善用符號連結(Symlink)輕鬆遷移大表

背景痛點

MySQL 預設資料目錄(/var/lib/mysql)所在檔案系統空間有限,當特定資料表(如 tbldevice)體積龐大導致磁碟爆滿時,若能將該表檔案移至另一掛載點(如 /mnt/sdb1)且不需修改應用程式連線設定,將是最理想的解決方案。Linux 符號連結(Symbolic Link)完美滿足此需求。

操作情境

  • MySQL 安裝路徑:/var/lib/mysql/
  • 目標檔案系統:/mnt/sdb1
  • 資料庫名稱:xxdb
  • 需遷移的表檔案:tbldevice.frm(含對應 .ibd、.MYD、.MYI 等)

四步驟完成遷移(無需重啟 MySQL)

步驟 1:於目標檔案系統建立同名資料庫目錄

mkdir -p /mnt/sdb1/xxdb

步驟 2:移動表檔案至新位置

mv /var/lib/mysql/xxdb/tbldevice.* /mnt/sdb1/xxdb/

注意: 建議一次移動該表所有相關檔案(.frm、.ibd 或 .MYD/.MYI),避免遺漏導致表損壞。

步驟 3:建立符號連結指向新位置

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 讀寫時會自動導向實體檔案。

步驟 4:驗證並投入使用

無需重啟 MySQL 服務,直接查詢該表即可驗證是否正常運作:

SELECT COUNT(*) FROM xxdb.tbldevice;

關鍵優勢與注意事項

優勢說明
零停機操作過程 MySQL 持續線上服務,適合 7×24 環境
透明遷移應用端連線字串、SQL 語法完全無需變更
彈性擴充未來磁碟再滿時,可重複此流程遷移其他大表

⚠️ 必須留意的風險

  • 權限一致性: 目標目錄擁有者與權限必須與 MySQL 執行帳號(通常是 mysql:mysql)一致,否則會報 Errcode: 13 Permission denied。
  • 檔案系統支援: 目標掛載點需支援 symlink(ext4、xfs、btrfs 均支援;NFS 需確認伺服端設定)。
  • 備份策略調整: 使用 mysqldump 或 xtrabackup 時,符號連結會被正確解析,但若採用檔案層級備份(如 tar 整個 /var/lib/mysql),需確認備份工具是否會跟隨符號連結(tar -h 或 rsync -L)。
  • InnoDB 共享表空間模式: 若 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

此時需短暫停機,但操作更簡單、風險更低。

copyright © 萬盛學電腦網 all rights reserved