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

MySQL 歷史數據遷移踩坑記:MyISAM 到 InnoDB、引擎缺失與文件損壞修復

     編輯:MySQL 綜合教學

背景

舊環境:Debian + MySQL 5.1 + MyISAM。新環境:Ubuntu + MySQL 5.5/5.6(預設 InnoDB)。需將 /usr/lib/mysql 下數據文件直接遷移。

嘗試 1:直接拷貝數據目錄啟動

  • 拷貝文件、設置權限 chown -R mysql:mysql。
  • 啟動報錯,error.log 顯示各類文件創建/寫入失敗。
  • 嘗試將預設引擎改回 MyISAM 需重啟,但 MySQL 進程根本起不來,SHOW ENGINES 也無法查看。結論:跨版本、跨引擎直接拷貝數據目錄不可行。

嘗試 2:舊庫導出、新庫導入

mysqldump -u root -p db_sth > db_sth.sql

報錯:Got error: 1286: Unknown table engine 'InnoDB' when using LOCK TABLES。

排查過程

  1. 進入舊庫 USE db_sth; SHOW TABLES;。
  2. 逐表 CHECK TABLE t1; 發現某表報 Unknown table engine 'InnoDB' Corrupt。
  3. REPAIR TABLE t1; 同樣報錯。
  4. 檢查數據目錄:t1.frm 存在,但 t1.MYD、t1.MYI 丟失(MyISAM 三文件缺其二)。
  5. myisamchk 亦無法修復。

最終方案

DROP TABLE t1;  -- 丟棄損壞表
mysqldump -u root -p db_sth > db_sth.sql  -- 重新導出其餘表

該表數據無法恢復,其餘表正常遷移。

經驗總結

  • 跨大版本遷移務必使用邏輯備份,不可直接拷貝物理文件。
  • 導出前檢查 SHOW ENGINES 確認目標版本支援源引擎,或提前 ALTER TABLE ... ENGINE=InnoDB 轉換。
  • 物理文件缺失(.MYD/.MYI)無法修復,只能從業務層面重建或接受數據損失。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved