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: 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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++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.最後就可以完成新建了。

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

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

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

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

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

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