mysql根據.frm和.ibd文件恢複數據表

来源:https://www.cnblogs.com/peachyy/archive/2023/07/27/17585755.html
-Advertisement-
Play Games

忠人之事受人之托 起因是因為一位朋友的資料庫伺服器被重裝了,只剩下一個zbp_post.frm和zbp_post.ibd文件。咨詢我能不能恢復,確實我只用過mysqldump這種工具導出數據 然後進行恢復到資料庫。這種直接備份物理存儲文件還沒有嘗試過。 前提是需要歷史ibd文件的所屬資料庫版本 需要 ...


忠人之事受人之托 起因是因為一位朋友的資料庫伺服器被重裝了,只剩下一個zbp_post.frm和zbp_post.ibd文件。咨詢我能不能恢復,確實我只用過mysqldump這種工具導出數據 然後進行恢復到資料庫。這種直接備份物理存儲文件還沒有嘗試過。

前提是需要歷史ibd文件的所屬資料庫版本 需要和還原新庫資料庫版本保持一致,這樣才能少踩坑。

創建表結構

要想恢複數據,表結構需要和.ibd裡面的結構保持一致,如果不一致將恢復不成功 可能會報如下錯誤。或者其他異常。

 [ERROR] InnoDB: Trying to access page number 426442752 in space 24, space name test1/zbp_post, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. If you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.
獲取表結構

如果明確知道表結構 這一步可跳過。不知道表結構可從這一步操作中獲取到表結構。

藉助了mysql utilities工具來查看表結構。

安裝mysql utilities

這裡我適用window 其他系統也是類似的操作 下載後安裝好。

https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5-winx64.msi

其他系統下載地址 https://downloads.mysql.com/archives/

進入zbp_post.frm目錄中執行獲取表結構命令。

cd zbp_post
mysqlfrm --diagnostic ./zbp_post.frm

執行完mysqlfrm命令後 輸出如下表結構

CREATE TABLE `zbp_post` (
  `log_ID` int(11) NOT NULL AUTO_INCREMENT,
  `log_CateID` int(11) NOT NULL,
  `log_AuthorID` int(11) NOT NULL,
  `log_Tag` varchar(1000) NOT NULL,
  `log_Status` tinyint(4) NOT NULL,
  `log_Type` int(11) NOT NULL,
  `log_Alias` varchar(1000) NOT NULL,
  `log_IsTop` tinyint(4) NOT NULL,
  `log_IsLock` tinyint(4) NOT NULL,
  `log_Title` varchar(1000) NOT NULL,
  `log_Intro` text,
  `log_Content` longtext,
  `log_CreateTime` int(11) NOT NULL,
  `log_PostTime` int(11) NOT NULL,
  `log_UpdateTime` int(11) NOT NULL,
  `log_CommNums` int(11) NOT NULL,
  `log_ViewNums` int(11) NOT NULL,
  `log_Template` varchar(1000) NOT NULL,
  `log_Meta` longtext,
  `log_BdPush` int(11) NOT NULL,
PRIMARY KEY `PRIMARY` (`log_ID`),
KEY `zbp_log_TPISC` (`log_Type`,`log_PostTime`,`log_IsTop`,`log_Status`,`log_CateID`),
KEY `log_CateID` (`log_CateID`),
KEY `log_AuthorID` (`log_AuthorID`),
KEY `log_PostTime` (`log_PostTime`),
KEY `log_CommNums` (`log_CommNums`),
KEY `log_ViewNums` (`log_ViewNums`),
KEY `log_Title` (`log_Title`)
) ENGINE=InnoDB;

資料庫配置修改

編輯MySQL的配置文件,通常是my.cnf或my.ini文件,在[mysqld]部分添加以下行:

這將確保每個表有單獨的.ibd文件。

[mysqld]
innodb_file_per_table=1
wait_timeout=600 #600秒(10分鐘)

wait_timeout=600 這個配置可以不加 訪問還原數據比較大。執行超時的情況。需要根據場景酌情配置。

