目錄
情况一:误删部分数据,需要用最近一次备份覆盖
情况二:误删 table,表结构已经被drop了
首頁 資料庫 mysql教程 MySQL单表ibd文件恢复_MySQL

MySQL单表ibd文件恢复_MySQL

Jun 01, 2016 pm 01:39 PM
新建

bitsCN.com

前言:

随着innodb的普及,innobackup也成为了主流备份方式。物理备份对于新建slave,全库恢复的需求都能从容应对。

但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢? 

下文将进行详细分析。 

恢复过程中需要用到的工具,percona data recover tool : https://launchpad.net/percona-innodb-recovery-tool

 

情况一:误删部分数据,需要用最近一次备份覆盖

来自同一台机器的ibd恢复覆盖,且备份后table没有被recreate过。

这种情况是最简单的,备份时的ibd文件(后称老ibd)中的space id和index id 与 新ibd的space id 和index id一致。

且和ibdata文件中的space id和index id一致。因此,物理文件可以直接覆盖做恢复。

以下是详细步骤

Step -1 : 物理备份

 innobackupex --defaults-file=/usr/local/mysql3321/my.cnf --socket=/xfs/mysql3321/mysql.sock --user=root --password=password /xfs/backup/

Step 0 : apply log

innobackupex --apply-log --defaults-file=/usr/local/mysql3321/my.cnf  /xfs/backup/2012-10-17_11-29-20/

Step 1 : 备份现在的ibd文件(可选)

cp -a testibd.ibd testibd.bak

Step 2 : 舍弃现在ibd文件

mysql> alter table testibd discard tablespace

Step 3 : 复制备份ibd文件

shell> cp /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/ 

shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd

Step 4 : 导入ibd文件

mysql> alter table testibd import tablespace

 

情况二:误删 table,表结构已经被drop了

这种情况稍复杂,不过恢复过程还是比较容易操作的。由于table被drop后的space id会留空因此备份文件的space id不会被占用。

我们只需要重建表结构,然后把ibdata中该表的space id还原,物理文件可以直接覆盖做恢复了。

Step 1 : 重建表

mysql> create table testibd (UserID int);

Step 2 : 关闭mysql服务(必须)

shell> service mysqld3321 stop

Step 3: 准备ibd文件  apply log

shell> innobackupex --apply-log --defaults-file=/usr/local/mysql3321/my.cnf  /xfs/backup/2012-10-17_11-29-20/

Step 4 : 备份现在的ibd文件(可选)

cp -a testibd.ibd testibd.bak

Step 5 : 复制备份ibd文件

shell> cp -a /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/ 

shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibd

Step 6 : 使用percona recovery tool 修改ibdata

shell> /root/install/percona-data-recovery-tool-for-innodb-0.5/ibdconnect -o /xfs/mysql3321/ibdata1 -f /xfs/mysql3321/test/testibd.ibd -d test -t testibd

