當資料量極大 (億級列)、INSERT ... SELECT 遷移極慢時,若表引擎為 **MyISAM**,可利用其「表即文件」特性,直接在文件系統層面複製 .frm (結構)、.MYD (資料)、.MYI (索引) 三個檔案,秒級完成遷移。
innodb_file_per_table + DISCARD/IMPORT TABLESPACE)。cat /etc/my.cnf | grep datadir (預設 /var/lib/mysql)FLUSH TABLES tbl_name WITH READ LOCK; 或停庫 systemctl stop mysqldcp /var/lib/mysql/src_db/tbl_name.{frm,MYD,MYI} /var/lib/mysql/dst_db/
chown mysql:mysql /var/lib/mysql/dst_db/tbl_name.* chmod 660 /var/lib/mysql/dst_db/tbl_name.*
UNLOCK TABLES; 或 systemctl start mysqldSELECT COUNT(*) FROM dst_db.tbl_name;
CHECK TABLE dst_db.tbl_name; 確認無損壞。ANALYZE TABLE dst_db.tbl_name; 更新索引統計資訊。InnoDB 開啟 innodb_file_per_table=ON 時,每表有一個 .ibd 檔案,可用 Transportable Tablespace 遷移:
-- 來源庫 FLUSH TABLES tbl_name FOR EXPORT; -- 產生 .cfg 元資料檔 UNLOCK TABLES; -- 複製 .ibd + .cfg 到目標庫資料目錄 -- 目標庫 ALTER TABLE tbl_name DISCARD TABLESPACE; ALTER TABLE tbl_name IMPORT TABLESPACE;
但此法需版本相容、表結構完全一致、無外鍵依賴,操作較繁瑣。