MySQL binlog を使用して誤って削除されたデータベースを復元する方法

MySQL binlog を使用して誤って削除されたデータベースを復元する方法

1 現在のデータベースの内容を表示し、データベースをバックアップする

データベース情報を表示します:

データベースをバックアップします。

[root@localhost ~]# mysqldump -u root -pt > /mnt/t.sql
パスワードを入力してください: 
[root@localhost ~]# ll /mnt/t.sql 
-rw-r--r-- 1 ルート ルート 1771 8月 25日 11:56 /mnt/t.sql

2 bin_log関数を有効にする

まず、データベースでbin_log関数が有効になっているかどうかを確認します。

mysql> "%log_bin%"のような変数を表示します。

/etc/のmysql設定ファイルmy.cnfを変更し、log_bin = mysql_binという行を追加する必要があります。

3 誤操作をシミュレートする(3つのデータを挿入、データベースを削除する)

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

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

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

mysql> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 5 |
| 4 |
| 3 |
+------+
セット内の行数は 5 です (0.00 秒)

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

mysql> マスターステータスを表示します。
+------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql_bin.000003 | 106 | | |
+------------------+----------+--------------+------------------+
セット内の 1 行 (0.00 秒)

データの削除:

mysql> t1を切り捨てます。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> t1 から * を選択します。
空のセット (0.00 秒)

この時点でデータベースは突然破損したり手動で削除されたりします

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

mysql> テーブルを表示します。
空のセット (0.00 秒)

4 データ復旧

1 バックアップした/mnt/t.sqlを使用してデータを復元する

mysql> ソース /mnt/t.sql;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.01 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、2 行が影響を受けました (0.00 秒)
記録: 2 重複: 0 警告: 0

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> テーブルを表示します。
+-------------+
| テーブル_in_t |
+-------------+
| t1 |
+-------------+
セット内の 1 行 (0.00 秒)

mysql> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
+------+
セット内の 2 行 (0.00 秒)

2 まだ復元されていないデータが3つあります。どうすればいいですか? bin-logを使用してのみ復元できます

[root@localhost ~]# mysqlbinlog --no-defaults /var/lib/mysql/mysql_bin.000002 | mysql -u root -p123.com t
mysql> t を使用します。
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。

データベースが変更されました
mysql> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
セット内の行数は 5 です (0.00 秒)

マイSQL>

5 結論

データのバックアップ

mysqldump -uroot -p123456 テスト -l -F '/tmp/test.sql'
-l: 読み取りロック (読み取りのみ可能、更新不可)
-F: ログをフラッシュし、log-bin ログを含む新しいログファイルを再生成します。

binlog ログを表示

mysql>マスターステータスを表示します。

インポートする前にデータをバックアップする

mysql -uroot -pt -v -f </mnt/t.sql
-vはインポートに関する詳細情報を表示します -fは途中でエラーが発生した場合にそれをスキップして次の文の実行を続行できることを意味します

binlog-file バイナリログファイルを復元する

mysqlbinlog --no-defaults binlog-file | mysql -uroot -pt

ある時点から回復する(367)

mysqlbinlog --no-defaults --stop-position="367" mysql-bin.000001| mysql -uroot -pt

まずその点を確認し、さらに確認する

[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | 続き

その後復元

[root@localhost mysql]# /usr/bin/mysqlbinlog --no-defaults mysql-bin.000002 --start-position="794" --stop-position="1055" | /usr/bin/mysql -uroot -pt

バイナリログをリセット

mysql> マスターをリセットします。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> マスターステータスを表示します。
+------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+
mysql> flush logs;#現在のバイナリ ログ ファイルを閉じて、新しいバイナリ ログ ファイルを作成します。新しいバイナリ ログ ファイルの名前は、現在のバイナリ ファイルの番号に 1 を加えたものになります。

これで、MySQL 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ログを使用する
  • mysql5.7でbinlogを使用してデータを復元する方法

<<:  CSS3 border-radius 丸角の実装方法と使い方の詳しい説明

>>:  HTML の <input> タグの詳細な説明と、それを無効にする方法

推薦する

CSS3の3D効果を使って立方体を作成する

CSS3 の 3D 効果を使用して立方体を作成する方法を学ぶと、3D シーンの回転と変位のプロパティ...

Centos7 で crontab + シェル スクリプトによる定期的な自動ファイル削除の問題を解決する

問題の説明:最近、rsyncで毎回同期するデータ量が多いが、データベースのbakファイルを保持する必...

一般的な XHTML タグの使用方法の紹介

XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...

MySQLパスワードを変更するいくつかの方法

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

MySQL 5.7 でパスワードを変更する簡単な方法

これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...

Linux でファイルプレフィックスを一括で追加する方法

フォルダー内のすべての txt ファイルのファイル名の前に「gt_」を追加する必要があります。つまり...

MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス

目次チュートリアルシリーズ1. MySQL アーキテクチャクエリキャッシュキャッシュされないクエリ:...

MySQL 5.7 をインストールした後にコマンドライン ウィンドウを開くとクラッシュする問題の解決方法

序文最近、MySQL 5.7 をインストールしましたが、問題が見つかりました。コマンド ライン ウィ...

MySQL5.6.31 winx64.zip インストールと設定のチュートリアル

#1. ダウンロード # #2. ローカルに解凍し、必要な構成のmy*.iniを変更します。 #3....

CSS ファイルをインポートする 4 つの方法 (インライン、インライン、外部、インポート) の詳細な説明

CSS インポート方法 - インラインスタイルタグ属性を通じて、CSSのキーと値のペアがタグに直接書...

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、シンプルなショッピングカートケースを実装するためのVueの具体的なコードを...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...

Linux で最も頻繁に使用されるターミナル コマンドのトップ 10 のリストを取得します。

私が最も頻繁に使用するコマンドは次の通りです:選択肢CDギットls ssh須藤数週間前、私はこの R...

Dockerコンテナ間で通信する3つの方法

Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...