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)

模拟数据库数据丢失恢复数据:

新建一个数据库test 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日志,过滤create database’字符串,并显示上下文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 CHARSET utf8命令开始position号为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
/*!*/;

可以看到drop database test 执行的position号为 35485840,那么我们截取结束的position号设置为 35485839即可,这样就只截取drop语句之前的所有日志

开始位置35484306,,结束位置 35485839,截取指定数据库test1的日志并保存为.sql文件

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

进入mysql,利用source恢复数据

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