简介
二进制日志是MySQL服务器用来记录数据修改事件的,比如INSERT、UPDATE、DELETE等会导致数据发生变化的语句,SELECT语句不会被记录在内。MySQL必须先执行完一条语句才能知道它是否修改了数据,因此写入二进制日志文件的时间是语句执行完成的时间。写入顺序是按语句执行完成的先后顺序,事务中的语句会先被缓存起来,成功提交后才会被写入,回滚则不会被写入。非事务的存储引擎,所有的修改会立刻写入到二进制日志中。
二进制日志顾名思义不是文本而是一种更有效率的二进制格式,它比文本占用更少的空间,但是可读性就很差了,必须使用mysqlbinlog工具才能转换为可读的文本。二进制日志主要用于数据库备份和故障时恢复数据,配置MySQL主从复制必须启用二进制日志。
二进制日志索引文件中会列出所有二进制日志文件,此文件是文本的因此可以直接查看,文件的最后一行就是当前正在使用的二进制日志文件。
 
启用和关闭
show variables like 'log_bin' 可以查看当前数据库是否已经启用了二进制日志,ON表示启用,OFF表示未启用。show variables like 'log_bin_basename' 返回二进制日志基本文件名,show variables like 'log_bin_index' 返回二进制日志索引文件名。
在MySQL配置文件中,[mysqld]下配置 log_bin 即可开启二进制日志,此时默认使用HOSTNAME-bin作为二进制日志的基本文件名,基本文件名加上一组顺序编号000001、000002...就是二进制日志文件名了,例如localhost-bin.000001。每次启动服务器、执行刷新日志命令(flush logs)以及二进制日志文件到达最大长度的时候,服务器会按顺序号生成下一个二进制日志文件,参数max_binlog_size决定了二进制日志最大长度。log_bin=xx指定了二进制日志基本文件名为xx。默认二进制日志索引文件名是二进制日志基本文件名加上.index,参数 log_bin_index可以指定二进制日志索引文件名,如果指定值没有扩展名,默认会加.index。
关闭二进制日志只要删除相应配置即可。flush logs会关闭当前二进制日志文件并重新创建一个。
 
格式
二进制日志的格式有STATEMENT、ROW、MIXED,参数binlog_format 决定了使用何种格式。
STATEMENT表示基于语句的格式,就是记录执行的语句,优点是减少了日志量,但是还必须记录执行语句时相关上下文信息,这很容易导致主从复制时语句执行出错。
ROW表示基于行的格式,优点是不用再记录执行语句时的上下文,缺点是增加了记录量,每一条被修改过的行都要被记录,本来只要记录执行时的update语句,现在要记录所有被修改的行的update语句。
MIXED是以上两种混合使用,由MySQL决定何时使用哪一种。
 
查看
使用mysqlbinlog工具,这个工具一般在MySQL安装目录的bin目录下。执行如下语句
mysqlbinlog -vv --base64-output=decode-rows localhost-bin.000001,也可以重定向到外部文件中 mysqlbinlog -vv --base64-output=decode-rows localhost-bin.000001 >000001.txt。

MySQL 5.7二进制日志的更多相关文章

  1. MySQL和Mariadb二进制日志binlog详解

    Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log).普通日志(general log).慢日志(slow log)以及二进制日志(binlog).错误日志记录了系统启 ...

  2. MySQL复制(二):二进制日志、二进制日志的结构和内容

    通常只有即将执行完毕的语句才会写入到二进制日志中.但是一些特殊情况:语句附加的信息或直接代替语句被写入. 二进制日志记录的内容 作用:记录数据库中表的更变,用于复制和PITP(即时恢复) 基于语句SB ...

  3. mysql运维-二进制日志BINARY LOG清理

       1.1 方法1:PURGE MASTER LOGS     语法: PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetim ...

  4. MySQL系列(五)--二进制日志对主从复制的影响

    MySQL复制是基于主库上的二进制日志来完成,复制是异步的,可能存在延迟 MySQL日志分为: 1.服务层日志:二进制日志.通用日志.慢查日志 2.存储引擎层日志:innodb中重做日志和回滚日志 二 ...

  5. MySQL二进制日志总结

    二进制日志简单介绍 MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句.二进制日志(binary log)中记录了对MySQL数据 ...

  6. MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  7. MySQL中基于mysqldump和二进制日志log-bin进行逻辑备份以及基于时间点的还原

    本文出处:http://www.cnblogs.com/wy123/p/6956464.html 本文仅模拟使用mysqldump和log-bin二进制日志进行简单测试,仅作为个人学习笔记,可能离实际 ...

  8. mysql二进制日志详解

    一.什么是二进制日志 二进制日志主要记录mysql数据库的变化,二进制日志包含所有更新了数据或者潜在更新了数据(如没有匹配到任何行的delete语句),语句以时间的形式保存,描述了数据的更改.二进制日 ...

  9. MySQL二进制日志功能介绍

    二进制日志记录所有更新数据的SQL语句,其中也包含可能更新数据的SQL语句,例如DELETE语句执行过程中无匹配的行.二进制日志中还包含了与执行SQL语句相关的内容,例如SQL语句执行的时间.错误代码 ...

随机推荐

  1. swagger的导出

    swagger-export是一个提供swagger文档导出功能的服务,不依赖于具体的API接口服务实现,你可以很方便地导出html和pdf两种格式的静态文档.源码来自swagger导出静态API文档 ...

  2. 3点带你快速学会Selenium工具的使用

    (一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好 ...

  3. composer安装依赖包时,php内存分配不足

    Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in pha ...

  4. SpringBoot事务使用和回滚

    Springboot中事务的使用: 1.启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的). 2.在使用事务的public(只有public支持事 ...

  5. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  6. 【Maven】Mac操作系统下安装配置maven环境变量

    1.下载maven 下载地址:http://maven.apache.org/download.cgi 2.解压设置maven本地地址解压后 我放在 /Users/david/developer/ap ...

  7. Mybatis入门篇之基础CRUD

    前言 作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个封装性极强的持久性框架.自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻 ...

  8. ract-native常用命令

    1.新建项目:react-native init AwesomeProject 2.运动项目 cd AwesomeProject react-native run-ios 3.添加第三方插件: yar ...

  9. 推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错.这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学 ...

  10. Leetcode 974 和可被K整除的子数组

    题目: 解法 //前缀和算法+hash表 class Solution { public: int subarraysDivByK(vector<int>& A, int K) { ...