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 スネーク実装コード

推薦する

MySQL でよく使用される SQL 文を表示する (詳細な説明)

#mysql -uroot -pパスワードを入力してくださいmysql> show full...

HTML のメタタグの簡単な比較

メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...

Linuxでファイルを削除してもスペースが解放されない問題の対処方法

問題の背景業務システムのサーバ監視システムからディスク使用率が90%に達したという早期警告通知が来た...

MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...

Vue の this.$store.state.xx.xx に関する簡単な説明

目次これを Vue.$store.state.xx.xxストアからデータを取得する私のプロジェクトフ...

React tsx はランダムな検証コードを生成します

React tsxは参照用にランダムな検証コードを生成します。具体的な内容は次のとおりです。最近、t...

CentOS 6.5 i386 インストール MySQL 5.7.18 詳細チュートリアル

ほとんどの人はMySQLをコンパイルしてシステムディレクトリに置きますが、私のやり方はコンパイルした...

Vueプロジェクトの最適化とパッケージ化の詳細な説明

目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...

IframeとFRAMEの違いの分析

1. Iframe タグの使用<br />Iframe については、「忘れられた隅」に放...

いくつかの CSS3 タグの短縮形 (推奨)

border-radius: CSS3 丸い角構文: border-radius: 25px;楕円...

JQuery を放棄すべきでしょうか?

目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...

CSSカスタムプロパティの予備的な理解

現在、CSS プリプロセッサは Web 開発の標準となっています。 プリプロセッサの主な利点の 1 ...

Nginx リバース プロキシ学習例チュートリアル

目次1. リバースプロキシの準備1. LinuxシステムにTomcatをインストールする2. Tom...

高度なクローラー - JS 自動レンダリングのための Scrapy_splash コンポーネントの使用

目次1. scrapy_splash とは何ですか? 2. scrapy_splashの役割3. s...

キーボード上の各種特殊記号の英語読み方(知識の普及)

キーボード文字英語`バッククォート〜チルダ!叫ぶ@で#ナンバーサイン$ドル%パーセント^キャレット&...