show variables like 'log_%'; #查看binlog是否打开
首先binlog一定是要先打开的 第一行我们可以看到是ON代表binlog已经打开了,如果你的是OFF那证明并没有打开binlog,在my.ini文件中添加以下配置然后重启mysql就可以看到binlog打开了
log-bin=mysql-bin
server-id=1
use demo 然后查看数据库 我现在有一个students表
查看是有两个记录,现在我们先来mysqldump备份一下现在的数据,然后就生成了demo.sql
mysqldump -h127.0.0.1 -P3306 -uroot -p demo>d:\demo.sql
# 注意:不能在mysql中执行命令 在命令行执行才对 -h代表host -P表示端口 -u表示用户名 -p表示密码,
# 我这个方法是直接备份整个数据库,还有备份单个表,多个表的操作,感兴趣的兄弟可以自己百度了解了解
修改一条数据和插入一条数据,这下数据变成这个样子
删除表然后查询,数据表确实没有了
现在我们先根据mysqldump备份的数据还原一下
然后查询students表,发现只有两条数据,而且还没有进行修改和添加
修改和添加操作都会记录在binlog中所以我们根据binlog进行恢复
show master status; # 查看目前在使用的binlog
show binlog events in 'mysql-bin.000001'; # 查看mysql-binlog.000001
# 我们发现787-908是删除了demo表 所以之前的操作就是我们的修改和插入也就是4-787行
# 我们在mysql的binlog存储路径下的命令行将这几行导出sql文件
mysqlbinlog --start-position=4 --stop-position=787 mysql-bin.000001 -r d:\operation.sql
然后source导入binlog生成的operation.sql文件并查询,发现可以了然后可以用flush logs;使用新的binlog来记录方便下一次恢复