只有.frm 檔和 ibd 時可用恢復 MySQL 表

如何解決 “Mysql 錯誤 #1146 -表不存在” 移動.IDB 檔所造成 (InnoDB) 目錄之間直接 (表空間).

logo_mysql

問題

很多問題,我們就是我們創建的問題. 我剛剛建立了一個網站使用的 WordPress 以為: 去看這是如何在 PHP 中怎麼樣 7? 還行, 作為我 WampServer 使用 PHP 5.6, 所以我不得不 “快樂” 升級的主意 WampServer 2.5 (Apache 2.4.9, MySQL 5.6.17, PHP 5.5.12) 為 WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP 和 Php 7.0.10).

答案是肯定的, 開始備份, 但我偉大的滑不會從這類網站匯出 SQL, 相反, 剛才 MySQL 檔的副本 (MySQL/資料) 和應用程式 (www/網站). 我很有信心它會工作, 像其他時代.

後與 PHP 安裝新 WampServer 7, 將備份的檔和應用程式備份放, 只有當我去通過瀏覽器進行測試, 沒露面的網站, 但 WordPress 的安裝螢幕好像它是一個新的網站. 凍結了! 打開 PHPMyAdmin 並檢查如果資料庫還很好,看到了,, 儘管被列在資料庫中, 當您按一下上表,以查看資料下面的錯誤訊息:

  MySQL 錯誤 #1146 -表 <TABLE_NAME> 不 ' t 存在

一直在尋找,只是發現你可以只複製或移動的檔直接到另一個 MySQL MySQL 目錄,如果檔是 MyISAM 類型, 那些帶有 frm 檔副檔名。原發性三叉神經痛。冰. 我不知道發生了什麼事, 但我的資料庫出現作為 InnoDB (.frm 和伊斯蘭開發銀行). 不幸的是, 只有事後 MySQL 通知檔:

  你不能自由地移動 .炎症性腸病檔資料庫目錄之間  你可以使用 MyISAM 表檔. 
  存儲在共用的 InnoDB 表空間的表定義包括資料庫名稱. 
  事務 Id 和 日誌 存儲在表空間檔中的序號也不同資料庫之間.

解決方案

Cheguei ver algumas soluções 明瞭, mas 你 descrever 現在工會 que realmente funcionou 段 mim, apesar de parecer 邊界元法 mais complexa, encontrada 無法開機自檢 “還原表(s) 在 MySQL 資料庫 frm 或炎症性腸病檔可用時只“.

注, porém, 第 de conhecimento, 淡水河谷 lembrar 闕 em relação ao 經濟部智慧財產局 InnoDB, MySQL 守衛其結構中的檔和資料在 ibd.frm。. 理論已經足夠, 讓我們切入正題!

一步 1: 重新創建.frm 檔的結構

正如所說, frm 包含您的表結構. 首先,我們需要檢索這種結構,然後將資料填充. 你可以 3 下面描述的不同方法, 但之前, 讓我告訴你一些關於 “Mysql 的實用程式”.

Mysql 的實用程式 | mysqlfrm

如果你不打算使用第一種方法提出了 (線上) 所以你需要使用的工具 “mysqlfrm” 提供的 “Mysql 的實用程式“.

此工具將提取的資料結構並生成創建表的 SQL 腳本. 為此, 下載 “Mysql 的實用程式” (像 mysql-實用程式-1.6.4-winx64.msi) 並安裝它.

打開主控台 (命令 / 的的) 使用 CD 命令來移動預設安裝目錄 (像 C:\C:program FilesMySQLMySQL 實用程式 1.6\). 請注意,該目錄是可執行檔 mysqlfrm.exe.

  裁談會 "C:\C:Program FilesMySQLMySQL 實用程式 1.6"

只選擇其中一個下面的方法以便提取.frm 檔中包含的表的結構:

1º 方法 | 線上

1. 轉到網站 HTTPS://recovery.twindb.com/;
2. 按一下功能表中的 “恢復結構” 然後在 “從 frm 檔。“;
3. 按一下按鈕 “瀏覽器…” 並選擇您 frm 檔; 和
4. 按一下按鈕 “上傳” 和表創建腳本將顯示在螢幕上.

它是可以發送多個檔 frm 一次生成所有表的單個腳本. 我只想讓你與所有其.frm 之前創建.zip “瀏覽器/上傳”.

2º 方法 | 使用 –診斷

/* 泛型示例 */
   mysqlfrm 診斷 "<源/路徑>/mytable.frm" > "<destination/path/recovered_mytable.sql>"
 
/* WordPress 在實踐與 wp_posts.frm 表中的示例 */
   mysqlfrm --診斷 "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.sql"

3º 方法 | 使用 –伺服器

/* 泛型示例 */
  mysqlfrm 伺服器=:密碼@本地主機埠=3311 "<源/路徑>/mytable.frm" > "<目的地/路徑>/recovered_mytable.sql"
 
/* WordPress 在實踐與 wp_posts.frm 表中的示例 */
  mysqlfrm --伺服器=@本地主機 --=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.frm" > "(C):\recovered_wp_posts.SQL"

不使用 MySQL 埠! 選擇任何其他可用. 請注意,該命令輸出重定向到一個.SQL 檔保存在指定的路徑中 (在案件, (C):).

一步 2: 重新創建您的資料庫中的表