输出结果
Initializing table definitions...Processing table: SYS_TABLES - total fields: 10 - nullable fields: 6 - minimum header size: 5 - minimum rec size: 21 - maximum rec size: 555Processing table: SYS_INDEXES - total fields: 9 - nullable fields: 5 - minimum header size: 5 - minimum rec size: 29 - maximum rec size: 165Setting SPACE=1 in SYS_TABLE for `test`.`testibd`Check if space id 1 is already usedPage_id: 8, next page_id: 4294967295Record position: 65Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0 Db/table: infimumSpace id: 1768842857 (0x696E6669)Next record at offset: 8DRecord position: 8DChecking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52 Db/table: SYS_FOREIGNSpace id: 0 (0x0)Next record at offset: D5Record position: D5Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57 Db/table: SYS_FOREIGN_COLSSpace id: 0 (0x0)Next record at offset: 122Record position: 122Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53 Db/table: test/testibdSpace id: 2 (0x2)Next record at offset: 74Space id 1 is not used in any of the records in SYS_TABLESPage_id: 8, next page_id: 4294967295Record position: 65Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0 Db/table: infimumSpace id: 1768842857 (0x696E6669)Next record at offset: 8DRecord position: 8DChecking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52 Db/table: SYS_FOREIGNSpace id: 0 (0x0)Next record at offset: D5Record position: D5Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57 Db/table: SYS_FOREIGN_COLSSpace id: 0 (0x0)Next record at offset: 122Record position: 122Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53 Db/table: test/testibdSpace id: 2 (0x2)Updating test/testibd (table_id 17) with id 0x01000000SYS_TABLES is updated successfullyInitializing table definitions...Processing table: SYS_TABLES - total fields: 10 - nullable fields: 6 - minimum header size: 5 - minimum rec size: 21 - maximum rec size: 555Processing table: SYS_INDEXES - total fields: 9 - nullable fields: 5 - minimum header size: 5 - minimum rec size: 29 - maximum rec size: 165Setting SPACE=1 in SYS_INDEXES for TABLE_ID = 17Page_id: 11, next page_id: 4294967295Record position: 65Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 50 7 2 0 0 0 0 TABLE_ID: 3798561113125514496SPACE: 1768842857Next record at offset: 8CRecord position: 8CChecking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47 TABLE_ID: 11SPACE: 0Next record at offset: CERecord position: CEChecking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48 TABLE_ID: 11SPACE: 0Next record at offset: 111Record position: 111Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48 TABLE_ID: 11SPACE: 0Next record at offset: 154Record position: 154Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47 TABLE_ID: 12SPACE: 0Next record at offset: 22CRecord position: 22CChecking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 44 48 52 56 TABLE_ID: 17SPACE: 2Updating SPACE(0x00000001 , 0x01000000) for TABLE_ID: 17sizeof(s)=4Next record at offset: 74SYS_INDEXES is updated successfully
登入後複製

 

Step 7 : 使用percona recovery tool 重新checksum ibdata

重复执行以下命令,直到程序没有输出为止。

shell> /root/install/percona-data-recovery-tool-for-innodb-0.5/innochecksum -f /xfs/mysql3321/ibdata1

输出结果
page 8 invalid (fails old style checksum)page 8: old style: calculated = 0xF4AD74CB; recorded = 0xEECB309Dfixing old checksum of page 8page 8 invalid (fails new style checksum)page 8: new style: calculated = 0x6F0C29B4; recorded = 0x3D02308Cfixing new checksum of page 8page 11 invalid (fails old style checksum)page 11: old style: calculated = 0x3908087C; recorded = 0xF9E8D30Cfixing old checksum of page 11page 11 invalid (fails new style checksum)page 11: new style: calculated = 0xB26CFD77; recorded = 0xDB25D39Dfixing new checksum of page 11
登入後複製

 

Step 8 : 启动mysql服务

shell> service mysqld3321 start

 

参考文档:

http://www.chriscalender.com/?p=28

http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/

http://blogs.innodb.com/wp/2012/04/innodb-transportable-tablespaces/

 

 

 

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1247
24
雷電模擬器如何新建一個模擬器-雷電模擬器新建一個模擬器的方法 雷電模擬器如何新建一個模擬器-雷電模擬器新建一個模擬器的方法 Mar 05, 2024 pm 03:04 PM

最近一些剛下載接觸雷電模擬器軟體的用戶,詢問小編雷電模擬器如何新建一個模擬器?以下內容就帶來了雷電模擬器新建一個模擬器的方法,讓我們一起來下文看看吧。找到雷電模擬器器軟體。雙擊打開雷電多開器。點選新建/複製模擬器。點選新建模擬器。就可以得到一個新建的模擬器了。找到雷電模擬器軟體,雙擊開啟雷電多開器,點選新建/複製模擬器,點選新建模擬器,就可以得到一個新建的模擬器了。

如何在電腦上建立新的Word文檔 如何在電腦上建立新的Word文檔 Dec 27, 2023 pm 10:05 PM

新建word文檔的方法也是有很多種的,我們可以透過右鍵桌面,然後點選新建doc文檔還是docx文檔,具體的方法都是差不多的,下面我們一起來看看吧。使用電腦新建word文件方法:win11:1、首先我們右鍵點選「新建」。 2、然後選擇“docx或者是doc”文件。 3、最後就可以完成創建了。 win10:1、我們右鍵選擇「新建」。 2、隨後或選擇兩個文檔中的一個。 3.最後就完成創建了。 win7:1、首先右鍵選擇「新建」。 2、然後選擇word文件。 3.最後就可以完成新建了。

