由于本人手欠,上周五无意之间删除了一个表,然后无奈只好搜索如何恢复(幸好数据不多)
目录
mysql删除表数据恢复
实验模拟
恢复实战
在mysql里进行恢复
顺便在此记录一下,以防后续,分享解决同类问题
先在此处引入搜索到的一篇文章
该实验必须是mysql开启了binlog的情况。
binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据。我们可以通过binlog日志恢复数据
查看mysql是否开启binlog语句
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.01 sec)
如果是OFF,则说明没有开启binlog。可以使用如下方法开启binlog
编辑/etc/my.cnf文件,在文件后面增加如下两行代码即可
server-id=1
log-bin=/var/lib/mysql/mysql-bin
server-id表示单个结点的id,这里由于只有一个结点,所以可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同
第二句是指定binlog日志文件的名字为mysql-bin,以及其存储路径
重启让配置生效。
[root@localhost ~]# systemctl stop mysqld.service
[root@localhost ~]# systemctl start mysqld.service
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
由于在/etc/my.cnf配置了binlog,这个日志会存储插入,删除,修改的日志信息
(当然,windows的路径和这个不太对哦,只要你能开起来就行了)
运行mysql,执行下面的命令
show binlog events in '你想查看的那个记录';
当然,像下图这样,在navicat工具里执行也是可以的
然后你就看到了最早的记录
windows查看所有日志记录,你是可以通过查找Date里找到的,如下图的都是了
在这里,我要查看000031的那个记录
mysql> show binlog events in 'DESKTOP-NBJ63T6-bin.000031';
然后就得到了...
然后找到你对应的开始和结束点就可以了(这里要进入mysql安装目录中的bin文件下去执行)
然后,发现我tm找不到...淦,看提示得到(windows下前面要加.\)
完整命令如下:
.\mysqlbinlog --start-position=25055 --stop-position=49536 "C:\ProgramData\MySQL\MySQL Server 8.0\Data\DESKTOP-NBJ63T6-bin.000031" > D:\\beifen.sql;
命令说明:
.\mysqlbinlog --start-position=开始日志点 --stop-position=结束日志点 "日志文件完整路径地址" > 导出日志的路径地址;
常用参数选项解释:
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
--------------------------------------------------------
不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server 从某个MySQL服务器上读取binlog日志
a)查询第一个(最早)的binlog日志:
mysql> show binlog events\G;
b)指定查询 mysql-bin.000002这个文件:
mysql> show binlog events in 'mysql-bin.000002'\G;
c)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起:
mysql> show binlog events in 'mysql-bin.000002' from 624\G;
d)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,查询10条(即10条语句)
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 10\G;
e)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,偏移2行(即中间跳过2个),查询10条
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;
source D:\beifen.sql;
#将我们刚刚创建的临时脚本在此处进行恢复(记得加路径)