在一個新的資料庫, 用在第步中生成的腳本創建一個表 1. 我親自安裝 WampServer 乾淨版本和使用 PHPMyAdmin (HTTP://本地主機/phpmyadmin /) 創建資料庫並導入在步驟中創建的 SQL 腳本 1 (recovered_wp_posts.sql). 此腳本將創建 2 MySQL 資料庫目錄中的檔:

  SUA_TABELA.frm SUA_TABELA.伊斯蘭開發銀行

在我的例子, 在中創建這些檔 (C):\wamp64binmysqlmysql5.7.14data<我的座位>. IE, 尋找您的 MySQL 安裝,請注意,目錄中 日期 將您的資料庫和提及的兩個檔.

一步 3: 刪除新的.IDB 檔

若要刪除新的.IDB 檔, 運行以下 SQL 命令:

/* 泛型示例 */
  ALTER TABLE mytable 丟棄的表空間;
 
/* WordPress 在實踐與 wp_posts 表中的示例 */
  ALTER TABLE wp_posts 丟棄的表空間;

此命令刪除表和表空間之間的連結 (在物理存儲資料庫檔案), 和刪除.IDB 檔.

一步 4: 將舊的.IDB 檔案複製

原始的.IDB 檔 (它包含的資料) 需要複製到在.IDB 步驟中刪除了的地方 3. 使用 Ctrl + C 和 Ctrl + V,或者殺了你自己通過使用命令列.

一步 5: 重新啟動表

在步驟中斷開的連結 3 需要用下面的命令恢復:

/* 泛型示例 */
  ALTER TABLE mytable 導入表空間;
 
/* WordPress 在實踐與 wp_posts 表中的示例 */
  ALTER TABLE wp_posts 導入的表空間;

不要擔心,如果您收到一些警告, porém, 它可能會出現以下錯誤的一般故障:

  #1808 - 架構不匹配 (表具有 ROW_TYPE_DYNAMIC 行格式, .炎症性腸病檔具有 ROW_TYPE_COMPACT 行格式。)

在這種情況下, 這發生了由於不同比 mysql 5.7.14 (新增功能) 創建一個預設表相比 Mysql 5.6.17 (老), 沒有 ROW_FORMAT = 緊湊.

所以, 如果您使用的 MySQL > = mysql 5.7.14, 你需要做的就是添加 ROW_FORMAT = 契約在創建表的定義.

  創建表 'wp_posts' (. . .) 引擎=Innodb ROW_FORMAT=緊湊

其他錯誤

只是為了記錄, 之前獲得成功中提取資料。 frm, 我有一些錯誤:

  # 在本地主機上的源: ... 連接.
  # 在埠上啟動生成的伺服器 3304 ... 試圖停止錯誤失敗生成的伺服器.  進程 id = 6648.
  錯誤: 生成伺服器操作失敗. 克隆伺服器錯誤: 無法與通信 新增功能 實例. 進程 id = 6648.. 要診斷, 再次運行該公用程式和 使用--詳細程度選項查看從生成伺服器郵件並糾正任何錯誤提出,然後再次運行該實用程式.
  成功: 與 PID 進程 6648 (子進程的 PID 7264) 已終止.
追蹤 (最新電話持續):
   "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py",27,<模組>
   "scripts\mysqlfrm.py",422,<模組>
   ".\mysql\utilities\command\read_frm.py",439, 在 read_frm_files
   ".\mysql\utilities\command\read_frm.py",166, 在 _spawn_server
   ".\mysql\utilities\command\serverclone.py",180, 在 clone_server
   ".\mysql\utilities\common\tools.py",273, 在 get_mysqld_version 時發生 io 錯誤: [Errno 13] 許可權被拒絕: ' version_check'

在 WordPress 的具體案例, 您需要刪除生成下生成的 SQL 腳本。 frm, 所有條目預設 ‘0000-00-00 00:00:00’, 否則, 將捕捉該錯誤:

  #1067 - 預設值 (預設) 對於 'comment_date' 無效

這是!

字體

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

總點擊數: 21447

12 comentários 講習 “只有.frm 檔和 ibd 時可用恢復 MySQL 表

  1. 羅德里戈 · 說︰:

    O 闕法瑟屍橫 aparecer seguinte mensagem de 偏差: #1815 – 內部錯誤. 不能在表中重置 Lsn “我的座位”.”myTable”: 資料結構損壞.
    我可以手動運行資料的插入? 如何做到這一點?
    因為已經謝謝你.

  2. 克利斯蒂安 · U 說︰:

    嗨泰勒,

    你是如何解決此錯誤的:
    錯誤: 生成伺服器操作失敗. 克隆伺服器錯誤: 無法與新實例進行通信. 進程 id = 6648.. 要診斷, 再次運行該實用程式和使用 –詳細程度選項查看從生成伺服器郵件並糾正任何錯誤提出,然後再次運行該實用程式.
    成功: 與 PID 進程 6648 (子進程的 PID 7264) 已終止.

    我不斷收到相同的消息,我不知道如何 ´ 去解決它.

    謝謝你

  3. 雷吉納路易士 · 德弗雷塔斯 說︰:

    祝賀泰勒, 但教誨不可能!! 你同樣的傢伙!

    擁抱和感謝分享你的經驗!

留言

您的電子郵件地址將不會發佈. 與標記必填的欄位 *