Mysql Binlog日志文件介绍
一、Binlog简介
官方文档参考 https://dev.mysql.com/doc/refman/5.5/en/binary-log.html
Binlog(Binary Log) 指数据库的表创建或者表数据变更的时候产生的事件event以二进制的形式存储在磁盘中,它记录了Mysql所有的DDL和DML语句(查询SELECT和SHOW除外)。除非是记录行(ROW模式)的日志记录,否则的话还包含"有可能进行变更"的语句,如:
DELETE FROM #table WHERE 0=1; (注:无效SQL)
mysqld会根据文件名、自增数据创建一系列有序的Binlog文件名,每次重启服务器、刷新日志、Binlog文件大小达到阀值时会创建一个新的有序Binlog文件。有可能Binlog文件会比max_binlog_size大,因为零界点一次使用大型事务时不会拆分成2个binlog文件。
tips: 开启Binlog服务器性能会略微降低,但是相比而言数据安全和可恢复更加重要,且Binlog是Mysql主从同步主要的方式。
二、Binlog使用场景
- 主从复制,主服务器将二进制文件发送给其他从服务器,从服务器执行这些事件进行相同的数据变更
- 某些数据恢复的场景会用到Binlog,恢复备份后执行备份后的执行Binlog,使备份数据库保持最新
- 从mysql到nosql等的数据同步(订阅Binlog并分析、执行数据)
- 实时数据分析等,大数据、搜索等
- 业务数据缓存更新
- 重要数据变化的业务通知
三、Binlog支持的数据模式
官方文档参考 https://dev.mysql.com/doc/refman/5.5/en/binary-log-formats.html
- STATEMENT 基于SQL语句的同步
- ROW 基于行数据的日志记录,指的是单表行收到的影响事件写入到Binlog中
- MIXED(ROW和STATEMENT的混合方式,默认情况下使用STATEMENT的日志记录,但在某些情况下,日志记录模式会自动切换为基于ROW)
在MySQL 5.5中,默认的二进制日志记录格式是 STATEMENT。
在MySQL 5.7中,默认的二进制日志记录格式是 ROW。
三种方式的优缺点
STATEMENT:优点数据量比较小(特别是批量SQL更新情况下),缺点是同样的WHERE条件某些场景下主从执行的结果可能是不一致的。
ROW:记录的是一行所有的数据变更优点数据一致性略好,缺点数据量会比较大,特别是批量更新的时候 UPDATE #table WHERE 1=1
MIXED:结合和STATEMENT 和 ROW的优点
比较推荐的是ROW方式,虽然数据量会稍微大一些但同时也保持了数据的一致性,且对存储过程,事务,触发器等的支持较好(只需要关注数据层面),MIXED个人感觉存在一定的不确定性因素。
注:MySQL 5.7 ROW多了一个参数binlog_row_image[full|minimal] ,minimal模式下行所有数据变更成了具体更新的某几列数据。这样数据量就ROW模式下的数据量可以减少很多,难怪5.7的版本会把ROW设为默认值。参考文章 https://www.cnblogs.com/gomysql/p/6155160.html
四、Binlog数据格式更改
设置系统变量的全局值 以指定更改后连接的客户端的格式
mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';
单个客户端可以通过设置会话值来控制自己的语句的日志格式
mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';
五、MySQL Binlog数据同步原理
前面提到了mysql的主库(master)对表的变更(除查之外)都会记录到Binlog文件中,从库( slave ) 的IO Thread异步地同步Binlog文件并写入到本地的Replay文件,SQL Thread( slave ) 再抽取Replay文件中的SQL语句在从库进行执行,实现数据更新达到主从同步的目的。
Binlog是Mysql主要的主从同步方式,是一种基于stream的异步复制(并不能做到实时同步,有一定延迟)
推荐使用Row这种格式,可以很方便的反应行级别的数据变化。以下截图来自网上

