ホームページ  >  記事  >  データベース  >  mysqlで削除されたテーブルを復元するにはどうすればよいですか?誤って削除されたテーブルからデータを取得する MySQL メソッド

mysqlで削除されたテーブルを復元するにはどうすればよいですか?誤って削除されたテーブルからデータを取得する MySQL メソッド

黄舟
黄舟オリジナル
2017-03-28 13:28:3119489ブラウズ

以下のエディターは、記事 mysql 誤って削除されたテーブルからデータを取得する方法 (必読) を提供します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。

mysqlで削除されたテーブルを復元するにはどうすればよいですか?誤って削除されたテーブルからデータを取得する 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=&#39;2013-02-04 10:00:00&#39; --stop-date=&#39;2013-02-04 12:08:45&#39; /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 ファイルを一時ライブラリに取得し、アプリを削除前の状態に復元します。 次に、一時データベースからライブ ネットワーク データにデータをインポートします (これはこの記事の焦点では​​ありません)。

バックアップがない場合、アプリテーブルに関連するすべてのデータを取得するのは非常に面倒になる可能性があります。特に、binlog ファイルが多く、それぞれのファイルが比較的大きいためです。

その場合、mysqlbinlogを使って、アプリの設立から現在までのアプリテーブルに関連するDML操作のSQLレコードを一つ一つ取得し、データを統合して復元するしかありません。

このような状況は一般的には比較的まれだと思います。面倒ではありますが、回復することは不可能ではありません。

以上がmysqlで削除されたテーブルを復元するにはどうすればよいですか?誤って削除されたテーブルからデータを取得する MySQL メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。