binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记录binlog日志。

逻辑日志:可以简单理解为记录的就是sql语句。

物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更。

binlog是通过追加的方式进行写入的,可以通过max_binlog_size参数设置每个binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

binlog使用场景

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

主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。

数据恢复:通过使用mysqlbinlog工具来恢复数据。

binlog刷盘时机

对于InnoDB存储引擎而言,只有在事务提交时才会记录biglog,此时记录还在内存中,那么biglog是什么时候刷到磁盘中的呢?mysql通过sync_binlog参数控制biglog的刷盘时机,取值范围是0-N:

0:不去强制要求,由系统自行判断何时写入磁盘;

1:每次commit的时候都要将binlog写入磁盘;

N:每N个事务,才会将binlog写入磁盘。

从上面可以看出,sync_binlog最安全的是设置是1,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

binlog日志格式

binlog日志有三种格式,分别为STATMENT、ROW和MIXED。

在 MySQL 5.7.7之前,默认的格式是STATEMENT,MySQL 5.7.7之后,默认值是ROW。日志格式通过binlog-format指定。

STATMENT

基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。

优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO, 从而提高了性能;

缺点:在某些情况下会导致主从数据不一致,比如执行sysdate()、slepp()等。

ROW

基于行的复制(row-based replication, RBR),不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了。

优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题;

缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨

MIXED

基于STATMENT和ROW两种模式的混合复制(mixed-based replication, MBR),一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog

mysql三大日志_了解的mysql三大日志-----binlog相关推荐

  1. 解读mysql日志_全方位解读 MySQL 日志实现内幕(四)

    作者介绍 王竹峰,去哪儿网数据库专家,擅长数据库开发.数据库管理及维护,一直致力于 MySQL 数据库源码的研究与探索,对数据库原理及实现具有深刻的理解.曾就职于达梦数据库,多年从事数据库内核开发的工 ...

  2. mysql导出二进制日志_使用mysqlbinlog提取二进制日志

    MySQL binlog日志记录了MySQL数据库从启用日志以来所有对当前数据库的变更.binlog日志属于二进制文件,我们可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要 ...

  3. 操作 mysql 不生成日志_详解MySQL的日志

    MySQL日志 MySQL的日志记录了MySQL的日常操作和错误信息,通过这些日志我们可以知道MySQL内部发生的事情,可以为MySQL的优化和管理提供必要的信息. MySQL的日志主要有:二进制日志 ...

  4. 删除部分mysql日志_正确删除MYSQl日志方法

    1.查找当 mysql> show binary logs; +------+---–+ | Log_name | File_size | +------+---–+ | mysql-bin.0 ...

  5. 怎么在mysql查看运行日志_如何查看mysql运行、访问记录等日志

    如何查看mysql运行.访问记录等日志 1.首先确认你日志是否启用了 mysql>show variables like 'log_bin'; mysql>show variables l ...

  6. mysql下日志_浅谈mysql下日志记录

    1,如何查看mysql执行命令历史 #.mysql_history     此文件记录了在mysql中执行命令的历史 2,事务日志: transaction log:事务型存储引擎自行的管理和使用. ...

  7. mysql重做日志_详解MySQL 重做日志(redo log)与回滚日志(undo logo)

    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...

  8. mysql 硬负载_为啥单机MySQL又遭遇瓶颈?MySQL主从复制替你解决单机问题

    成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...

  9. mysql fnv算法_《高性能MySQL》读书笔记之创建高性能的索引

    索引是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化的最有效手段.索引能够轻易将查询性能提高几个数量级.创建一个最优的索引经常需要重写查询. 5.1索引基础 在MySQL中,存储引擎 ...

  10. 监控mysql数据库 更新_实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

最新文章

  1. windows 连Linux,Windows下访问Linux资源
  2. 修改Eclipse/MyEclipse项目的默认编码
  3. SDNE: 阿里应用深度学习进行图嵌入,构造凑单算法模型
  4. 跨语言、多语言信息检索
  5. Docker 方式安装 Nexus 私服
  6. 孙正义:一个有远见的赌徒
  7. 利用Xposed+JustTrustMe绕过Android App(途牛apk)的SSL Pinning
  8. 如何从零开始搭建公司自动化测试框架?
  9. 安卓刷java_安卓逆向刷题(攻防世界)
  10. Python-pptx Table
  11. 翻译来自HiDDeN网络架构-Lifeifei
  12. I.MX6U嵌入式Linux应用编程学习
  13. 出现 Cannot read property 'xxxxxx' of null 问题思路
  14. python获取股票数据,并计算技术指标
  15. 中国劳动关系学院计算机专业分数,中国劳动关系学院是几本?录取分数线是多少?...
  16. CSS基础知识---三种选择器
  17. 常用电平标准(TTL、RS232、RS485、RS422)
  18. 【云计算与虚拟化】第三章 实验二 在ESXi主机中安装操作系统
  19. delete请求数据详解
  20. unityhub下载地址

热门文章

  1. 产品vr全景摄影拍摄公司提升客户的体验感与满意度
  2. CentOS7,Ubuntu系统中NCL的gedit编译器安装方法,亲测有效
  3. 程序猿表白情诗代码,赶紧收藏一下
  4. CoverageMaster winAMS
  5. hadoop进入退出安全模式
  6. 韩国个人数据保护类法律法规简述
  7. php 数组 时间戳排序,php – 按时间戳排序Summed Collection
  8. Golang的viper库
  9. 语音信号处理疑惑与解答
  10. mysql 廖雪峰_关系模型 - 索引 - 《廖雪峰 SQL教程(MySQL)》 - IT Book