mysql5.7でbinlogを使用してデータを復元する方法

mysql5.7でbinlogを使用してデータを復元する方法

ステップ1: MySQLでbinlogが有効になっていることを確認する

'%log_bin%' のような変数を表示します。
log_bin はオンの場合有効になります。

ここに画像の説明を挿入

ステップ2: バイナリログファイルディレクトリに入り、バイナリログファイルを見つける

ここに画像の説明を挿入

mysql> show binary logs; # バイナリログファイルリストを取得しますmysql> show master status; # 現在書き込まれているバイナリログファイルを表示しますmysql> reset master; バイナリログをリセットします

ここに画像の説明を挿入

ステップ3: mysqlbinlogツールコマンドを使用して、データベースの追加、削除、変更、およびクエリレコードを表示します(有効にするにはmysqlbinlogディレクトリに切り替える必要があります)。または、binlogを直接指定します。

例 1 : 2021-3-12 14:00:00 から 2021-3-12 14:03:00 までの操作ログを照会します。データベースは g_xinxiangshop です。次のコマンドを入力して、データを予備の txt ファイルに書き込みます。

/usr/local/mysql/bin/mysqlbinlog --no-defaults --database=g_xinxiangshop --start-datetime="2021-3-12 14:00:00" --stop-datetime="2021-3-12 14:03:00" /usr/local/mysql/data/mysql-bin.000001 > /tmp/binlog.txt

例 2 : 2021-3-12 14:00:00 から 2021-3-12 14:03:00 までのデータベース g_xinxiangshop の操作ログを照会し、g_user テーブルのデータのみを含む操作レコードをフィルター処理します。次のコマンドを入力して、データを予備の txt ファイルに書き込みます。

/usr/local/mysql/bin/mysqlbinlog --no-defaults --database=g_xinxiangshop --start-datetime="2021-3-12 14:00:00" --stop-datetime="2021-3-12 14:03:00" /usr/local/mysql/data/mysql-bin.000001 | grep g_user > /tmp/binlog.txt

例3 :2021-3-15 15:25:00から2021-3-15 15:35:00までのデータベースg_shoptestの操作ログを照会し、画面に出力します。
/usr/local/mysql/bin/mysqlbinlog --no-defaults --database=g_shoptest --start-datetime="2021-3-15 15:25:00" --stop-datetime="2021-3-15 15:35:00" /data/mysql/mysql-bin.000001 |もっと見る

ここに画像の説明を挿入

画像は例 1 と例 2 と同じです。切り捨て操作と記録ポイントを確認した後、回復操作を実行できます。

ステップ4: bin_logを使用してデータを回復するテスト

mysqlにログイン
テスト

1.マスターをリセットし、binlogをリセットしてログを再生成する

ここに画像の説明を挿入

2.データを挿入し、その後誤って削除してテーブルをテストします。

ここに画像の説明を挿入

ここに画像の説明を挿入

3. bin-log コマンドを表示します: 'mysql-bin.000001' の binlog イベントを表示します。

ここに画像の説明を挿入

上の図に示すように、削除ポイントは928〜1294の間にあり、以前に追加されたデータは154〜520の間にあることがわかります。

ここに画像の説明を挿入

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 --開始位置 154 --停止位置 520 | mysql -uroot -p g_shoptest

実行が完了したら、データを削除して復元したかどうかを確認します。

ここに画像の説明を挿入

binlog コマンド

1. 最も一般的に使用される方法は、指定されたデータ終了時にデータを復元することです。これは、データベースに直接復元できます。

mysqlbinlog --start-date="2021-3-12 14:00:00" --stop-date="2021-3-12 14:03:00" mysql_bin.000001 |mysql -uroot -p123456

2. 開始位置と終了位置を指定します。上記で生成されたバイナリ ログから、ログの開始位置と終了位置を知ることができます。リカバリ プロセス中に、位置 A から位置 B までのログを指定できます。指定するには、次の 2 つのパラメータが必要です。

  • --start-positon="50" // 50番地から開始することを指定します
  • --stop-position="100"// 位置 100 で終了するように指定します

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 --開始位置 7903538 --停止位置 7904498|mysql -uroot -p123456

