DROPテーブルを元に戻すには?


回答:


12

文字通りバックアップがない場合、私は99%あなたが運が悪いと確信しています。

古い形式のバックアップがある場合は、MySQL構成ファイル(my.ini)のlog-binオプションを使用してバイナリロギングを有効にしていますか?その場合、最後のバックアップ以降に回復できる可能性があります。

1週間かけて開始する方法がよくありません。申し訳ありません。


2
おそらくあなたは経験が浅いため、私たちはすべてこの種のことを行っていますが、それでも時々行います(実際には1週間前ではなく、自分のVCenterからロックアウトされています)。繰り返す可能性が高い。
Chopper3、2010年

私は今何ができますか?私はただ座って待つことはできません!!!!

8
マネージャーに
知らせる

4
それは問題を解決しませんが、おそらくあなたの開発者の一人が最後の良いコピーからそれほど遠くないコピーを持っていますか?
トムO'Connor

3
トムは非常に良い点を提起します:開発者が定期的にテスト/開発の目的でライブデータのスナップショットを撮る癖がある場合、あなたは幸運かもしれません、そしてそれらのうちの1人はあなたの状況を「完全な災害」から「重大な不便」のみ。
David Spillett、2010年

7

質問はかなり古いですが、肯定的な答えは1つではないので、1つ追加します。

MySQLがテーブルを削除した後、データはしばらくの間メディア上にあります。したがって、レコードをフェッチしてテーブルを再構築できます。後でブログで説明しますが、ここでは簡単に説明します。

テーブルの構造が必要です(CREATE TABLEステートメント)。

innodb_file_per_tableがONの場合、ドロップされたテーブルはディスクパーティションにあります。MySQLを停止し、読み取り専用としてできるだけ早く再マウントします。MySQLがルートパーティションにあった場合(これは良い考えではありません)、イメージを取得するか、ディスクを取り出して別のサーバーに接続します。つまり、すべての書き込みを停止します。

innodb_file_per_tableがOFFの場合は、MySQLを停止するだけです。

次に、https://github.com/twindb/undrop-for-innodb/からInnoDBのアンドロップツールをダウンロードしてコンパイルします。詳細については、「TwinDBリカバリツールキットのコンパイル」の投稿を確認してください。

次に、stream_parserを使用して、ディスクパーティションまたはibdata1(innodb_file_per_tableの設定に依存)を解析します。

./stream_parser -f /path/to/diskimage_or_ibdata1

次に、InnoDBディクショナリをリカバリして、削除されたテーブルがどのindex_idにあったかを確認します。

次に、テーブル構造を取得してレコードをフェッチします

./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page

レコードをstdoutに出力し、LOAD DATAコマンドをstderrに出力します。


あなたは私の命を救った
-Buddhi741

2

これが私がしたことです。mysqlディレクトリ(Ubuntuの場合は/ var / lib / mysql、Homebrewを使用するMacの場合は/ usr / local / var / mysql)で、いくつかのファイルが見つかりました。最初に、特定のスキーマを含むmyapp_development /ディレクトリをローカルのmysqlディレクトリにコピーしました。次に、ローカルのibdata1をバックアップし、サーバーのibdata1をmysqlディレクトリにコピーしました。mysqldを終了しました。(ps auxPIDを見つけるには、次にkill PID)。mysqlを再起動し、クラッシュリカバリモードで起動しました。次に、ローカルのmysqlクライアントを起動し、必要なテーブルの完全なダンプを生成しました。

そして、私たちがメタデータを入力するための何週間もの作業を表す15,000行は、永久に失われたと考えられ、保存されます。

これが誰かを助けることを願っています。


それは素晴らしい努力ですが、これが信頼できる手法であることに多くの期待を抱くとは思いません。それにもかかわらず、いくつかの創造的な思考のために+1。
John Gardeniers、2011

はい、あなたは正しいです。mysqlユーザーからすべての権限を誤って削除してしまったため、データベースが空であることがユーザーに表示されていたためです。
デューク

2

残念なことに、適切なバックアップ計画の必要性についての非常に貴重な教訓を取り除く以外に、できることはほとんどありません。

テーブルのタイプによっては、ディスクに残されたものからデータを元に戻すことができるエキスパートを見つけることができるかもしれませんが、そのようなフォレンジック分析は非常に非常に高く(比較的まれなスキルが必要になるため)、まったく保証されません本当に役に立ちます。


他のオプションはありますか?

1
FractalizeRが示唆しているように、テーブルが単純なMyISAMテーブルである場合、それらに関連付けられているファイルの削除を取り消すことができる場合あります。試してみる場合は、システムがアクティブである時間が長いほど、ファイルが使用するスペースが再利用され、削除を元に戻すことが不可能になる(または削除されていないファイルのコンテンツが破損する)可能性があるため、今すぐサーバーをシャットダウンする必要があります。 )。削除を取り消す方法は、使用するファイルシステムによって異なります。ntfsundelete.comは、NTFSでの削除取り消しの Google検索で最初に役立つリンクです。
David Spillett、2010年

0

これがMyISAMテーブルである場合、/ var / log / mysqlまたはデータディレクトリが何であれ、テーブルファイルの削除を取り消す必要があります。たとえば、ext3grepユーティリティを使用できます。


ext3grepはext3ファイルシステム用です。Windowsを使用している場合は、ext3ファイルシステムを使用している可能性はほとんどありません(NTFSを使用している可能性がありますが、FAT32の場合もあります)。削除されたファイルの回復を試みる場合は、サーバー上で実行されている他のサービスに関係なく、できるだけ早くサーバーをシャットダウンする必要があります。サーバーがアクティブである時間が長いほど、削除を取り消すことができない可能性が高くなります。あなたは全然。
David Spillett、2010年

MyISAMテーブルを格納したボリュームでシャドウコピーをオンにしている場合は、それらを元に戻すことができます。
Catherine MacInnes、2010年

削除したデータベースファイルを復元するには、googleで「ntfs undelete」を検索します。あなたのPCのどこにdata dirがあるのか​​わかりません。my.iniを確認するか、たとえばMYD拡張子の付いたファイルを検索する必要があります。
Vladislav Rastrusny、2010年

0

を「元に戻す」ことはできませんDROP TABLE

MySQLでバイナリロギングが有効になっているかどうかを確認できます。おそらくそこからデータを抽出できます。

それ以外は、MySQLを忘れることができ、「誤ってファイルシステムからいくつかのファイルを削除してしまった」という同じクラスの問題に属しています。ファイルを回復しようとするツールがいくつかあります。また、専門的にそれを行う会社もあります。


-1

バイナリログを有効にしている場合、スキーマがある場合は、最初にテーブルを再作成するだけです。binlogをオフにした状態でスキーマを作成してください。または、セッションをスキップすることもできます。その後、テーブル自体を削除した最後のステートメントまでバイナリログを再生できます。

そうでない場合は、バックアップダンプがあればそれを使用して復元できます。あなたがcsvファイルを持っているなら、あなたはデータを回復するためにデータinfileメソッドをロードすることができます。mysqldumpから回復する場合は、データベース全体を復元するのではなく、ダンプファイルから単一のテーブルを復元することを検討してください。データサイズが大きすぎる場合は、ロードする前にキーを無効にすることを検討してください。これにより、復元プロセスが大幅に増加します。

将来的には、10〜24時間遅れる遅延スレーブが必要になる場合があります。perconaツールキット(pt-slave-delay)を使用して遅延スレーブを作成できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.