開始恢複數據

創建新資料庫

創建一個資料庫 任意資料庫名。

create database test1;
創建表

進入到新創建的資料庫中(use test1),複製上一步中的表結構SQL。執行創建表結構操作。

使用.ibd文件恢複數據到新表

卸載表空間 執行此步會自動刪除新表對應的.ibd文件

ALTER TABLE zbp_post DISCARD TABLESPACE;

拷貝備份的.ibd文件到新創建資料庫對應的目錄中。

一般目錄在mysql保存資料庫的目錄。如我當前的伺服器mysql數據保存的目錄在/usr/local/mysql/data,資料庫名 test1 ,表名 zbp_post。

那麼拷貝.ibd文件的目錄為 /usr/local/mysql/data/zbp_post/test1中。

裝載表空間

ALTER TABLE zbp_post IMPORT TABLESPACE;

完成以上步驟後,您應該能夠成功還原.ibd文件。請註意,這種方法僅適用於InnoDB引擎的表。如果.ibd文件損壞或不匹配,可能需要使用MySQL的數據恢復工具來修複資料庫。

驗證

果然完美

mysql> select count(1) from zbp_post;
+----------+
| count(1) |
+----------+
|   785216 |
+----------+
1 row in set (0.15 sec)

如果有朋友遇到類似問題可以和我聯繫。

轉載請註明出處。

作者:peachyy

出處:http://www.cnblogs.com/peachyy/

出處:https://peachyy.gitee.io/

出處:https://peachyy.github.io/

公眾號:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在Linux標準IO中,就是用庫函數對文件進行操作。在C語言中有許多庫函數方便用戶去對文件進行操作。下麵談談一些簡單基本的函數,這些函數都是被包含在頭文件stdio.h中的。 一、fopen()函數 要操作一個文件,我們肯定先打開它,這裡打開並不是去右鍵文件然後左鍵打開。這裡的打開是指讓系統知道程式 ...
  • ## 1、CentOS-7 > 註意:下列命令要用root賬號/許可權執行 ### 1.1、查看防火牆狀態 ``` systemctl status firewalld ``` ### 1.2、非永久性關閉防火牆 ``` systemctl stop firewalld ``` ### 1.3、非永久 ...
  • # 一、複製文件夾cp ``` cp -a vue vue-copy ``` 將vue 文件夾下麵的所有文件,複製到同目錄下vue-copy文件夾下麵 ![image](https://img2023.cnblogs.com/blog/3202319/202307/3202319-202307271 ...
  • 碼農一枚,Mac作為生產力工具已經有10多年了。 用Mac的原因除了系統清爽,逼格高之外,最主要還是因為作為一個資深全棧,要做Apple相關開發,必須用MacOS系統。😅 與Windows不同,MacOS上流行使用的軟體很多都很小眾,作者也不是大廠,但有很多卻很實用,這裡介紹幾款我常用的免費軟體。 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230726164318392-162588362.png) # 1. 結果集 ## 1.1. sql ```sql select empno,mgr from emp ord ...
  • 一、索引概述 1.1 索引的介紹 索引index:是幫助 Mysql 高效獲取數據 的 有序的數據結構,在數據之外,資料庫系統維護著的滿足特定查找演算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找演算法,這種數據結構就是索引 1.2 索引的優缺點 優點1:提 ...
  • # Spark之探究RDD > 如何瞭解一個組件,先看看官方介紹! ![](https://img2023.cnblogs.com/blog/3161112/202307/3161112-20230727212358040-237097554.png) 進入RDD.scala,引入眼帘的是這麼一段描 ...
  • 向量資料庫是一種專門用於存儲和處理向量數據的資料庫系統。向量數據是指具有多維度屬性的數據,例如圖片、音頻、視頻、自然語言文本等。傳統的關係型資料庫通常不擅長處理向量數據,因為它們需要將數據映射成結構化的表格形式,而向量數據的維度較高、結構複雜,導致存儲和查詢效率低下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...