Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

導入

Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL ステートメント情報を記録するために使用されます。データが誤って削除された場合、binlog ログを通じて削除されたデータを復元できます。データの復元方法は、従来のバイナリ ファイル復元と GTID ベースのバイナリ ファイル復元に分かれています。

事前準備

Centos7仮想マシンを準備し、ファイアウォールとselinuxをオフにし、IPアドレスを設定し、システム時間を同期し、MySQLデータベースをインストールします。

従来のバイナリログ復元データ

設定ファイルを変更する

[root@localhost ~]# vi /etc/my.cnf
サーバーID=1
ログ bin = binlog

#データベースサービスを再起動します [root@localhost ~]# systemctl restart mysqld

運用データベース

mysql> データベース mydb を作成します。文字セットは utf8mb4 です。
mysql> mydb を使用します。
mysql> テーブル test(id int) を作成します。engine=innodb charset=utf8mb4;
mysql> テスト値に挿入(1);
mysql> テスト値に挿入(2);
mysql> テスト値に挿入(3);
mysql> テスト値に挿入(4);
mysql> コミット;
mysql> テスト セット id=10 を更新します (id=4)。
mysql> コミット;
mysql> テストから * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
| 10 |
+------+
セット内の 4 行 (0.00 秒)
mysql> データベース mydb を削除します。

バイナリログ情報を表示する

mysql> マスターステータスを表示します\G;
************************** 1. 行 ****************************
       ファイル: binlog.000001
     役職: 1960
   バイナリログ_Do_DB: 
 バイナリログを無視: 
実行されたGtidセット: 
セット内の 1 行 (0.00 秒)

 
#データベースの作成と削除のポイントは219と1868です
mysql> 'binlog.000001' の binlog イベントを表示します。
+---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+
| ログ名 | 位置 | イベント タイプ | サーバー ID | ログ終了位置 | 情報 |
+---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+
| binlog.000001 | 219 | クエリ | 1 | 329 | データベース mydb charset utf8mb4 を作成 |
| binlog.000001 | 1868 | クエリ | 1 | 1960 | データベース mydb を削除 |
+---------------+------+----------------+------------+-------------+---------------------------------------------------------------------+

バイナリログ情報として保存

[root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=1868 /var/lib/mysql/binlog.000001 > /tmp/binlog.sql

データの回復

#重複ログ記録を避けるためにバイナリログ記録を一時的にオフにします。mysql> set sql_log_bin=0;
#データを復元mysql> source /tmp/binlog.sql
#バイナリログを再開します。mysql> set sql_log_bin=1;

データ復旧ステータスを確認する

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
| マイデータベース |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
セット内の行数は 5 です (0.00 秒)

mysql> mydb を使用します。
データベースが変更されました
mysql> テストから * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
| 10 |
+------+
セット内の4行(0.00秒)、

GTIDバイナリログに基づくデータの復元

設定ファイルを変更する

[root@localhost ~]# vi /etc/my.cnf
サーバーID=1
ログ bin = binlog
gtid_mode=オン
強制GTID一貫性=true
ログスレーブ更新=1

#データベースサービスを再起動します [root@localhost ~]# systemctl restart mysqld

運用データベース

mysql> データベース mydb1 を作成します。
mysql> mydb1 を使用します。
データベースが変更されました
mysql> テーブル t1(id int) を作成します。engine=innodb charset=utf8mb4;
mysql> t1 に値を挿入します(1);
mysql> t1 に値を挿入します(2);
mysql> t1 に値を挿入します(3);
mysql> t1 に値を挿入します(11);
mysql> t1 に値を挿入します(12);
mysql> コミット;
mysql> t1 から * を選択します。
+------+
|id|
+------+
| 1 |
| 2 |
| 3 |
| 11 |
| 12 |
+------+
セット内の行数は 5 です (0.00 秒)
mysql> データベース mydb1 を削除します。

バイナリログ情報を表示する

mysql> マスターステータスを表示します\G;
************************** 1. 行 ****************************
       ファイル: binlog.000003
     役職: 1944
   バイナリログ_Do_DB: 
 バイナリログを無視: 
実行されたGtidセット: 51d3db57-bf69-11ea-976c-000c2911a022:1-8
セット内の 1 行 (0.00 秒)

mysql> 'binlog.000003' の binlog イベントを表示します。
+---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+
| ログ名 | 位置 | イベント タイプ | サーバー ID | ログ終了位置 | 情報 |
+---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+
| binlog.000003 | 154 | Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:1' |
| binlog.000003 | 219 | クエリ | 1 | 316 | データベース mydb1 を作成 |
| binlog.000003 | 1784 | Gtid | 1 | 1849 | SET @@SESSION.GTID_NEXT= '51d3db57-bf69-11ea-976c-000c2911a022:8' |
| binlog.000003 | 1849 | クエリ | 1 | 1944 | データベース mydb1 を削除 |
+---------------+------+----------------+------------+-------------+-------------------------------------------------------------------+

バイナリログ情報として保存

#トランザクション レコード 8 はデータベースを削除するため、トランザクション レコード 1 ~ 7 のみを復元する必要があります [root@localhost ~]# mysqlbinlog --skip-gtids --include-gtids='51d3db57-bf69-11ea-976c-000c2911a022:1-7' /var/lib/mysql/binlog.000003 > /tmp/gtid.sql

パラメータの説明:
--include-gtids: トランザクションを含める
--exclude-gtids: トランザクションを除外する
--skip-gtids: トランザクションをスキップする

データの回復

mysql> sql_log_bin=0 を設定します。
mysql> ソース /tmp/gtid.sql
mysql> sql_log_bin=1 を設定します。

データ復旧ステータスを確認する

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
| マイデータベース |
| mydb1 |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
セット内の 6 行 (0.00 秒)

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

Centos7 で MySQL ログベースのデータ復元を実装するためのサンプルコードに関するこの記事はこれで終わりです。 Centos7 MySQL ログ復元データの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux バックグラウンド ログの MySQL エラー例外の説明 (推奨)
  • Windows および Linux に MySQL をインストールした後にログ管理機能を有効にする方法

<<:  MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

>>:  JavaScript スネーク実装コード

推薦する

フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...

Linuxドライバのプラットフォームバスの詳細説明

目次1. プラットフォームバスの紹介1.1. Linuxドライバの分離と階層化1.1.1. Linu...

nginxワーカープロセスループの実装

ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...

MySQL Workbenchのダウンロードと使用方法のチュートリアルの詳細な説明

1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...

JS を使用してクリップボード内の Excel コンテンツを解析する方法

目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

Docker 階層化パッケージを使用して Spring Boot を設定する方法

Spring Boot プロジェクトでは、Docker コンテナ、jar、war の階層化パッケージ...

MySQL で指定した桁数の乱数を生成する方法と、バッチで乱数を生成する方法

1. まず、よく使われるMySQL関数をいくつか紹介しますRAND() は 0 から 1 (0<...

JDBC を使用して MySQL を操作するための簡単な分析では、Class.forName("com.mysql.jdbc.Driver") を追加する必要があります。

導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...

画像ボタン送信とフォーム繰り返し送信の問題に関する議論

多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...

例を通してMySQLの更新がテーブルをロックするかどうかを判定する

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレート...

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

ウェブページ印刷細線表+ページ印刷究極の戦略

最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...

JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つ...