誤って削除されたデータを復元するための mysqlbinlog コマンドを使用した mysql の実装

誤って削除されたデータを復元するための mysqlbinlog コマンドを使用した mysql の実装

実験環境:

MYSQL 5.7.22

バイナリログを有効にする

ログ形式 MIXED

実験プロセス:

1. 実行: FLUSH LOGS;

master-bin.000014ファイルは新しく生成されたファイルです

ログを更新する目的は、実験内容をより直感的にし、実験プロセス全体の内容を観察しやすくすることです。

REST MASTER を使用する記事をオンラインで多数見てきましたが、このコマンドの重要性については説明されていません。

このコマンドは、すべてのログ ファイルを削除し、ファイル名とログ ポイントをゼロにリセットします。99% の場合、このコマンドは必要ありません。

ログを削除するには、PURGE MASTER LOGSを使用できます...これはより安全です

2. 新しいログファイルが生成されました。まずは内容を確認してみましょう。理解しておくべき点がいくつかあります。

バイナリ ログ ファイルを表示するコマンド: mysqlbinlog master-bin.000014

# 4時
#180903 16:19:12 サーバー ID 1 end_log_pos 123 CRC32 0xe03659b3 開始: binlog v 4、サーバー v 5.7.22-log 作成 180903 16:19:12

まず、上の 2 つの矢印を見てください。

  • # 4(イベント開始地点)
  • #180903 16:19:12 (時刻を表す)
  • サーバー ID 1 (マスター スレーブ レプリケーションを実行する場合、各 MYSQL データベースに一意の SERVER ID を指定する必要があります。設定しておらず、デフォルトは 1 です)
  • end_log_pos 123 (イベント終了ポイント)

下の 2 つの矢印を見てください。

  • # 123 (イベント開始点、上記のイベント終了点に対応)
  • end_log_pos 154 (イベント終了ポイント)
  • 4時から123時までのコンテンツはイベントコンテンツです

3. ビジネス シナリオをシミュレートし、テーブルを作成し、データを挿入し、最後にテーブルを削除します。現実的にするために、2 つのデータベースを作成し、異なるデータベースに同時にコンテンツを書き込み、最後にデータベースの 1 つでテーブルを削除しました。

mysql> ログをフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> データベース t1 を作成します。
クエリは正常、1 行が影響を受けました (0.03 秒)

mysql> データベース t2 を作成します。
クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> t1 を使用します。
データベースが変更されました
mysql> テーブル t1 (id int) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

mysql> t2 を使用します。
データベースが変更されました
mysql> テーブル t2 (id int) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

mysql> t2値に挿入(3);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t2値に挿入(4);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t1 を使用します。
データベースが変更されました
mysql> t1値に挿入(1);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t1値に挿入(2);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t2 を使用します。
データベースが変更されました
mysql> t2 に値を挿入します(20);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t1 を使用します。
データベースが変更されました
mysql> t1 に値を挿入します(10);
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> テーブル t1 を削除します。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> t2 を使用します。
データベースが変更されました
mysql> t2 に値(222)を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)

マイSQL>

T1 および T2 ライブラリを作成し、T1 および T2 テーブルを作成します。

T1にデータを挿入: 1、2、10

T2にデータを挿入: 3、4、20、222

シミュレーション シナリオでは、テーブル T1 は削除されますが、データベース T2 内のテーブル T2 のビジネスは引き続き実行されます。

ここで、ログを通じて T1 テーブルを復元します。

まず、削除コマンドのログポイントを見つけます。

mysqlbinlog master-bin.000014|grep -5a "テーブルを削除" 

#AT 2439 を参照してください (この番号を書き留めてください)

このイベント ポイントで実行された DROP TABLE 操作。

ログ ファイルには T1 データベースのログだけでなく、T2 データベースのログも含まれているため、T1 データベースのログのみを取得します。

そして、ログポイント2439より前のログのみが取得され、再適用されます。

2439 ログが取得された場合、データベースはデータベースとテーブルを再構築し、データを挿入し、再度適用されたときにテーブル削除ステートメントを実行します。