**一般的なエラーエラー: Log_event::read_log_event() のエラー: 'バイナリ ログに無効なイベントが見つかりました'、data_len: 31、event_type: 35

*この問題はmysqlbinlogのバージョンによって発生します

現在のOSで使用されているmysqlbinlogを表示する

シェル> mysqlbinlog
/usr/bin/mysqlbinlog

mysql で現在使用されている mysqlbinlog を表示します。

±--------------±------------------+
| 変数名 | 値 |
±--------------±------------------+
| ベースディレクトリ | /usr/local/mysql/ |
±--------------±------------------+

mysql> 'basedir' のような変数を表示します。

2つのバージョンを比較する

シェル> /usr/bin/mysqlbinlog --version
シェル> /usr/local/mysql/bin/mysqlbinlog --version

この問題を解決するには、mysqlbinlogパスを指定するだけです

/usr/local/mysql/bin/mysqlbinlog --no-defaults --database=g_xinxiangshop --start-datetime="2021-3-12 14:00:00" --stop-datetime="2021-3-12 14:03:00" /usr/local/mysql/data/mysql-bin.000001 > /tmp/binlog.txt

MySQL 5.7 で binlog を使用してデータを回復する方法に関するこの記事はこれで終わりです。MySQL binlog 回復の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースのリカバリ (mysqlbinlog コマンドを使用)
  • MySQL の Binlog 関連コマンドとリカバリテクニック
  • MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明
  • MySQL でデータ復旧に binlog を使用する方法
  • MySQLデータベースのログファイル(binlog)を自動的に復元する方法を説明します
  • Linux 上の binlog ファイルを使用して MySQL データベースを復元する詳細な手順
  • MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。
  • MySQLはmysqldump+binlogを使用して、削除されたデータベースの原理分析を完全に復元します。
  • MySQLはデータ復旧を実装するためにbinlogログを使用する
  • MySQL binlog を使用して誤って削除されたデータベースを復元する方法

<<:  Facebook によるインターネット サービスのほぼ完璧な再設計

>>:  VUEのデータプロキシとイベントの詳細な説明

推薦する

Centos8 システムの VMware インストール チュートリアル図 (コマンド ライン モード)

目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...

MySQL InnoDB row_id 境界オーバーフロー検証方法の手順

背景クラスメートと row_id の境界問題について話し合ったので、ここで詳しく説明します。 Inn...

MySQL 8.0.23のルートパスワードをリセットするための最適なソリューション

この方法は2021年2月7日に編集されました。私が使用しているバージョンは8.0.23です。事件の原...

自動ヘルスレポートを実現するDocker+Selenium方式

この記事では、ある大学の健康報告システムを例に、Web 側の自動化操作を完成させます。使用したテクノ...

MySQL水平および垂直テーブル変換操作の実装方法

この記事では、例を使用して、MySQL の水平テーブルと垂直テーブル間の変換操作を実装する方法を説明...

CSS3 グラデーション背景の互換性の問題

グラデーションの背景色を作成するときは、 linear-gradient() 関数を使用して線形グラ...

ネイティブJSは非常に見栄えの良いカウンターを実装します

今日は、ネイティブ JS で実装された見栄えの良いカウンターを紹介します。効果は次のとおりです。 以...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

MySQL マルチテーブルクエリの詳細な説明

いつも、気づかないうちに時間というのは驚くほど早く過ぎていきます。小暑が過ぎ、中暑に突入しました。太...

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...

垂直グリッドと漸進的な行間隔の例

新しい質問急いで来て、急いで行ってください。 「垂直グリッドとプログレッシブ行間隔 (パート 1)」...

Vueは宮殿のグリッド回転抽選を実現します

Vueは宮殿グリッド回転抽選(CrossFireのxx転生に似ている)を実装しています。参考までに、...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

CentOS7にMariaDB 10.2.4をインストールする方法の詳細な説明

CentOS 6 以前のバージョンでは、MySQL サーバー/クライアント インストール パッケージ...

gorm で MySql データベースを操作する方法

1. テーブル内のフィールドの大文字と小文字の区別を設定するgorm クエリを使用する場合、MySQ...