1. 查询log-bin是否开启,如果没有开启log-bin则需要开启,否则无法恢复数据。
show variables like 'log_bin';
2. 如何开启log-bin?
2.1 windows
第一步:client查看mysql的安装路径(show variables like "%char%"),在安装路径下找到 my.ini文件,加上log-bin=mysql-log-bin,binlog_format=ROW。
第二步:设置数据库默认编码为utf8
第四步:重启mysql,再次查询log-bin是否开启
(ubuntu重启mysql:sudo service mysql restart)
2.2 ubuntu
找到mysql配置文件 mysqld.cnfubuntu开启log_bin
3. 模拟误操作数据
模拟误操作:delete from 表名(drop操作无法恢复)
4. 锁表
为了避免数据再次被污染,锁表
锁表
lock tables 表名 read ;
解锁
UNLOCK TABLE
5. 查询日志文件位置
show binary logs #查看所有的二进制日志文件
show master status #查看当前的日志文件
show binlog events in '当前日志文件名称' #查看日志文件内容
如何找到日志文件的具体位置呢?如果你在“如何开启log-bin?”这一步配置了绝对路径,
那就去看看你的配置写的是哪儿;要是配置的是相对路径,在client执行 show variables like 'datadir'。
6. 导出bin-log日志文件 具体内容
二进制日志用记事本、编辑器、vi或vim等等打开都是乱码的,必须用mysqlbinlog才能正确打开。管理员打开cmd
进入到mysql 的bin目录(client查看mysql安装路径:show variables like "%char%"))
输入 mysqlbinlog -v "C:\ProgramData\MySQL\MySQL Server 5.7\Data\mysql-log-bin.000002" --start-position=4625 --stop-position=5145 >D:\mysql-log-bin.sql在D盘查看生成的日志
7. 恢复
7.1 第一种方式:使用位置恢复(cmd窗口,我觉得不太好使)
管理员身份打开cmd,进入mysql的bin目录下;
mysqlbinlog --start-position="4289" --stop-position="8837" D:\mysql-log-bin.000002 | mysql -u root -p test
7.2 第二种方式:使用文件导出的文件恢复(client)(我觉得这个挺好使)导出的文件内容
导出的日志文件内容记录了执行的具体sql,将sql恢复为insert/update进行恢复。
8. 其他命令
关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。
flush logs;