Mysql Binlog日志文件介绍的更多相关文章
- MySQL 各类日志文件介绍
日志文件 1.错误日志 ErrorLog 错误日志记录了MyQLServer运行过程中所有较为严重的警告和错误信息,以及MySQLServer每次启动和关闭的详细信息. 在默认情况下,系统记录错误日志 ...
- Mysql bin-log日志文件处理
当MySQL开启bin-log选项后,会不停的记录bin-log,但是几天前的日志肯定就没用了或者可以备份到别处,那么如何正确的处理这些日志呢 参考一下几篇文章 MySQL mysql-bin log ...
- Mysql binlog日志的介绍
mysql的复制功能是 大规模,高性能应用的基础. 分担读负载.水平扩展 是通过二进制日志进行复制,是异步的. 只记录成功执行的修改事件,出现错误的和回滚的是不会纪录的. 日志路径 查看日志 RO ...
- MySQL各类日志文件相关变量介绍
文章转自:http://www.ywnds.com/?p=3721 MySQL各类日志文件相关变量介绍 查询所有日志的变量 1 mysql> show global variables li ...
- mysql将bin-log日志文件转为sql文件
查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like '%log_bin%'; mysql打开bi ...
- Mysql Binlog日志详解
一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...
- MySQL - binlog日志简介及设置
基本概念 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句, ...
- MySQL的日志文件
本文将重点介绍MySQL的日志文件类型,并讲解其作用,并结合一定实操演示,相信跟着做下来你会对MySQL有更深的理解. 文件的概念 在开始讲MySQL日志文件之前,首先我们要明确一下文件的概念.MyS ...
- 阿里云mysql数据库恢复总结,mysql binlog日志解析
由于意外..阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决. 首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录 这导致了一个问 ...
随机推荐
- shell脚本,100以内的质数有哪些?
[root@localhost wyb]# cat 9zhishu.sh #!/bin/bash ` do ;j<=i-;j++)) do [ $((i%j)) -eq ] && ...
- HashMap允许将null用作键 也允许将null作为值
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null. 与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设 ...
- HDU-2018-奶牛的故事
这题找到递推式就好写了,递推式大致是: f=n (n<=4) f=f(n-1)+f(n-3) (n>4) 其实这题的题意,我觉得是有很大的问题的,它前后说的每年年初的意思都不一样,敬请参考 ...
- (5)zabbix配置详解
zabbix配置介绍 zabbix配置内容比较多,我们要分为9大块来讲解.分别如下:1.主机与组不用多数,顾名思义,他是添加主机配置与组配置. 2.监控项需要监控的项目,例如服务器负载可以使一个监控项 ...
- Linux 永久修改主机名hostname
前言: 由于最近用3台机器,经常切换导致有容易区别的需求. 故想修改主机名. 实验环境:Ubuntu 17 教程: 1. 使用hostname 命令先临时修改 sudo hostname your_n ...
- MariaDB数据库(三)
1. 基本查询 查询基本使用包括:条件.排序.聚合函数.分组和分页. 实例详解查询 1> 创建students表用作实验 MariaDB [testdb]> drop table stud ...
- CSS3中制作倒影box-reflect
目前仅在Chrome.Safari和Opera浏览器下支持 box-reflect:none | <direction> <offset>? <mask-box-imag ...
- 强制停止及删除(卸载)Windows服务
1. 安装服务: CMD 打开命令行窗口:C:\> 运行:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe& ...
- tomcat 修改默认端口8080 为 80端口
首先,找到你的安装目录,如图: 打开server.xml文件,找到8080,如图: 将 8080 改成你想要的端口,如 80 即可.改完后,记得要重启tomcat! 将端口改成 80 后,访问就不需 ...
- 解决img标签上下出现间隙的方法
图片与父元素下边缘有 2px 的间隙,并不是因为空格.多个 inline-block 元素之间的间隙才是因为空格. 任何不是块级元素的可见元素都是内联元素,其表现的特性是“行布局”形式.----< ...