美文网首页
mysql binlog

mysql binlog

作者: wuqingfeng | 来源:发表于2022-08-07 13:12 被阅读0次

文章目的

对mysql binlog概念、作用、相关变量、日志格式、管理命令等内容进行描述

概念

二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制形式保存在磁盘。

作用

主要作用:复制、恢复和审计。

相关变量

  • log_bin
    标识log_bin是否开启。使用如下命令可以查看该值:
show variables like '%log_bin%';
  • binlog_format
    Binlog日志的格式。使用如下命令可以查看该值:
show variables like 'binlog_format';

日志格式

binlog日志格式如下:row、statement、mixed
对它们具体的描述如下:

1. row

仅保存记录被修改细节,不记录SQL语句上下文相关信息。

  • 优点
    清晰的记录了每一行数据被修改的细节,避免了某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题。
  • 缺点
    所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。

2. statement

每一条会修改数据的 SQL 都会记录在Binlog中。

  • 优点
    无需记录每行变化,减少了binlog日志量,节约了IO,提高性能。
  • 缺点
    由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).

3. mixed

以上两种level的混合使用。
一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog

日志格式选择

管理命令

常见管理命令如下:

#查看所有Binlog的日志列表
show master logs

#查看binlog日志状态。查看最后一个Binlog日志的编号名称,及最后一个事件结束的位置
show master status

#binlog事件查看语句格式
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] 
##查看binlog事件
show binlog events;

#查看指定binlog文件中日志
show binlog events in 'mysql-bin.000001';

#从指定的位置开始,查看指定的Binlog日志,限制查询的条数
show binlog events in 'mysql-bin.000001' from 666 limit 2;

#从指定的位置开始,带有偏移,查看指定的Binlog日志,限制查询的条数
show binlog events in 'mysql-bin.000001' from 666 limit 1, 2; 

应用场景

在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复。

  • 主从复制
    在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。
  • 数据恢复
    通过使用mysqlbinlog工具来恢复数据。

相关文章

网友评论

      本文标题:mysql binlog

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