Mysqlのセキュリティ設定-データベースデータを復元するためのbinlog

すべてのbinlogログのリストを表示します。

 show master logs;
 +------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 149 |
| mysql-bin.000002 | 4102 |
+------------------+-----------+
2 rows in set (0.00 sec)

最新のbinlogを表示する

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 4102 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

ログの場所を表示する

 show variables like 'log_%';
mysql>  show variables like 'log_%';
+----------------------------------------+----------------------------------------+
| Variable_name                          | Value                                  |
+----------------------------------------+----------------------------------------+
| log_bin                                | ON                                     |
| log_bin_basename                       | /var/lib/mysql/binlog                  |
| log_bin_index                          | /var/lib/mysql/binlog.index            |
| log_bin_trust_function_creators        | OFF                                    |
| log_bin_use_v1_row_events              | OFF                                    |
| log_error                              | /var/log/mysqld.log                    |
| log_error_services                     | log_filter_internal; log_sink_internal |
| log_error_suppression_list             |                                        |
| log_error_verbosity                    | 2                                      |
| log_output                             | FILE                                   |
| log_queries_not_using_indexes          | OFF                                    |
| log_raw                                | OFF                                    |
| log_slave_updates                      | ON                                     |
| log_slow_admin_statements              | OFF                                    |
| log_slow_extra                         | OFF                                    |
| log_slow_slave_statements              | OFF                                    |
| log_statements_unsafe_for_binlog       | ON                                     |
| log_throttle_queries_not_using_indexes | 0                                      |
| log_timestamps                         | UTC                                    |
+----------------------------------------+----------------------------------------+19 rows in set (0.11 sec)

データベースのデータ損失をシミュレートしてデータを回復します。

新しいデータベーステストの作成1ライブラリに新しいデータテーブルtest1を作成し、いくつかのデータを挿入します

create database test1 CHARSET utf8;
CREATE TABLE test1(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL)ENGINE=INNODB CHARSET=utf8;
insert into test1(id,name)values(1,'andy');
insert into test1(id,name)values(2,'kevin');
insert into test1(id,name)values(3,'peter');

データベースを削除する

 drop database test1;
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| blog               |
| goodssystem        |
| hxpurchase         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

binlogを使用してログを復元します。

binlogログを表示し、データベースの作成文字列をフィルタリングして、コンテキストを5行表示します。

 mysqlbinlog --base64-output=decode-rows -vvv /var/lib/mysql/binlog.000010|grep 'create database' -C 5
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 35484306
#201107 15:36:45 server id 1  end_log_pos 35484430 CRC32 0xbc93546e 	Query	thread_id=1358	exec_time=0	error_code=0	Xid = 313396
SET TIMESTAMP=1604734605/*!*/;
/*!80016 SET @@session.default_table_encryption=0*//*!*/;
create database test1 CHARSET utf8
/*!*/;

create database test1 CHARSETutf8コマンドの開始位置番号が35484306であることがわかります。

####次に、drop databaseステートメントをフィルタリングし、コンテキストを5行表示します。

 mysqlbinlog --base64-output=decode-rows -vvv /var/lib/mysql/binlog.000010|grep 'drop database' -C 5
/*!80014 SET @@session.immediate_server_version=80022*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 35485840
#201107 15:40:50 server id 1  end_log_pos 35485947 CRC32 0x75bb6265 	Query	thread_id=1358	exec_time=0	error_code=0	Xid = 313437
SET TIMESTAMP=1604734850/*!*/;
drop database test1
/*!*/;

ドロップデータベーステストによって実行された位置番号が35485840であることがわかります。次に、インターセプトの終了の位置番号を35485839に設定して、ドロップステートメントの前のすべてのログのみがインターセプトされるようにすることができます。

開始位置35484306、終了位置35485839、指定されたデータベースtest1のログをインターセプトし、それを.sqlファイルとして保存します。

mysqlbinlog --start-position=35484306 --stop-position=35485839 -d test1 /var/lib/mysql/binlog.000010 > /home/binlog_test.sql 

mysqlと入力し、ソースを使用してデータを復元します

source /home/binlog_test.sql;

mysql>  source /home/binlog_test.sql;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Charset changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected, 1 warning (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

結果を見る

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| blog               |
| goodssystem        |
| hxpurchase         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
8 rows in set (0.01 sec)

mysql> use test1;
use test1;
^C
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| test1           |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from test1;
+----+-------+
| id | NAME  |
+----+-------+
|  1 | andy  |
|  2 | kevin |
|  3 | peter |
+----+-------+
3 rows in set (0.01 sec)

おすすめ

転載: blog.csdn.net/qq_43549291/article/details/109678396