目次
3.2.1. mysqlbinlog を介して binlog を SQL に変換し、特定の場所のクエリを容易にする
3.2.2. 生成されたbackuptmp.sqlを表示し、復元する開始位置が219で終了位置が982であることを最終的に確認します。
3.2.3. mysqlbinlog を介してリカバリ操作を実行する
1.binlogの基本概念
バイナリ ログには、MySQL データベースに変更を加えるすべての操作がイベントの形式で記録されます。
Binlog は、すべてのデータベース テーブル構造の変更 (CREATE、ALTER TABLE、DROP など) とテーブル データの変更 (INSERT、UPDATE、DELETE、TRUNCATE など) を記録するバイナリ ログです。SELECT や SHOW などの操作はデータ自体を変更しないため記録されませんが、一般ログをクエリすることで MySQL によって実行されたすべてのステートメントを表示できます。
Binlog には 2 つの一般的な使用シナリオがあります。
- マスター/スレーブ レプリケーション: マスター ノードはバイナリ ログをオンにし、マスターはそのバイナリ ログをスレーブに渡して、マスターとスレーブのデータの一貫性を実現します (詳細については、「MySQL 実践操作 (2) - MySQL マスターとスレーブの同期 実践的な Combat_Drunken Godot のブログ」を参照してください) ) -CSDN ブログ)。
- データ復旧: mysqlbinlog ツールを使用してデータを復旧します (この記事では主に機能について説明します)。
2.MySQL がバイナリログを有効にする
MySQL のインストール後、バージョン MySQL 5.7 ではデフォルトで binlog が有効になりませんが、MySQL 8 ではデフォルトで binlog が有効になります。MySQL にログインした後、次のように binlog ステータス SQL を確認します。
show variables like '%log_bin%';
binlog ログが有効になっていない場合は、次の手順に従って binlog ログを有効にします。
binlog ログを有効にする
MySQL 設定ファイルを変更します。Linux の設定ファイルは my.conf です。Windows の場合は、my.ini です。以下では、デモンストレーションの例として centos を使用します。
- 設定ファイルを編集する
vim /etc/my.cnf
- 設定項目を追加する
log-bin=mysql-bin
server-id=1
- MySQLサービスを再起動します
systemctl restart mysqld
- MySQL を入力して、binlog ログが正常に開かれたかどうかを確認します。
log_bin は ON で、このパラメータが有効であることを示します。つまり、システムが bin ログを記録します。
log_bin_basename は、bin ログのファイル パスとファイル プレフィックスを構成します。
log_bin_index は、bin ログ インデックス ファイルのパスを構成します。
- ログリストを見る
show master logs;
- log_bin_basename のパスに従って binlog 固有のファイルを表示します。
3. binlog ログを使用してデータを復元する
原則: データベースが変更されると、バイナリログはデータベース内のすべての変更を記録します。リカバリが必要な場合は、バイナリログの開始位置と終了位置に基づいて操作の元の部分を復元できます。通常、終了位置は位置です。データが破壊または削除される前に。
3.1. リカバリ前の準備
binlog を開いた後、テスト データベースを作成し、テスト データベースにテスト テーブルを作成して、データを書き込みます。
create database test;
use test;
CREATE TABLE `testuser` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` decimal(18,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into `testuser`(`id`,`name`,`age`) values (1,'张三',24.00);
この時点で、テスト データベースが誤って削除された場合は、binlog を使用してデータベース、データベース内のテーブル、およびテーブル内のデータに応答できます。
drop database test;
3.2.データ復旧
データを復元する必要がある場合、データ復元後の最新の業務への影響を防ぐために、フラッシュ ログを実行して新しい binlog ファイルを生成する必要があります。このとき、古い binlog ファイルは書き込まれなくなります。 ;
以下では、特に mysql-bin.000001 を使用してデータ回復を実行します。
復元するときは、バイナリログ内の 2 つの場所を見つける必要があります。
- データ復旧の出発点
- データ復旧の終点
たとえば、データ準備のドロップ操作中に、バイナリログ内の場所を見つけて、この場所をデータ回復の終了場所として使用する必要があります。
3.2.1. mysqlbinlog を介して binlog を SQL に変換し、特定の場所のクエリを容易にする
mysqlbinlog --set-charset=utf-8 /var/lib/mysql/mysql-bin.000001>backuptmp.sql
3.2.2. 生成されたbackuptmp.sqlを表示し、復元する開始位置が219で終了位置が982であることを最終的に確認します。
3.2.3. mysqlbinlog を介してリカバリ操作を実行する
mysqlbinlog -v /var/lib/mysql/mysql-bin.000001 --start-position=219 --stop-position=982 | mysql -uroot -p123456
/var/lib/mysql/mysql-bin.000001 binlog ファイルを操作するには
--start-position=219 データ回復の開始位置
--stop-position=982 データ回復の終了位置
mysql -uroot -p123456 データリカバリにはデータベースにログインする必要があります