mysqlで誤って削除したデータを取得する方法

coldplay.xixi
リリース: 2020-10-13 17:42:54
オリジナル
18690 人が閲覧しました

誤って削除されたデータを取得する Mysql の方法: 最初に binlog で間違ったステートメントを見つけ、次に binlog ログを復元し、最後にデータベースに復元します。コードは [# mysql -uroot -p -f ids < data.sql 】。

mysqlで誤って削除したデータを取得する方法

#誤って削除したデータを取得するための Mysql メソッド:

1. binlog を見つけます

データ リカバリの前提条件は、Mysql のバイナリ ログが有効になっている必要があります。バイナリ ログが有効になっていない場合は、このドキュメントを無視してください。 binlog ログが有効になっているかどうかは、Mysql 設定ファイルで確認できます。ログの場所は通常、/var/lib/mysql ディレクトリ、またはコンパイルおよびインストールされた日付ディレクトリにあります。 Mysql にログインし、コマンドを使用して表示することもできます。

# cat /etc/my.cnf
log_bin=mysql-bin
# mysql -uroot -p
Enter password:
mysql> show variables like&#39;log_bin%&#39;;
+---------------------------------+--------------------------------------------------+
| Variable_name                   | Value                                            |
+---------------------------------+--------------------------------------------------+
| log_bin                         | ON                                               |
| log_bin_basename                | /home/programs/mysql-5.6.26/data/mysql-bin       |
| log_bin_index                   | /home/programs/mysql-5.6.26/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                                              |
| log_bin_use_v1_row_events       | OFF                                              |
+---------------------------------+--------------------------------------------------+
5 rows in set (0.00 sec)
# ll /home/programs/mysql-5.6.26/data/mysql-bin*
-rw-rw---- 1 mysql mysql 343629748 Oct 13 22:09 /home/programs/mysql-5.6.26/data/mysql-bin.000001
-rw-rw---- 1 mysql mysql        19 Sep 23 17:11 /home/programs/mysql-5.6.26/data/mysql-bin.index
ログイン後にコピー

複数の binlog ログがある場合は、Mysql コマンド ラインで現在の binlog を表示し、binlog ログを切り取ることもできます。 binlog を切り取って再度表示すると、新しいログが新しい binlog ファイルに書き込まれていることがわかります。

mysql> show master status;
+------------------+-----------+--------------+------------------+-------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 343629748 |              |                  |                   |
+------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)
ログイン後にコピー

2. binlog で間違ったステートメントを見つける

binlog ログで間違ったステートメントが実行された時点を見つけて、binlog ログを復元できます。 SQLとして間違ったステートメントの前後。この手順をスキップして、binlog ログ全体を SQL に直接復元し、SQL ファイルを開いてエラー ステートメントを削除することもできます。

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids mysql-bin.000001 | grep --ignore-case -A3 -B4 &#39;错误的sql语句&#39;
ログイン後にコピー

3. binlog ログの復元

mysqlbinlog コマンドを使用して、binlog ログを SQL スクリプトとして直接復元し、開始時刻と終了時刻を指定できます。最後のバックアップ (バックアップ中にバイナリ ログを更新することをお勧めします) からリカバリ時までに複数のバイナリ ログ ログが生成された場合は、それらを小さいものから大きいものへ順番に SQL にエクスポートし、順番にデータベースにインポートします。

# sudo mysqlbinlog --base64-output=DECODE-ROWS -v -d ids --start-datetime &#39;2016-10-11 15:22:53&#39; mysql-bin.000001 > /home/stack/data.sql
ログイン後にコピー

上記のコマンドでは、-d ids を使用して復元するデータベースを指定します。テーブルレベルのデータを復元する場合は、データを SQL にエクスポートしてから grep でフィルターします。

# more data.sql | grep --ignore-case -E &#39;insert|update|delete&#39; | grep table
ログイン後にコピー

4. データベースへの復元

データを復元するとき、重複データ エラーが発生する可能性があります。-f パラメーターを使用して無視することをお勧めします。

# mysql -uroot -p -f ids < data.sql
ログイン後にコピー

その他の関連する無料学習の推奨事項: mysql チュートリアル(ビデオ) #

以上がmysqlで誤って削除したデータを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート