目次
情况一:误删部分数据,需要用最近一次备份覆盖
情况二:误删 table,表结构已经被drop了

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 搭載アプリ

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. スパンが含まれている場合

MySQL でテーブル データを表示するステートメントを実装するにはどうすればよいですか? MySQL でテーブル データを表示するステートメントを実装するにはどうすればよいですか? Nov 08, 2023 pm 01:40 PM

タイトル: MySQL でテーブル データを表示するためのステートメントと具体的なコード例 MySQL は、あらゆる規模のアプリケーションで広く使用されているオープン ソースのリレーショナル データベース管理システムです。 MySQL では、テーブルデータの表示は非常に基本的な操作ですが、具体的なステートメントとコード例を通して、この操作の実装方法を紹介します。まず、MySQL コマンド ライン ツールを使用してテーブル データを表示するためのステートメントと具体的なコード例を紹介します。 「employees」という名前のテーブルがあるとします。パスは次のとおりです。

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. 作成が完了したら、ドキュメントをダブルクリックして開きます。

See all articles