一.简介

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。一般来说开启binlog日志大概会有1%的性能损耗。

DDL

主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

DML

主要的命令是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

使用场景:

1)MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

2)数据恢复了,通过使用mysqlbinlog工具来使恢复数据。

binlog日志包括两类文件:

1)二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件

2)二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。

二.开启binlog及相关参数

开启

vim /etc/my.cnf

[mysqld]
#开启,并且可以将mysql-bin改为其它的日志名
log-bin=mysql-bin #添加id号,如果做主从,就不能一样
server-id=1 #超过200M将生产新的文件,最大和默认值是1GB
max_binlog_size=1G #此参数配置binlog的日志格式,默认为mixed。
binlog_format=mixed #此参数表示binlog使用最大内存的数。
max_binlog_cache_size=1M #此参数表示只记录指定数据库的二进制日志。
binlog-do-db=数据库A #此参数表示不记录指定的数据库的二进制日志。
binlog-ignore-db=数据库A #此参数表示binlog日志保留的时间,默认单位是天。
expire_logs_days=7

重启服务

相关操作

查看所有binlog日志列表

show master logs;

查看binlog日志是否开启

show variables like 'log_%';

查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

show master status;

flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件。每当mysqld服务重启时,会自动执行此命令,刷新binlog日志

flush logs;

清空binlog

reset master;

三.查看binlog日志

使用mysqlbinlog自带查看命令法

注意:

-->binlog是二进制文件,普通文件查看器cat、more、vim等都无法打开,必须使用自带的mysqlbinlog命令查看

-->binlog日志与数据库文件在同目录中

-->在MySQL5.5以下版本使用mysqlbinlog命令时如果报错,就加上 “--no-defaults”选项

查看

mysqlbinlog mysql-bin.000002

解释

server id 1 : 数据库主机的服务号;

end_log_pos 796: sql结束时的pos节点

thread_id=11: 线程号

mysql加载方式查询

注意:

查看

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

查看命令参数

IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] :偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)

查看的例子

show binlog events in 'mysql-bin.000002'\G;

其余例子

a)查询第一个(最早)的binlog日志:

show binlog events\G;

b)指定查询 mysql-bin.000002这个文件:

show binlog events in 'mysql-bin.000002'\G;

c)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起:

show binlog events in 'mysql-bin.000002' from 624\G;

d)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,查询10条(即10条语句)

show binlog events in 'mysql-bin.000002' from 624 limit 10\G;

e)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,偏移2行(即中间跳过2个),查询10条

show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;

四.恢复数据

说明:

恢复的时候要配合全备份,先进行全备份,在用mysqldump全备时添加-F刷新binlog,这时候mysqldump备份的是最新的binlog日志之前的内容了。

先进行全备份恢复,再将最新的binlog文件用mysqlbinlog进行查看,grep或者其他方式过滤,找到有问题的sql语句,记录下当时的pos点或者时间。只恢复出问题之前得时间点即可。

操作:

先恢复全部的

mysql -uroot -p'123456' < 2018-10-15-alldb.sql

再筛选有问题的sql部分,下面用grep方式找到了drop语句所在位置

再找到这条语句之前的上一条语句的pos点和时间点来恢复。可以看到104条是删除,那就恢复到103条的。当前看到的是日志区间。

以下命令进行恢复,stop-position是指定恢复截止的pos点。

实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径

mysqlbinlog --stop-position=5519 mysql-bin.000015 | mysql -uroot -p'123456'

其余例子

a)如果只是某个数据库有问题,可以只恢复单个数据库而不是所有:

`mysqlbinlog mysql-bin.000015 --database=数据库A | mysql -uroot -p'123456 数据库A'

五.命令参数

常用参数选项解释:
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

Mysql资料 Binlog的更多相关文章

  1. 【Mysql学习笔记】浅析mysql的binlog

    最近读一份关于“数据库事务故障恢复"的技术资料,发现对mysql的binlog的认识不够清楚,查阅mysql reference manual有所收获,作为笔记,记录于此. 1. What' ...

  2. MySQL的binlog恢复(Windows下)

    前言 在最近的工作中,由于自己粗(zuo)心(si)误update操作导致几百行的数据出现错误,在心急如焚的同时(那时候我竟然不知道除了备份之后还有binlog日志恢复)立马查资料学习binlog的恢 ...

  3. canal —— 阿里巴巴mysql数据库binlog的增量订阅&消费组件

    阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自  https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号 ...

  4. 【转】【MySQL】mysql 通过bin-log恢复数据方法详解

    mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了. 具体的操作是通过mysqlbinlog这 ...

  5. mysql开启binlog

    mysql开启binlog,至于为什么要开启binlog,可以google下. ## 设置server_id,一般设置为IP server_id= ## 复制过滤:需要备份的数据库名,多个库以逗号分隔 ...

  6. MySQL的binlog数据如何查看

    binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 ...

  7. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  8. mysql 利用binlog增量备份,还原实例

    mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 标签:binlog, mysql, mysqldump, 增量备份 一,什么是增量备份 增量 ...

  9. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

随机推荐

  1. 如何实现异步 connect

    写过网络程序的同学,应该都知道 connect 函数,在 socket 开始读写操作之前,先要进行连接,也即 TCP 的三次握手 , 这个过程就是在 connect 函数中完成的, connect 函 ...

  2. python中jsonpath模块,解析多层嵌套的json数据

    1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...

  3. Python 匿名函数用法和return语句

    匿名函数用法1.什么是匿名函数    函数定义过程中,没有给定名称函数,python中用lambda表达式创建匿名函数    lambda只是一个表达式,函数体比def简单    lambda主题是一 ...

  4. 微信小程序(六)

    MINA 框架: 启动: 冷启动,热启动 加载: 生命周期 路由: 事件: 事件时视图层到逻辑层的通信方式 事件可以将用户的行为反馈到逻辑层进行处理 事件可以绑定在组件上,触发事件后就会执行逻辑层对应 ...

  5. 【Python】300行代码搞定HTML模板渲染

    一.前言 模板语言由HTML代码和逻辑控制代码组成,此处@PHP.通过模板语言可以快速的生成预想的HTML页面.应该算是后端渲染不可缺少的组成部分. 二.功能介绍 通过使用学习tornado.bott ...

  6. [loj3046]语言

    定义$S_{i}$表示第$i$条链所包含的点的集合,$(x,y)$合法当且仅当$x\ne y$且$\exists i,\{x,y\}\subseteq S_{i}$(答案即$\frac{合法点对数}{ ...

  7. [JS高程] 特殊的原始值类型

    目录 原始值包装类型 (特殊引用类型) 原始值包装类型和应用类型的区别 原始值包装类型 (特殊引用类型) 在ES6 时,ECMAScript 数据类型是这样去分类的: 原始值(基本数据类型) Numb ...

  8. 四、Zookeeper3.7安装

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS 三.MapReduce编程实例 Zookeeper安装 @ 目录 前文 Zooke ...

  9. 华为9.8笔试题C++

    问题 给出一颗二叉树,每个节点有一个编号和一个值,该值可能为负数,请你找出一个最优节点(除根节点外),使得在该节点将树分成两棵树后(原来的树移除这个节点及其子节点,新的树以该节点为根节点),分成的两棵 ...

  10. SP20173 DIVCNT2 - Counting Divisors (square)

    Refer 主要思路参考了 Command_block 的题解. Description 给定 \(n\)(\(n\le 10^{10}\)),求 \[\sum_{i=1}^n\sigma_0(i^2 ...