ホームページ データベース 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Lightning シミュレータで新しいシミュレータを作成する方法 - Lightning シミュレータで新しいシミュレータを作成する方法 Lightning シミュレータで新しいシミュレータを作成する方法 - Lightning シミュレータで新しいシミュレータを作成する方法 Mar 05, 2024 pm 03:04 PM

最近、雷シミュレータ ソフトウェアをダウンロードして連絡したばかりのユーザーから、雷シミュレータで新しいシミュレータを作成する方法について編集者に質問されました。次のコンテンツでは、雷シミュレータで新しいシミュレータを作成する方法を説明します。 。雷シミュレータ ソフトウェアを見つけます。ダブルクリックして Thunderbolt マルチオープナーを開きます。 「新規/シミュレーターのコピー」をクリックします。 「新規シミュレータ」をクリックします。新しいシミュレータを入手できます。雷シミュレータ ソフトウェアを見つけ、ダブルクリックして雷マルチ オープナーを開き、[新規/シミュレータのコピー] をクリックし、[新しいシミュレータ] をクリックすると、新しいシミュレータが取得されます。

コンピューター上で新しい Word 文書を作成する方法 コンピューター上で新しい Word 文書を作成する方法 Dec 27, 2023 pm 10:05 PM

新しい Word 文書を作成する方法はいくつかありますが、デスクトップを右クリックして、[新しい Doc ドキュメント] または [Docx ドキュメント] をクリックします。具体的な方法はほぼ同じです。一緒に見てみましょう。コンピューターを使用して新しい Word 文書を作成する方法: win11: 1. まず、「新規」を右クリックします。 2. 次に、「docx または doc」ファイルを選択します。 3. 最後に、作成が完了します。 win10: 1. 右クリックして「新規」を選択します。 2. 次に、2 つのドキュメントのうち 1 つを選択します。 3. 最後に作成が完了します。 win7: 1. まず、右クリックして「新規」を選択します。 2. 次に、Word 文書を選択します。 3. 最後に、新規作成が完了します。

Win10 ディスク上に新しいスパン ボリュームのグレー バージョンを作成する方法 Win10 ディスク上に新しいスパン ボリュームのグレー バージョンを作成する方法 Jul 02, 2023 am 08:13 AM

Win10 ディスク上に新しく作成されたスパン ボリュームがグレー表示になっている場合はどうすればよいですか?ハードディスク内に複数の未使用スペースが存在する場合があります。それらをマージして論理ボリュームに配置することで、複数のハードディスク上のスペースをより効率的に使用できます。これがスパン ボリュームです。しかし、一部のネチズンは、Win10 システムで新しいスパン ボリュームを作成するときに問題が発生し、ディスク上の新しいスパン ボリュームがグレー表示されていないことに気付きました。何が起こったのでしょうか?新しいスパン ボリュームを作成するにはどうすればよいですか?以下のエディタでは、新しいクロスゾーン ボリュームを作成する正しい方法を説明します。 Win10 ディスクにスパン ボリュームを作成するための灰色の解決策手順 まず、次の図に示すように、2 つのハード ディスク上のスペースは同じボリュームを使用でき、スパン ボリュームを作成するだけです。スパン ボリュームがグレー表示にならない理由は、次の要因による可能性があります。 1. スパンが含まれている場合

Enterprise WeChat で新しい月次レポートを作成する詳細な方法 Enterprise WeChat で新しい月次レポートを作成する詳細な方法 Mar 25, 2024 pm 05:36 PM

1. エンタープライズ WeChat を開きます。 2. 左側の[アプリ]アイコンボタンをクリックします。 3. [レポート]、[新規]、[月次レポート] オプションをクリックします。 4. すると、今月の仕事などを入力する必要があることがわかります。 5. 今月の作業内容を入力し、残りは入力してもしなくても構いませんので、[送信]ボタンをクリックしてください。 6. 最後に、月次レポートの詳細を確認できます。

Win10の右クリックに「新規」がない問題を解決 Win10の右クリックに「新規」がない問題を解決 Jan 05, 2024 am 09:45 AM

win10 システムを使用している場合、デスクトップ上でマウスを右クリックしても、右クリック メニューに新しいオプションがないことに気付く友人もいます。実際には、右クリックするにはレジストリを通じてオプションを追加するだけで済みます。新しいものを作成します。 Windows 10 で右クリックしたときに [新規] オプションが表示されない場合の対処方法: 1. キーの組み合わせ + [ファイル名を指定して実行] を押し、Enter キーを押して [OK] をクリックし、レジストリ エディターを開きます。 2. 次に、フォルダーを展開します。 3. 次に、フォルダーを見つけます。そのようなフォルダーがない場合は、フォルダーを右クリックして名前を付けます。 4. 新しいフォルダー内のファイルを開いた後、この数値データを に変更します。 5. 次に、問題を解決するためにコンピュータを再起動します。

Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド Mar 23, 2024 pm 03:51 PM

Realme 携帯電話でフォルダーを作成するためのステップバイステップ ガイド 日常生活では、写真、ビデオ、ドキュメントなどを含むさまざまなファイルを保存するために携帯電話を使用します。ただし、時間が経つにつれて、携帯電話上のファイルの数が増加し、携帯電話のメモリが不足したり、ファイルの管理が困難になったりする可能性があります。ファイルをより適切に整理し、携帯電話の使用効率を向上させるために、携帯電話フォルダーの確立が特に重要になっています。 Realme Mobile は、強力なシステムと多様な機能を備えた人気のスマートフォン ブランドです。 Realme 携帯電話でフォルダーを作成すると、ユーザーはファイルをより適切に整理できます

Win11 の新しいドキュメントのチュートリアル Win11 の新しいドキュメントのチュートリアル Dec 30, 2023 pm 07:59 PM

win11 では、新しいドキュメントを作成することで記事やメモを追加できますが、win11 で新しいドキュメントを作成する方法がわからない友人もいます。実際には、空白スペースを右クリックするだけです。 win11 で新しいドキュメントを作成する方法: 1. デスクトップまたはエクスプローラーの空白スペースを右クリックし、[新規] を選択します。 2. 次に、[テキスト ドキュメント] を選択します。 3. 新規作成が完了すると、新しく作成されたドキュメントが表示されます。テキストドキュメントを作成しました。 4. 「doc/docx ドキュメント」を「作成」することも選択できます。 5. 作成が完了したら、ドキュメントをダブルクリックして開きます。

Feige Customer Service Workbench で新しいサブアカウントを作成する方法 - Feige Customer Service Workbench で新しいサブアカウントを作成する方法 Feige Customer Service Workbench で新しいサブアカウントを作成する方法 - Feige Customer Service Workbench で新しいサブアカウントを作成する方法 Mar 04, 2024 pm 04:58 PM

多くの人が Feige Customer Service Workbench を使用して仕事をしていますが、Feige Customer Service Workbench で新しいサブアカウントを作成する方法をご存知ですか? 以下では、エディターが Feige Customer Service Workbench で新しいサブアカウントを作成する方法を説明します。興味がありましたら、以下を見てみましょう。 1. まずメインページにアクセスし、左側のストアをクリックして、ストア管理オプションを選択します。 2. 次に、ドロップダウン オプションでサブアカウント管理オプションをクリックします。 3. 最後に、アカウント管理オフィスで、[新しいサブアカウントの作成] をクリックします。

See all articles