mysqlbinlog -d t1 --stop-position=2439 master-bin.000014>test.sql (このステートメントの実行時にエラーが報告されました)

警告: オプション --database が使用されています。トランザクションの一部をフィルター処理する可能性がありますが、いずれの場合も GTID が含まれます。トランザクションを除外または含める場合は、代わりにそれぞれオプション --exclude-gtids または --include-gtids を使用する必要があります。
今のところ理由はわかりませんので、Baiduで検索して次のように修正しました。

mysqlbinlog マスターbin.000014 -d t1 --skip-gtids --stop-position=2439>test.sql 

-d: パラメータはデータベースログを指定します

このコマンドは、master-bin.000014ログファイル内のT1データベースログ、イベントポイント2439より前のログをtest.sqlに出力することを意味します。

# 末尾のテスト.sql

ファイルの最後の数行を見てください

データベースにログインします:

mysql> t1 を使用します。
データベースが変更されました

mysql> ソース test.sql

データベース T1 を構築するためのステートメントが含まれていたため、途中でエラーが 1 回報告されました。

表の内容をもう一度確認してください

このようにしてデータが返されます。

これで、mysqlbinlog コマンドを使用して誤って削除されたデータを回復する方法に関するこの記事は終了です。mysqlbinlog を使用して誤って削除されたデータを回復する方法の詳細については、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLコマンドが中国語で入力できない問題の解決方法
  • MySQL コマンドライン操作中のエンコードの問題の詳細な説明
  • MySQLソースコマンドの使い方の紹介
  • MySQLでよく使われるSQLとコマンドの入力からデータベースの削除、そして終了まで
  • MySQL ストアド プロシージャのクエリ コマンドの概要
  • MySQLデータベースでコマンドを自動補完する3つの方法
  • MySQL パスワードに特殊文字が含まれている場合とコマンドラインからログインする場合
  • MySQLデスクトップツールSQLyogのリソースとアクティベーション方法は、白黒のコマンドラインに別れを告げます
  • MySQL ログインおよび終了コマンドの形式
  • MySQLの認証コマンドgrantの使い方
  • MySQLの基本的な共通コマンドの概要

<<:  docker run後にコンテナがExited (0)と表示される問題を解決する

>>:  ウェブ上の模倣と盗作に関する議論

推薦する

Centos6にMysql5.7をインストールする方法

環境セントロス6.6 MySQL 5.7インストールシステムがインストールされている場合は、まずアン...

Linux のプロセスクラッシュの原因をコアダンプ技術を使用して追跡する簡単な分析

最近、プロジェクトで問題が発生しました。サーバー側のプログラムが突然クラッシュして終了しました。クラ...

純粋な CSS を使用して脈動するローダー効果のソースコードを作成する

効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...

MySQL 8.0.19 インストールチュートリアル

公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...

Windows での MySQL5 グリーン バージョンのインストールの概要 (推奨)

1 MySQLをダウンロードするダウンロードアドレス: http://downloads.mysq...

音楽プレーヤーアプリ(アプリケーションソフトウェア)の分析と再設計 美しい音楽プレーヤーインターフェースの設計方法

無線インタラクションにずっと興味があったので、今回は実践してみようと思います〜この分析と評価は iO...

Linuxサーバー間のリアルタイムファイル同期の実現

使用シナリオ既存のサーバー A と B の場合、サーバー A の指定されたディレクトリ (たとえば、...

Windows 10 システムに mysql-8.0.13 (zip インストール) をインストールする詳細なチュートリアル

インストール環境の説明•システムバージョン: windows10 •MySQL バージョン: mys...

Vueのイベント処理とイベント修飾子の詳細な説明

<div id="ルート"> <h2>頑張れ、{{na...

xshellを使用してLinuxサーバーに接続する

xshellを使用してLinuxに接続する利点Windows環境でLinuxを直接操作できるインター...

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...

js+ca​​nvas でコードレイン効果を実現

この記事では、js+ca​​nvasコードの雨効果の具体的なコードを参考までに共有します。具体的な内...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

Linux コマンドラインで他のユーザーと通信する方法

Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...

MySQLクライアントとサーバーのプロトコルの解釈

目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...