以下のエディターは、記事 mysql 誤って削除されたテーブルからデータを取得する方法 (必読) を提供します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。
バックアップがある場合は、最新のバックアップ データを生成し、mysqlbinlog を使用してバックアップ時点以降のデータを取得し、復元するだけで済みます。
バックアップがない場合、さらに面倒になる可能性があり、データを取得するコストも非常に高くなります。
以下は、バックアップ時点の後にデータを取得するための mysqlbinlog の概要です。簡単な実験では、mysql テーブル データ を削除し、mysqlbinlog を使用して削除したばかりのテーブルのデータを取得します。建 App テーブルの作成時間とデータの挿入
原則: MySQLBINLOG前提: MySQL が bin ログ ログをオープンしました
テストが削除される前:
mysql> show tables; +-----------------------+ | Tables_in_report_sina | +-----------------------+ | app | | test | +-----------------------+ mysql> select now(); +---------------------+ | now() | +---------------------+ | 2013-02-04 11:45:44 | +---------------------+ 1 row in set (0.01 sec) mysql> select count(1) from app; +----------+ | count(1) | +----------+ | 10 | +----------+ 1 row in set (0.01 sec)
データの削除を開始します:
mysql> delete from app where id =1; Query OK, 1 row affected (0.00 sec) mysql> mysql> delete from app where id <6; Query OK, 4 rows affected (0.01 sec) mysql> select count(1) from app; +----------+ | count(1) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2013-02-04 12:08:45 | +---------------------+
データの取得を開始します:
1. bin ログの場所を見つけます:/app/mysql/log -rw-rw---- 1 mysql mysql 17K Feb 4 11:43 alert.log -rw-rw---- 1 mysql mysql 1.0K Nov 1 14:52 master-bin.000001 -rw-rw---- 1 mysql mysql 126 Dec 25 14:00 master-bin.000002 -rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000003 -rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000004 -rw-rw---- 1 mysql mysql 107 Dec 25 14:02 master-bin.000005 -rw-rw---- 1 mysql mysql 13K Feb 4 12:02 master-bin.000006最近変更された bin ログは master-bin.000006 のみであることがわかります (削除した場合)データを復元するときは、bin ログを 1 つずつ取得する必要があります)この期間中に実行されたすべての SQL ステートメントを、復元する SQL ファイルに保存します。
mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql/log/master-bin.000006 >/app/mysql/mysql_restore_20130204.sqlもちろん、現在のネットワーク環境では、この時間はそれほど正確ではない可能性があり、他のトランザクション SQL ステートメントからの干渉も発生します。
一時データベースを作成します
create database for_bak;誤って削除したテーブルアプリを現在のデータベースにエクスポートします
mysqldump -uroot -ppwd my_db app > /app/mysql/app.sql
現在のデータを一時テーブルにインポートします:
mysql -root -ppwd for_bak < /app/mysql/app.sql
/app /mysql/mysql_restore_20130204.sql の内容の一部: (罪深い delete ステートメントが表示されます) SET TIMESTAMP=1359949544/*!*/;
BEGIN
/*!*/;
# at 12878
#130204 11:45:44 server id 1 end_log_pos 12975 Query thread_id=5 exec_time=974 error_code=0
SET TIMESTAMP=1359949544/*!*/;
delete from app where id =1
/*!*/;
# at 12975
#130204 11:45:44 server id 1 end_log_pos 13002 Xid = 106
COMMIT/*!*/;
# at 13002
#130204 11:45:44 server id 1 end_log_pos 13077 Query thread_id=5 exec_time=1013 error_code=0
SET TIMESTAMP=1359949544/*!*/;
BEGIN
/*!*/;
# at 13077
#130204 11:45:44 server id 1 end_log_pos 13175 Query thread_id=5 exec_time=1013 error_code=0
SET TIMESTAMP=1359949544/*!*/;
delete from app where id <6
/*!*/;
# at 13175
#130204 11:45:44 server id 1 end_log_pos 13202 Xid = 107
COMMIT/*!*/;
DELIMITER ;
# End of log file
データがいつ削除されたかを確認できます。 幸いなことに、select from_unixtime(1359949544); を使用して特定の時間をクエリすることもできます。このファイルには create table app ステートメントと insert ステートメントも含まれています。 delete ステートメントを手動で削除した後、mysqlbinlog によって取得された SQL ファイルを一時ライブラリに取得し、アプリを削除前の状態に復元します。 次に、一時データベースからライブ ネットワーク データにデータをインポートします (これはこの記事の焦点ではありません)。
このような状況は一般的には比較的まれだと思います。面倒ではありますが、回復することは不可能ではありません。
以上がmysqlで削除されたテーブルを復元するにはどうすればよいですか?誤って削除されたテーブルからデータを取得する MySQL メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。