一、概述

binlog 二进制日志文件,可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

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

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

最主要的使用场景有两个:
1.)主从复制中,使slave同步master的数据。
2.)数据恢复,定时全备与binlog恢复指定数据?

2.binlog图解

binlog日志中创建语句会被格式化显示;创建库是小写,创建表是大写。

3.相关命令:

查看所有binlog日志:show master logs;

刷新binlog日志:flush logs;

清空binlog日志:reset master;

二、根据binlog日志选择性恢复

在开启GTID的情况下用mysqlbinlog命令根据binlog日志恢复时需要添加“--skip-gtids=true”否则既不成功也不报错。而且使用这种恢复方式要求MySQL中不存在无法执行sql语句的环境。例如:在这个binlog日志的任职期间删除过上个binlog任职时创建的数据库,如此在恢复时会出现提示“找不到数据库的状态”而退出。不过我们可以利用binlog日志文件来选择性恢复:1.)指定恢复开始的与结束的时间点。2.)指定开始恢复与结束的pos点。

注意:binlog日志的格式row时,内容缺省是加密的,需要加参数“--base64-output=decode-rows -v”解析查看。

1.)基于时间点的恢复:

--start-datetime :开始恢复点
--stop-datetime :结束恢复点
命令格式:
mysqlbinlog --skip-gtids=true --start-datetime="2017-11-14 17:10:57" mysql-bin. |mysql -uroot -p123456 #恢复指定时间点之后的数据
mysqlbinlog --skip-gtids=true --start-datetime="***"  --stop-datetime="***" mysql-bin.000056 |mysql -uroot -p123456 #恢复某个时间段的数据

2.)基于pos位置的恢复:

--start-position :起始恢复点
--stop-position :结束恢复点
命令格式:
mysqlbinlog --skip-gtids=true --stop-position= mysql-bin. |mysql -uroot -p123456 #恢复某个pos之前的数据
mysqlbinlog --skip-gtids=true --start-position=*** --stop-position=*** mysql-bin.000056 |mysql -uroot -p123456 #恢复某段pos之间的数据

三、多个binlog日志恢复

如果没有备份的话,我们需要恢复数据时,需要从最开始的binlog逐个恢复。所我们要时常做好全备并刷新binlog,以便可以快速定位需要回复的数据。

在使用多个binlog log日志的还原最好将所有文件使用一个连接完成,如果使用不同连接的话有时会导致不安全,比如第一个日志创建了临时表,但是导入完成后临时表会被删除,这是第二个需要用到临时表的binlog日志就会因找不到表而报“unknown table”。所以建议使用如下方法恢复:

1.)所有二进制文件放在单个连接里:

mysqlbinlog   binlog.  binlog.  |   mysql   -u   root   -p

2.)将所有二进制文件写在一个文件里执行

mysqlbinlog    binlog.  >  /tmp/qk.sql
mysqlbinlog binlog. >> /tmp/qk.sql
mysql -u root -p -e "source /tmp/qk.sql"

四、案例:

binlog日志恢复报错:

ERROR 1049 (42000): Unknown database 'user'
ERROR 1046 (3D000): No database selected

原因:

这是因为binlog日志文件是在GTID模式下生成的,再查看binlog日志可以看到每个事务开始前,会执行“SET @@SESSION.GTID_NEXT=source_id:transaction_id”GTID事务,但是这些GTID已经执行过了,从Executed_Gtid_Set中可以看到。所以我们在执行解析的binlog文件时所有的事务都被忽略。(已经存在于Executed_Gtid_Set集合中的GTID会跳过)

解决:

1.)由于是GTID导致的,关闭该功能即可。也可以临时关闭GTID。
2.)在使用GTID时,想通过binlog日志来恢复数据,可以在mysqlbinlog解析日志时指定 “--skip-gtids=true”,这样的话解析出来的文件中就不会包含SET @@SESSION.GTID_NEXT。不过得保证mysqlbinlog版本为3.4及以上。

注意:

