mysql binlog elk_利用MySQL的binlog日志文件恢复数据库

一、新建一个数据库test 在库里新建一个数据表test ,并插入几条数据

mysql>create database test CHARSET utf8;

Query OK, 1 row affected (0.01 sec)

CREATE TABLE test(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL)ENGINE=INNODB CHARSET=utf8;

mysql> insert into test(id,name)values(1,'andy');

Query OK, 1 row affected (0.02sec)

mysql> insert into test(id,name)values(2,'kevin');

Query OK, 1 row affected (0.02sec)

mysql> insert into test(id,name)values(3,'peter');

Query OK, 1 row affected (0.03 sec)

二、删除数据库

mysql>drop database test;

Query OK, 1 row affected (0.08sec)

mysql>

此时数据库已经被删除

mysql>show databases;

+--------------------------+

| Database |

+--------------------------+

| information_schema |

| hl_central_sms_deduction |

| mysql |

| performance_schema |

| sys |

+--------------------------+

5 rows in set (0.00sec)

mysql>

三、利用binlog日志进行恢复

1、查看binlog日志,过滤create database'字符串,并显示上下文5行

[root@orderer ~]# mysqlbinlog --base64-output=decode-rows -vvv /home/mysql-5.7.26/data/master-18-69.000021|grep 'create database' -C 5#200407 9:53:14 server id 693306 end_log_pos 376 CRC32 0x92e06e42 Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 376#200407 9:53:14 server id 693306 end_log_pos 483 CRC32 0x2616f602 Query thread_id=133963 exec_time=0 error_code=0SET TIMESTAMP=1586224394/*!*/;

create database test CHARSET utf8

/*!*/;

# at 483#200407 10:00:55 server id 693306 end_log_pos 548 CRC32 0x105bf6f3 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=no

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 548

可以看到create database test CHARSET utf8命令开始position号为376,

2、再过滤drop database 语句,并显示上下文5行

[root@orderer home]# mysqlbinlog --base64-output=decode-rows -vvv /home/mysql-5.7.26/data/master-18-69.000021|grep 'drop database' -C 5;

#200407 10:07:01 server id 693306 end_log_pos 1591 CRC32 0xc9f74901 Anonymous_GTID last_committed=6 sequence_number=7 rbr_only=no

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 1591#200407 10:07:01 server id 693306 end_log_pos 1683 CRC32 0x5f1c948b Query thread_id=133963 exec_time=0 error_code=0SET TIMESTAMP=1586225221/*!*/;

drop database test

/*!*/;

# at 1683#200407 10:20:03 server id 693306 end_log_pos 1748 CRC32 0x74d98fe0 Anonymous_GTID last_committed=7 sequence_number=8 rbr_only=no

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

# at 1748

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

3、开始位置376,结束位置1590,截取指定数据库test的日志并保存为.sql文件

[root@orderer home]# mysqlbinlog --start-position=376 --stop-position=1590 -d test /home/mysql-5.7.26/data/master-18-69.000021 > /home/binlog_test.sql

[root@orderer home]# ll

四、进入mysql,利用source恢复数据

设置sql_log_bin=0,;#设为0后,在Master数据库上执行的语句都不记录binlog,

mysql> set sql_log_bin=0;

Query OK, 0 rows affected (0.00 sec)

利用导出来的sql文件恢复数据

mysql> source /home/binlog_test.sql;

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Charset changed

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

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

Query OK, 1 row affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Database changed

Query OK, 0 rows affected (0.00sec)

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

Query OK, 0 rows affected (0.07sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

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

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.02sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.02sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.01sec)

Query OK, 0 rows affected (0.01sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00sec)

Query OK, 0 rows affected (0.00 sec)

验证结果

mysql>show databases;

+--------------------------+

| Database |

+--------------------------+

| information_schema |

| hl_central_sms_deduction |

| mysql |

| performance_schema |

| sys |

| test |

+--------------------------+

6 rows in set (0.00 sec)

已经看到刚才删除的test数据库了

mysql>use test;

Database changed

mysql>show tables;

+----------------+

| Tables_in_test |

+----------------+

| test |

+----------------+

1 row in set (0.01sec)

mysql>desc test;

+-------+-------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | NO | | NULL | |

+-------+-------------+------+-----+---------+----------------+

2 rows in set (0.00sec)

mysql> select *from test ;

+----+-------+

| id | name |

+----+-------+

| 1 | andy |

| 2 | kevin |

| 3 | peter |

+----+-------+

3 rows in set (0.00 sec)

查询数据表数据已经恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值