首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL .frm 文件直接拷貝遷移表結構:InnoDB 必須帶上 ibdata1

     編輯:MySQL 資料庫相關知識

僅複製 .frm(表定義)到新實例 datadir 下同名庫目錄,MyISAM 表通常能直接識別;但 InnoDB 表若報「Table doesn't exist」,原因在於表元數據同時存放在共享表空間 ibdata1(或獨立 .ibd)中。

標準遷移步驟

  1. 目標實例建立同名數據庫:CREATE DATABASE db_name;
  2. 停止目標 MySQL 服務。
  3. 複製源實例 db_name/*.frm、db_name/db.opt 到目標 datadir/db_name/。
  4. 若表為 InnoDB,同時複製源實例 ibdata1(共享表空間模式)或對應 *.ibd(啟用 innodb_file_per_table=ON 時)。
  5. 啟動目標 MySQL,執行 CHECK TABLE tbl_name; 驗證。

判斷表引擎

SHOW TABLE STATUS FROM db_name WHERE Name='tbl_name'\G
-- Engine=InnoDB → 需帶數據文件
-- Engine=MyISAM → 僅 .frm/.MYD/.MYI 即可

注意事項

  • MySQL 版本主版本號需一致(如 5.7→5.7,5.7→8.0 需 mysql_upgrade)。
  • 複製文件後,目錄/文件擁有者必須為 mysql:mysql(chown -R mysql:mysql datadir/db_name)。
  • 生產環境強烈建議使用 mysqldump / xtrabackup / Clone Plugin 等官方工具,避免元數據不一致導致隱性損壞。

緊急恢復場景

若僅剩 .frm 且無備份,可嘗試 undrop-for-innodb 從 ibdata1 恢復數據頁,但屬高級恢復技術,成功率視覆寫情況而定。

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