美文网首页
关于mysql的binlog

关于mysql的binlog

作者: 温岭夹糕 | 来源:发表于2020-04-01 14:56 被阅读0次

一、一条查询语句是如何执行的?

连接器判断有无mysql服务端执行权限,

分析器会分析这条查询语句有无语法错误和告诉mysql想干什么

优化器选择使用哪个索引,即告诉mysql该怎么做最好

执行器负责执行并返回结果

数据库引擎用于存储数据和读写

二、一条更新语句是如何执行的?

更新语句相比查询,在取出要更新的数据段并更新后会进行日志的写入

使用InnoDB引擎的数据库除了记录binlog日志外还会记录redolog日志

并且是先记录redolog再记录binlog,分两阶段提交。

innodb的每次写操作都是一次事务

两阶段体现在:

1.引擎在更新数据后,将这个更新操作记录到redolog里面,redolog进入prepare状态并告知执行器可以随时提交事务

2.执行器生成这个操作的binlog并写入磁盘,之后把刚刚写入的redolog状态更改为提交commit;

Redo log是物理记录这个页 “做了什么改动”。

binlog是逻辑日志,记录了mysql语句,并且是固定大小循环写的

三、如何备份mysql

1.利用binlog日志

先修改my.cnf

注意这里的log_bin为binlog日志的存放位置,我们需要将这个文件夹的权限设为mysql运行用户的权限,且我这里将binlog日志命名为binlog(可换成别的)。

再重启mysql服务

我们可以看到此时log_bin已经处于开启状态

因为binlog日志会有很多个

我们需要知道当前是在使用哪个binlog日志来记录

因为binlog文件是二进制的直接cat无法查看我们需要用mysqlbin工具

看着还是乱再输入命令

这下简洁多了

mysqlbinlog --no-defaults --base64-output='decode-rows' -v binlog日志文件

1.# at 5538

文件的偏移位置

2.#200401 13:38:17

时间20年4月1号

3.SET TIMESTAMP=1585719497/*!*/;

BEGIN

具体的执行语句

一行的记录产生的日志以SET TIMESTAMP=1585719497/*!*/开始,以COMMIT/*!*/;结束

模拟业务场景动手试试

mysql利用mysqlbinlog命令恢复误删除数据_数据库_chaigang的博客-CSDN博客

mysql中binlog日志及备份恢复 - 南极山 - 博客园

实际在恢复数据前需要进行一次加锁和全库备份

相关文章

网友评论

      本文标题:关于mysql的binlog

      本文链接:https://www.haomeiwen.com/subject/ldoouhtx.html