当前位置:   article > 正文

MySQL 修改事务隔离级别、开启慢日志查询、开启binlog日志,使用日志恢复数据

MySQL 修改事务隔离级别、开启慢日志查询、开启binlog日志,使用日志恢复数据

MySQL版本:8.0.23(默认情况下,slow.log\binlog都被开启了)

一、修改事务隔离级别

查看MySQL事务隔离级别,默认可重复读,对于数据互联网项目推荐修改成读已提交

SELECT @@transaction_isolation;

设置读已提交

SET global transaction isolation LEVEL read committed

但是,重启之后就不生效了。需要再次设置。

 

二、开启慢日志

先查询日志是否开启,NO表示已开启

show variables like 'slow_query%';

 

这些路径都是默认跟着安装的mysql路径下的,slow结尾的就是慢日志的文件

慢日志默认时间10s

show variables like '%long%';

通过命令去设置long_query_time是不行的,找到my.ini

为了测试出效果,写入了三百万左右的数据,long_query_time设置为1s,慢日志已经记录了

两条执行的sql,执行时间、锁时间、查询结果条数、总扫描的条数、执行的sql

在实际开发中是定位sql查询慢的最方便快捷的一种。

 

三、binlog日志

show VARIABLES LIKE '%log_bin%'

没开之前

在my.ini文件中添加,重启mysql

开之后

设置好binlog日志后,重启mysql服务,你的log_bin_index的同级目录下就会出现这样的文件

或者使用命令查看所有binlog日志,这里建议:如果发生了误操作,先执行flush logs,这样错误的日志就保留在这一个log文件中了,方便查找。

SHOW MASTER LOGS

查看log日志内容

SHOW BINLOG EVENTS in 'DESKTOP-5U974TL-bin.000009';

每种操作的类型这里都可以很明确,binlog对于查询而言没有太多性能的影响,只是对于增修删是有影响的。

顺道补充一点,binlog的格式查看命令,5.x后都是ROW了,因为Statement存在主从赋值大bug,Statement记录的事务提交的顺序,事务A开启事务,正在操作,此时事务B也进来了,并且比事务A先提交,此时的数据就对不上了。

show variables like '%binlog_format%';

第二种方式:使用命令查找Pos的索引值,每个at都是一次操作,一直回车即可

 mysqlbinlog --no-defaults .\DESKTOP-5U974TL-bin.000009 |more

查看binlog中的sql语句

mysqlbinlog --base64-output=decode-rows -v DESKTOP-5U974TL-bin.000013;

 

 

恢复操作:找到删除操作的

找到删除之前的执行号,执行命令恢复即可

mysqlbinlog "C:\ProgramData\MySQL\MySQL Server 8.0\Data\DESKTOP-5U974TL-bin.000034" --start-position 156 --stop-position 555 | mysql -uroot -p

不要使用PowerShell导出文件,会有编码问题!!!!!!!!!

切记,数据库备份一定需要的,binlog日志只是做部分数据的恢复,不可太依赖这种方式。

 

番外:myflush

美团旗下的一款产品,但与mysql兼容有强制限制的条件

  1. binlog格式必须为row,且binlog_row_image=full

  2. 仅支持5.6与5.7

  3. 只能回滚DML(增、删、改)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/621106
推荐阅读
相关标签
  

闽ICP备14008679号