当未开启GTID是binlog日志中是这样的:SET @@SESSION.GTID_NEXT='ANONYMOUS'/*!*/;,这时如果启用了GTID然后同步的话,会提示GTID已开始的错误:ERROR 1782 (HY000): @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.
这时可重新加--skip-gtids=true解析下之前的binlog备份,然后再导入。或则临时关闭GTID。

BinLog日志的更多相关文章

  1. 删除mysql binlog日志

    查看:mysql> show binary logs; 删除 mysql-bin.000200 之前binlog日志:mysql> purge binary logs to 'mysql- ...

  2. mysql binlog日志优化及思路

    在数据库安装完毕,对于binlog日志参数设置,有一些参数的调整,来满足业务需求或使性能最大化.Mysql日志主要对io性能产生影响,本次主要关注binlog 日志. 查一下二进制日志相关的参数    ...

  3. MySQL 5.6 新参数对binlog日志量的优化

    数据库版本:5.6.* 1.row日志image类型 参数binlog_row_image 控制着这种image类型,默认为FULL(log all columns),即记录before&af ...

  4. Mysql数据库之Binlog日志使用总结

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...

  5. 阿里云的RDS 查看binlog日志的方法

    按时间点反后台备份的binlog日志从阿里云导出来,然后用mysqlbinlog查看日志内容: # mysqlbinlog -vv --base64-output=decode-rows mysql- ...

  6. mysql主从复制问题之主从两端binlog日志不同步解决方案

    主操作: 进入主的数据库查看状态: mysql> show master statusG; *************************** 1. row **************** ...

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

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

  8. MySQL bin-log 日志清理方式

    MySQL bin-log 作用   1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主 ...

  9. mysql通过binlog日志来恢复数据

    简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...

  10. 阿里云mysql数据库恢复总结,mysql binlog日志解析

    由于意外..阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决. 首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录 这导致了一个问 ...

随机推荐

  1. javascript 之 typeof 与 instanceof

    1.typeof:返回一个表达式的数据类型的字符串 返回结果为js的数据类型,包括number,boolean,string,object,undefined,function. var a = 1; ...

  2. JavaScript闭包和this绑定

    本文最主要讲讲JavaScript闭包和this绑定相关的我的小发现,鉴于这方面的基础知识已经有很多很好的文章讲过了,所以基本的就不讲了,推荐看看[酷壳](http://coolshell.cn/)上 ...

  3. centos 配置yum源

    1.yum配置 yum的配置文件在  /etc/yum.conf [root@mini ~]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$ba ...

  4. 利用crontab系统每天定时备份MySQL数据库及删除指定crontab定时任务

    利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1.创建保存备份文件的路径/mysqldata mkdir /mysqldata 2.创建/usr/sbin/ba ...

  5. JVM生命周期

    JVM生命周期可以分为以下三个阶段 启动:任何class文件的main函数都可认为是jvm示例的起点. 运行:以main函数为起点,后续的线程都由它启动,包括守护线程和用户线程.main方法启动的线程 ...

  6. git命令(待补充)

    git log查看历史 git log -p -2 -p选项表示显示每次提交的内容差异,-2表示最近两次的更新

  7. javascript使用百度地图api和html5特性获取浏览器位置

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>&l ...

  8. ACM-ICPC 2018 南京赛区网络预赛 G. Lpl and Energy-saving Lamps (弱线段树)

    线段树节点维护区间最小值,查找时优先从左侧的区间寻找. 每一次循环都在树中不停寻找第一个小于等于当前持有数的值,然后抹去,直到找不到为止. #include<cstdio> #includ ...

  9. ACM-ICPC 2018 南京赛区网络预赛 - L Magical Girl Haze (分层迪杰斯特拉)

    题意:N个点,M条带权有向边,求可以免费K条边权值的情况下,从点1到点N的最短路. 分析:K<=10,用dist[i][j]表示从源点出发到点i,免费j条边的最小花费.在迪杰斯特拉的dfs过程中 ...

  10. DataTables VS EasyUI DataGrid 基础应用 转

    DataTables中文网推出了 第一篇 关于DataTables和其他表格插件比较后,为了把让这个比较更有意义,更能帮助到大家,DataTables中文网 做了问卷调查,根据小伙伴们的填写我归纳了一 ...