binlog是什么?它是一个日志,一个归档日志,一个二进制日志,一个逻辑日志,一个server层日志。表示看完了没什么感觉,能动手的最好别bb。看看它能干什么。
建议先打开你的数据库客户端或者“黑窗口”什么的,连接并且登录数据库。
作用:恢复数据,避免删库跑路。
还是来先看看你的数据库有没有开启binlog功能。
SHOW VARIABLES LIKE '%log_bin%';
看到这里的ON了吗?恭喜你,你的数据库开启了binlog,为你的数据安全增加了一份保障。如果是OFF,那么参考官方文档或者自行搜索开启binlog配置(本人windows 5.7.12版本因不知名原因配置后无法启动服务就不写配置方法了)。
binlog有三种格式(哪三种方式自行搜索),方式:
SHOW VARIABLES LIKE '%binlog_format%';
如果你已经配置成功,那么找一个不怎么重要的库里的不怎么重要的表增删改数据看看如果用binlog恢复它们。
我执行了一个update:
看上面的截图log_bin_basename,进到这个目录下面查看可以看到一堆:
通过文本方式打开它,会发现一堆乱七八糟的东西,因为它是二进制日志。使用mysqlbinlog命令查看:
mysqlbinlog -v --start-datetime="2022-06-01 15:00:00" --stop-datetime="2022-06-01 15:30:00" ../data/binlog.000243 > ../data/temp.log
注意:本文所有操作皆在windows下进行的。mysqlbinlog在bin目录下,需要进入bin目录执行;日期用双引号,要找准日志文件的位置,temp.log是一个临时转存文件。
我这里看到一些这样的东西,看下@1、@2、@3分别对应了表里的字段,重点看下@1、@3(不要在意乱码,我数据库数据本身就这样)。实际上这一堆东西就是伪sql,一堆执行逻辑(逻辑日志)。将它们整理好,放到客户端执行就可以恢复修改的数据了。
mysqlbinlog语法:
mysqlbinlog [options] log-files
options:可选参数
log-files:文件名称
[options]常用值:
-d: 根据数据库的名称筛选日志
-o:跳过前N行日志
-r, --result-fil: 把日志输出到指定文件
–start-datetime: 读取指定时间之后的日志,时间格式:yyyy-MM-dd HH:mm:ss
–stop-datetime: 读取指定时间之前的日志,时间格式:yyyy-MM-dd HH:mm:ss
–start-position: 从指定位置开始读取日志
–stop-position: 读取到指定位置停止
–base64-output:在row格式下,显示伪sql语句
-v, --verbose:显示伪sql语句,-vv可以为sql语句添加备注
–set-charset:设置输出文件编码
主从架构需要用到
(没有实际操作过,暂时就不写了)。