想要自救成功,binlog一定要用好。
mysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。
1.首先确认数据库是否已开启binlog。
show variables like 'log_%';
结果:
2.查看后发现未开启binlog,使用以下方法进行开启:
windowns 电脑则找到 my.ini
unix 系统找到 my.cnf文件
下面以windows为例,在[mysqld]进行如下配置:
#日志存储路径
log-bin=mysql-bin
#日志格式
binlog-format=mixed
binlog-format 有三种方式:
① STATEMENT模式(SBR):
每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
② ROW模式(RBR):
不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
③ MIXED模式(MBR):
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
3.重启数据库
方法①
service mysqld restart
方法②
在运行中先stop在start
方法③
重启服务
4.再次查看日志状态
删除id=1的数据。
使用
show master status;
命令,并查看最新的 binlog 日志文件。
接着使用以下命令,获取删除之前,关于ID=1的最后一条操作记录。
show binlog events in 'mysql-bin.000001';
最后使用以下命令进行回滚删除操作。
mysqlbinlog --no-defaults --start-position=639 --stop-position=928 D:\mysql-bin.000001 | mysql -uroot -p
删除数据表
与单条数据不一样的是,对于表的偏移量,起始偏移量是创建表之前的开始偏移量,结束偏移量是删除数据库之前的最后一个结束偏移量。
mysqlbinlog --no-defaults --start-position=120 --stop-position=2537 D:\mysql-bin.000001 | mysql -uroot -p
删除数据库
同样,查看偏移量,执行类似上面的命令进行还原操作。