MySQL单表ibd文件恢复_MySQL
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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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