如何實作MySQL中查看表格的資料的語句? 如何實作MySQL中查看表格的資料的語句? Nov 08, 2023 pm 01:40 PM

標題:MySQL中查看表格的資料的語句及具體程式碼範例MySQL是一種開源的關係型資料庫管理系統,它被廣泛應用於各種規模的應用程式。在MySQL中,檢視表格的資料是一個非常基礎的操作,以下將介紹如何透過具體的語句和程式碼範例來實現這項操作。首先,我們將介紹透過MySQL命令列工具查看表格的資料的語句及具體程式碼範例。假設我們有一個名為「employees」的表,以下是通

Win10磁碟新建跨區磁碟區灰色怎麼版 Win10磁碟新建跨區磁碟區灰色怎麼版 Jul 02, 2023 am 08:13 AM

Win10磁碟新建跨區磁碟區灰色怎麼辦?有時候我們硬碟裡有多個未使用的空間,我們可以將他們合併起來放在一個邏輯磁碟區中,這樣可以更有效地使用多個硬碟上的空間,這個就是跨區捲了。但有網友說自己的win10系統在新建跨區磁碟區的時候出現問題,發現磁碟新建跨區磁碟區灰色點不了怎麼回事?如何新建跨區磁碟區?下面小編教下大家正確的新建跨區卷方法。  Win10磁碟新建跨區卷灰色解決步驟  首先,如下圖所示兩個硬碟上的空間可以使用同一個卷,建立跨區卷即可。  那麼跨區卷灰色點不了的原因可能有下面的因素:  1、如果包含一個跨

真我手機資料夾建立步驟指南 真我手機資料夾建立步驟指南 Mar 23, 2024 pm 03:51 PM

真我手機資料夾建立步驟指南在日常生活中,我們使用手機來儲存各種各樣的文件,包括照片、影片、文件等等。然而,隨著時間的推移,手機上的檔案可能會越來越多,導致手機記憶體不足或檔案難以管理。為了更好地整理文件並提高手機使用效率,手機資料夾的建立變得尤為重要。真我手機是一款受歡迎的智慧型手機品牌,擁有強大的系統和多樣化的功能。在真我手機上建立資料夾可以幫助使用者更好地整理文

如何實作MySQL中重新命名表的語句? 如何實作MySQL中重新命名表的語句? Nov 08, 2023 pm 12:11 PM

MySQL是一種常用的關聯式資料庫管理系統,它支援重命名表的操作。通常情況下,重新命名表會帶來一定的風險,因此在執行這個操作時應該非常小心謹慎。在本文中,我們將探討如何在MySQL中實作重新命名表的語句,並提供詳細的程式碼範例。在MySQL中,可以使用ALTERTABLE語句來重新命名表。下面是ALTERTABLE重命名語句的基本語法:ALTERTABLEo

企業微信新建一個月報的詳細方法 企業微信新建一個月報的詳細方法 Mar 25, 2024 pm 05:36 PM

1、打開企業微信。 2、點選下左側的【應用程式】圖示按鈕。 3.點選下【報告】,【新建】,【月報】選項。 4、然後可以看到,需要輸入本月工作等。 5.輸入本月工作的內容,其他的可填可不填,點選【提交】按鈕。 6.最後就可以看到自己的月報詳情了。

解決Win10右鍵沒有'新建'選項的問題 解決Win10右鍵沒有'新建'選項的問題 Jan 05, 2024 am 09:45 AM

在使用win10系統的時候,有些小夥伴們在桌面使用滑鼠右鍵的時候,發現右鍵選單中沒有新建的選項,其實只需要透過登錄機碼往裡面新增一個選項就能夠右鍵新建了。 win10右鍵沒有新建選項怎麼辦:1、按下組合鍵+開啟執行,輸入點選確定,開啟註冊表編輯器。 2、然後依序展開資料夾:。 3、然後找到資料夾,如果沒有該資料夾,就右鍵資料夾--,命名為。 4.打開new資料夾中的檔案後,我們將這個數值資料更改為。 5.然後重新啟動電腦,就能夠解決這個問題了。

See all articles