文章目的
对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工具来恢复数据。
网友评论