美文网首页
关于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