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

MyISAM 引擎表極速遷移技巧:直接複製 .MYD/.MYI/.frm 檔案

     編輯:MySQL 綜合教學

MyISAM 引擎表極速遷移技巧:直接複製 .MYD/.MYI/.frm 檔案

當資料量極大 (億級列)、INSERT ... SELECT 遷移極慢時,若表引擎為 **MyISAM**,可利用其「表即文件」特性,直接在文件系統層面複製 .frm (結構)、.MYD (資料)、.MYI (索引) 三個檔案,秒級完成遷移。

前置條件

  • 來源與目標 MySQL 版本相容 (建議相同大版本)。
  • 表引擎為 **MyISAM** (InnoDB 不支援此法,需用 innodb_file_per_table + DISCARD/IMPORT TABLESPACE)。
  • 目標資料庫已建立 (同名或不同名皆可)。
  • MySQL 服務**停止**或表**鎖定唯讀** (確保檔案一致性)。

操作步驟

  1. 確認資料目錄:cat /etc/my.cnf | grep datadir (預設 /var/lib/mysql)
  2. 停止寫入:FLUSH TABLES tbl_name WITH READ LOCK; 或停庫 systemctl stop mysqld
  3. 複製三檔:
    cp /var/lib/mysql/src_db/tbl_name.{frm,MYD,MYI} /var/lib/mysql/dst_db/
  4. 修正擁有者/權限:
    chown mysql:mysql /var/lib/mysql/dst_db/tbl_name.*
    chmod 660 /var/lib/mysql/dst_db/tbl_name.*
  5. 釋放鎖/啟庫:UNLOCK TABLES; 或 systemctl start mysqld
  6. 驗證:SELECT COUNT(*) FROM dst_db.tbl_name;

實測截圖流程

datadir 確認
資料庫列表
來源表檔案
目標表複製前
複製指令
修改權限
查詢驗證成功

遷移後必做檢查

  • CHECK TABLE dst_db.tbl_name; 確認無損壞。
  • ANALYZE TABLE dst_db.tbl_name; 更新索引統計資訊。
  • 若目標庫名不同,外鍵/觸發器/視圖引用需手動調整。

InnoDB 怎麼辦?

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;

但此法需版本相容、表結構完全一致、無外鍵依賴,操作較繁瑣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved