妙博客

主机评测 香港服务器 洛杉矶VPS测评

mysql数据紧急还原(binlog)

mysql如过不小心删除某行数据,或者修改了某行数据,可以通过binlog日志快速恢复


从navicat工具中打开数据库(test),查看有多少张表

SELECT
    A.TABLE_SCHEMA '数据库',
    A.TABLE_NAME '表名',
    A.TABLE_ROWS '表记录行数',
    A.CREATE_TIME '创表时间',
    A.TABLE_COMMENT '表备注'
FROM INFORMATION_SCHEMA.TABLES A
WHERE
    A.TABLE_SCHEMA = 'test'


可以看到test数据库下面有3张表

image.png

此时我们手动删除表stu2,执行 drop table stu2。

开始紧急恢复!!!


恢复前置条件

如果想要恢复mysql数据,请务必开启binlog日志,否则无法恢复!神仙来了也救不了

1.查看是否开启binlog

show variables like '%log_bin%';

此项务必是ON(开启)

image.png

2.如果未开启,那么本次就无法回复了。赶紧开启吧,下次就可以恢复了。

在linux上执行:vi /etc/my.cnf

在/etc/my.cnf中的[mysqld]下面直接增加内容

server_id=1
log_bin=mysql-bin
binlog_format=mixed

退出并保存

image.png


如果你的mysql默认开启了binlog,那就开始恢复吧!


第一步:锁表并且停掉应用

  1. 从navicat工具中打开数据库(test),把所有表给锁住,不让写入!


SELECT
    A.TABLE_SCHEMA '数据库',
    A.TABLE_NAME '表名',
    A.TABLE_ROWS '表记录行数',
    A.CREATE_TIME '创表时间',
    A.TABLE_COMMENT '表备注'
FROM INFORMATION_SCHEMA.TABLES A
WHERE
    A.TABLE_SCHEMA = 'test'

可以看到test数据库下面有2张表

image.png

2.接着执行如下语句(test为数据库,stu为表名):

lock tables test.stu read;
lock tables test.stu3 read;


此时该库的所有表已经被锁住了(只读),不能写入或者修改。

第二步:搜索mysql日志文件(二进制)

1.查找binlog日志文件:

show master logs

由此可以看到,mysql-bin.000099就是最新的日志文件

image.png


2.登录你的mysql所在服务器,找到mysql的二进制分析工具(mysqlbinlog),我用的是centos

image.png

然后调用该二进制分析(start-datetime是其实日期,stop-datetime为结束日期,最后一个是你的mysql二进制文件,一般就在mysql目录下):

./mysqlbinlog --start-datetime="2021-02-18 15:30:00" --stop-datetime="2021-02-18 15:57:00" ../../data/mysql-bin.000099

接着会打印一大堆东西,不用管,只要找到删除语句所在的位置(pos)

image.png

可以看到,我们手贱删除表的记录,是在41037793这个位置。为了直观一点,我们直接在navicat上查一下

show binlog events in 'mysql-bin.000099' from 41037793

image.png

确认无疑,开始恢复,只要恢复到41037793这个位置就行!


第三步:开始恢复指定的库

1.恢复前可以先备份下库,以防操作失误导致影响其他库(如果有信心,也可以省略)

./mysqldump -u root -p数据库密码 -h 127.0.0.1 --all-databases  > ./all.sql


2.开始真正恢复test数据库!(--stop-position表示恢复到这个记录点)

先解锁表:

use test;
UNLOCK TABLES

然后执行恢复操作:


./mysqlbinlog -d test --stop-position='41037793' ../../data/mysql-bin.000099 | mysql -uroot -p数据库密码

等待一段时间之后,你会发现,删除的表stu2又回来了!!!

image.png

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2