首頁 資料庫 mysql教程 MySQL单表ibd文件恢复方法详解_MySQL

MySQL单表ibd文件恢复方法详解_MySQL

Jun 01, 2016 pm 01:23 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: 555
Processing table: SYS_INDEXES
- total fields: 9
- nullable fields: 5
- minimum header size: 5
- minimum rec size: 29
- maximum rec size: 165
Setting SPACE=1 in SYS_TABLE for `test`.`testibd`
Check if space id 1 is already used
Page_id: 8, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0
Db/table: infimum
Space id: 1768842857 (0x696E6669)
Next record at offset: 8D
Record position: 8D
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52
Db/table: SYS_FOREIGN
Space id: 0 (0x0)
Next record at offset: D5
Record position: D5
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57
Db/table: SYS_FOREIGN_COLS
Space id: 0 (0x0)
Next record at offset: 122
Record position: 122
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53
Db/table: test/testibd
Space id: 2 (0x2)
Next record at offset: 74
Space id 1 is not used in any of the records in SYS_TABLES
Page_id: 8, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 8 50 3 2 0 0 0 0 0
Db/table: infimum
Space id: 1768842857 (0x696E6669)
Next record at offset: 8D
Record position: 8D
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 11 17 24 32 36 40 48 52 52
Db/table: SYS_FOREIGN
Space id: 0 (0x0)
Next record at offset: D5
Record position: D5
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 16 22 29 37 41 45 53 57 57
Db/table: SYS_FOREIGN_COLS
Space id: 0 (0x0)
Next record at offset: 122
Record position: 122
Checking field lengths for a row (SYS_TABLES): OFFSETS: 16 12 18 25 33 37 41 49 53 53
Db/table: test/testibd
Space id: 2 (0x2)
Updating test/testibd (table_id 17) with id 0x01000000
SYS_TABLES is updated successfully
Initializing table definitions...
Processing table: SYS_TABLES
- total fields: 10
- nullable fields: 6
- minimum header size: 5
- minimum rec size: 21
- maximum rec size: 555
Processing table: SYS_INDEXES
- total fields: 9
- nullable fields: 5
- minimum header size: 5
- minimum rec size: 29
- maximum rec size: 165
Setting SPACE=1 in SYS_INDEXES for TABLE_ID = 17
Page_id: 11, next page_id: 4294967295
Record position: 65
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 50 7 2 0 0 0 0
TABLE_ID: 3798561113125514496
SPACE: 1768842857
Next record at offset: 8C
Record position: 8C
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47
TABLE_ID: 11
SPACE: 0
Next record at offset: CE
Record position: CE
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48
TABLE_ID: 11
SPACE: 0
Next record at offset: 111
Record position: 111
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 36 40 44 48
TABLE_ID: 11
SPACE: 0
Next record at offset: 154
Record position: 154
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 35 39 43 47
TABLE_ID: 12
SPACE: 0
Next record at offset: 22C
Record position: 22C
Checking field lengths for a row (SYS_INDEXES): OFFSETS: 15 8 16 22 29 44 48 52 56
TABLE_ID: 17
SPACE: 2
Updating SPACE(0x00000001 , 0x01000000) for TABLE_ID: 17
sizeof(s)=4
Next record at offset: 74
SYS_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 = 0xEECB309D
fixing old checksum of page 8
page 8 invalid (fails new style checksum)
page 8: new style: calculated = 0x6F0C29B4; recorded = 0x3D02308C
fixing new checksum of page 8
page 11 invalid (fails old style checksum)
page 11: old style: calculated = 0x3908087C; recorded = 0xF9E8D30C
fixing old checksum of page 11
page 11 invalid (fails new style checksum)
page 11: new style: calculated = 0xB26CFD77; recorded = 0xDB25D39D
fixing new checksum of page 11

Step 8 : 启动mysql服务
shell> service mysqld3321 startbitsCN.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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

雷電模擬器如何新建一個模擬器-雷電模擬器新建一個模擬器的方法 雷電模擬器如何新建一個模擬器-雷電模擬器新建一個模擬器的方法 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.最後就可以完成新建了。

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

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

企業微信新建一個月報的詳細方法 企業微信新建一個月報的詳細方法 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.然後重新啟動電腦,就能夠解決這個問題了。

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

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

win11新建文件教學 win11新建文件教學 Dec 30, 2023 pm 07:59 PM

在win11中,我們可以透過新建文檔的方式加入文章或記事本,但是有朋友不知道win11怎麼新建文檔,其實右鍵空白處就可以了。 win11怎麼新建文件:1、右鍵桌面或資源管理器空白處,選擇「新建」2、接著在其中選擇「文字文件」3、新建完成後,就可以看到自己新建的文本文檔了。 4.我們也可以選擇「新建」一個「doc/docx文件」5、新建完成後,雙擊該文檔就可以開啟了。

飛鴿客服工作台如何新建子帳號-飛鴿客服工作台新建子帳號的方法 飛鴿客服工作台如何新建子帳號-飛鴿客服工作台新建子帳號的方法 Mar 04, 2024 pm 04:58 PM

很多人在辦公的時候都會使用飛鴿客服工作台,那麼你們知道飛鴿客服工作台如何新建子帳號嗎?下文小編就為你們帶來了飛鴿客服工作台新建子帳號的方法,感興趣的用戶一起來下文看看吧。 1.先來到主頁面,點選左側的店鋪,選擇店舖管理選項。 2、然後在下拉選項中點選子帳號管理選項。 3.最後在帳戶管理處,點選新建子帳號即可。

See all articles