mysql二进制还原表_mysql数据库通过二进制 -【恢复数据记录】

本文详细介绍了如何利用MySQL的二进制日志(binlog)进行数据恢复,包括如何修改配置启用日志,创建数据库和表,插入、删除数据,以及如何按特定时间点或位置恢复数据。此外,还提供了在恢复过程中遇到问题的解决方案和注意事项。
摘要由CSDN通过智能技术生成

1.修改配置文件

vi /etc/my.cnf

log-bin = binlog

87fb8c07429ca6f4f0c3158a7d20ec01.png

systemctl restart mysqld

mysql -uroot -p123456

mysql> show variables like 'log_bin' ;

mysql> show VARIABLES like '%log_bin%';

ls /var/lib/mysql/

fbb516e156210e739c827490ae46e5a1.png

2.创建数据库

create database mytest;

use mytest;

create table t(aint PRIMARY key)ENGINE = INNODB DEFAULT CHARSET=utf8;

flush logs;

mysqlbinlog--no-defaults /var/lib/mysql/binlog.000001

[root@localhost ~]# ls /var/lib/mysql/

333e4e8a132bd9a7295315a5366b9a21.png

数据创建日志和记录日志

0bd683bbe481a277da8dce9390813a9b.png

3.插入数据

use mytest;

insert into tselect 1 union all select 2 union all select 3;

flush logs;

fb2df977531163a386e42b48f4163f7e.png

数据插入日志记录

d1005f4bb94295b1b920cb1b3f39f251.png

3d44ca0e396ac2dee19e20c127435ca5.png

5.删除数据库

drop database mytest;

flush logs;

a45b0edc3814ed592a6d1a7652dd5b7f.png

af6a92ee5e403121bdd9e721adcee202.png

删除记录日志

611e385ee8141bd05bf8313da190d2b3.png

6.恢复数据

mysqlbinlog --no-defaults /var/lib/mysql/binlog.000001 /var/lib/mysql/binlog.000002 | mysql -uroot -p123456

69426eb2ae0e091050b97d13ee18137e.png

数据恢复成功

8a4abff08fd3494c8e889b1ddc945d57.png

二. 按时间点恢复数据

create table t2(a int PRIMARY key)ENGINE=INNODB default CHARSET=utf8;

insert into t2 values(1),(2),(3),(4),(5);

删除数据

delete from t2 where a < 4;

flush logs;

15884ddbbf89baa9ea6f74cfad0e1f00.png

eb1d4394db3ef2693b4999947d7f2666.png

其中创建记录和删除记录我们要恢复到pos997

b0edb3bad14b9a043130e2f79fbfeaa5.png

删除库mytest,回到最原始的地方

drop database mytest;

按时间恢复记录

mysqlbinlog --no-defaults --start-position="4" --stop-position="997" /var/lib/mysql/binlog.000004 | mysql -uroot -p123456

数据恢复

6add098c60b88055deb8bde102952247.png

mysqlbinlog --no-defaults --start-position="4" --stop-position="997" /var/lib/mysql/binlog.000004 | mysql -uroot -p123456

mysqlbinlog mysql_bin.000001 --start-datetime='2018/04/11 15:00:45' --stop-datetime='2018/04/11 15:01:35'mysqlbinlog mysql_bin.000001 --start-position=1903 --stop-position=2020

https://m.jb51.net/article/111404.htm

21015ef8aadbfd1c737a59d764788bf6.png

时间点恢复表里可能没数据因为多个事务时间一样

mysqlbinlog --no-defaults --stop-datetime="2019-08-29 20:47:30" /var/lib/mysql/mysql-bin-master.000003 | mysql -uroot -p123456

第一恢复提示表存在在库中删除表再恢复就正常恢复了

[root@mysql115 ~]# mysqlbinlog /var/lib/mysql/mysql-bin-master.000003 --stop-position=1545750 | mysql -uroot -p123456

mysql: [Warning] Using a password on the command lineinterfacecan be insecure.

ERROR1050 (42S01) at line 28137: Table 't'already exists

[root@mysql115~]# mysqlbinlog /var/lib/mysql/mysql-bin-master.000003 --stop-position=1545750 | mysql -uroot -p123456

mysql: [Warning] Using a password on the command lineinterface can be insecure.

drop table t;

467370cf5c66fba02d4a8aa344944b1a.png

按时间点恢复操作注意

1.表中有数据的时候 刷新日志记录 生成新的日志文件/var/lib/mysql/mysql-bin-master.000005

3f945d09d107bb1e315f8f96b70861f5.png

查看旧的bing日志 2019-08-30 16:25:46 硬化了日志

mysqlbinlog /var/lib/mysql/mysql-bin-master.000004 | tail -n 50

042e2c7148f5e1f1833bdc8d5335a709.png

删除数据库

delete from t where a=3;

此时可以看到删除记录和开始记录

[root@mysql115 ~]# mysqlbinlog /var/lib/mysql/mysql-bin-master.000005 | tail -n 50

2546f1898ff2ac681d7af65a7034d69d.png

恢复数据 注意此处的binlog日志是用04的 因为05这个时间是开始日志 按时间恢复 数据会是空的是不能恢复数据的

mysqlbinlog --no-defaults --stop-datetime="2019-08-30 16:25:46" /var/lib/mysql/mysql-bin-master.000004 | mysql -uroot -p123456

3ee90c7bc404cd0d76097825352c32f0.png

两次恢复对比

如果日志太多过滤删除记录

mysqlbinlog /var/lib/mysql/mysql-bin-master.000005 | grep Delete_rows -C4

删除库 操作过滤

mysqlbinlog /var/lib/mysql/mysql-bin-master.000004 | grep drop -C4

重要参考

https://www.cnblogs.com/kevingrace/p/5907254.html#4337479

https://www.cnblogs.com/kevingrace/p/5904800.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值