ホームページ  >  記事  >  バックエンド開発  >  MySQL の特定のテーブルのデータの一部が理由もなく削除されました。原因を確認するにはどうすればよいですか?

MySQL の特定のテーブルのデータの一部が理由もなく削除されました。原因を確認するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-07-22 12:01:241219ブラウズ

データベースは Mysql で、現在 144059 人のユーザー情報が含まれています。最近、一部のユーザーが以前に登録したことがあるが、しばらくするとログインできなくなり、再度登録する必要があるというフィードバックがありました。ウェブサイトはPHPです。フィードバックをいただいた後、cron ジョブとログを確認しましたが、原因は見つかりませんでした。 (ログインできない原因はユーザー情報が削除されているためです)

そこで、どこから始めればよいのかお聞きしたいと思います。

++++++++++++++++++++++++++++++++++++++++++
その後、いくつかの権限を変更しました、ユーザーの喪失は一度も起こりませんでした(2か月が経過しました)。しかし、前回のユーザー喪失の理由はまだ見つかっていません。
とにかく、事件は解決しました。

返信内容:

データベースにはログがあります (人々が見ることができるテキスト ログを指すものではありません)。削除ステートメントのトランザクション ID を見つけて、そこにロールバックすることができます。 データにアクセスできるすべてのプログラマーを逮捕し、その後、タイガーベンチとペッパーウォーターを使用すると、1 時間以内に誰かが秘密裏にデータを削除したことを認めるでしょう。 原因を見つけるには、ログを分析するだけです
ログ情報が不完全な場合は、必要に応じて完成させてください
さらに、SQLインジェクションを疑う人はいますか? MySQL が binlog を有効にすると、書き込み操作がバイナリ ログに記録されます。mysqlbinlog を使用してデータを表示、エクスポート、復元できます。

以前に mysqldump の完全バックアップと binlog 増分バックアップを実行したと仮定します (パラメータ - を使用します)。 mysqldump の完全バックアップ中) -flush-logs は完全バックアップの前に binlog をクリアします)

まず mysqldump で以前の完全バックアップを復元し、次に mysqlbinlog を使用してポイントインタイム復元を実行します:

<code class="language-text">mysql -uroot -prootpwd db_name < db_name.sql 
mysqlbinlog --stop-datetime="2013-10-12 12:30:00" /var/log/mysql/mysql-bin.000001  |  mysql -uroot -prootpwd
</code>
まずコードのロジックを確認しましょう。いくつかのレコードが不可解に失われた場合、データベース自体やハードディスクに問題がある可能性は低いです。データを取り戻したとしても、コードのロジックが間違っていると、将来的にデータが失われることになります。 ハードディスクのデータが消えてしまった! percona 5.6 を例に挙げます:
2 つの方法があります:
1 general_log を使用する
2 監査プラグインを使用する

1 general_log を使用する
general_log を開く
<code class="language-text">set global general_log=on;
 
 mysql> show variables  where value like '%table%'
    -> ;
+------------------------------+-----------------------+
| Variable_name                | Value                 |
+------------------------------+-----------------------+
| log_output                   | TABLE                 |
| slave_rows_search_algorithms | TABLE_SCAN,INDEX_SCAN |
| tx_isolation                 | REPEATABLE-READ       |
+------------------------------+-----------------------+
3 rows in set (0.00 sec)
</code>
Datahekr データベース ミドルウェアを使用できます。これには SAAS バージョンがあり、データベースに付属する LOG 機能よりも詳細な監査情報を提供できます。 データベースにはスロークエリログ、実行SQLログ、エラーログなどが存在します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。