ホームページ  >  に質問  >  本文

.ibd ファイルからの MySql テーブルの回復: 進行中の課題

MySQL サーバーが突然動作を停止し、サービスが断続的に動作しなくなりました。サービスが実行されていないためバックアップを実行できませんでした。そのため、DATA フォルダー全体をコピーするのが精一杯でした。

また、古いバックアップがあったので、それを ibd ファイルと一緒に使用すると、最後のテーブルを除くすべてのテーブルが復元されました。 リーリー ###私は何をすべきかわかりません。

P粉848442185P粉848442185294日前549

全員に返信(1)返信します

  • P粉311563823

    P粉3115638232023-12-31 00:08:37

    できることは、バックアップ内のテーブルのバージョンに依存することだけだと思います。コピーした .ibd ファイルを復元することはできません。

    エラー メッセージは、次の 2 つのいずれかが発生したことを示します:

    • テーブル構造がバックアップ以降変更されたため、.ibd ファイルはデータ ディクショナリに格納されているメタデータと一致しなくなりました。テーブルスペース ファイルの内容がメタデータと一致しない場合、InnoDB も同じ状況に陥ります。「どうすればよいかわかりません。」

    • テーブル構造が変更されていない場合でも、.ibd ファイルに物理的な損傷があると、InnoDB が読み取れなくなります。

    いずれの方法でも、InnoDB はテーブルスペース ファイルを読み取ることができません。

    他のすべてのテーブルを正常に復元すると、明らかに問題が発生します。最後のテーブルを除いて、ほとんどのテーブルには最新のデータが含まれています。このテーブルは期限切れです。これらのテーブルに相互参照する行がある場合、孤立レコード (たとえば、ユーザーが製品を購入したが、そのユーザーが Users テーブルに存在しないことを示すレコード) が存在する可能性があります。

    これは残念であり、修正するのは困難です。

    一般に、.ibd ファイルのコピーは、InnoDB データベースをバックアップする信頼できる方法ではありません。 mysqldump や Percona XtraBackup などの適切なバックアップ ツールを使用する必要があります。

    最後のバックアップ後にデータをリカバリするもう 1 つの解決策は、バイナリ ログ ファイルを使用してポイントインタイム リカバリを行うことです。ただし、これを実現するには、最新のバックアップ以降のすべてのバイナリ ログ ファイルが必要であり、バックアップには、バックアップが作成された時点のバイナリ ログの場所に関する情報が必要です。

    https://dev.mysql.com/doc /refman/en/point-in-time-recovery.html を参照してください。

    返事
    0
  • キャンセル返事