mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志

mysql日志的种类

二进制日志(binary log):记录数据更新的操作,mysqlbinlog 可查看二进制日志文件

错误日志(error log):记录mysql服务进程mysqld的启动、关闭和运行时的错误信息

慢查询日志(slow query log):记录执行时间超过指定时间(long_query_time)的查询操作

通用查询日志(general query log):记录客户端连接和执行的sql查询操作(一般不开启)

日志一般存放在安装目录下的data目录下

 

刷新binlog操作:[root@oldboy data]# mysqladmin -uroot -poldboy flush-logs

 

binlog日志的三种模式statement、row、mixed

mysql> show variables like '%binlog_for%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+

1.statement level模式

每一条修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行

优点:解决了row level下的缺点,不需要记录每一条数据的变化,减少bin-log的日志量,节约IO,提高性能

缺点:必须记录每条语句在执行时的一些上下文信息,以保证所有语句在slave端执行时能得到和在master端执行时相同的结果;涉及到复杂内容的时候,可能会出现bug,造成复制出现问题,主要是修改数据的时候使用某些特定函数或者功能,例如sleep( )函数、last_insert_id( )函数

2.row level模式

日志记录成每一行数据被修改的形式,然后在slave端在对相同的数据进行修改

优点:不需记录执行sql语句的上下文信息,只需记录哪一条数据被修改了;不会出现某些特定情况下的存储过程、函数、触发器的调用和触发无法被正确复制的问题

缺点:binlog日志量很大(例如update test set name=‘Jane’,test表有几行就会记录几行)

3.mixed模式

statement模式和row模式的混合,mysql会根据执行的每一条具体的sql语句来确定记录的形式,即在statemente和row之间选择一种。新版本对row level模式做了优化,不是所有的修改都以row level来记录,如表结构的变更会以statement模式记录,如果是update或者delete还是会记录所有行的变更

mysql5.5默认的binlog是statement模式,临时修改为行模式mysql>set global  binlog_format ='ROW';(永久生效需改配置文件)

执行update oldboy.test set name=’Jane’ where id>3

查看行模式下的binlog  [root@oldboy data]# mysqlbinlog --base64-output='decode-rows' -v mysql-bin.000053

BEGIN

/*!*/;

# at 725

# at 774

#180717 20:20:55 server id 1  end_log_pos 774   Table_map: `oldboy`.`test2` mapped to number 38

#180717 20:20:55 server id 1  end_log_pos 884   Update_rows: table id 38 flags: STMT_END_F

### UPDATE `oldboy`.`test2`

### WHERE

###   @1=4

###   @2='Jane'

### SET

###   @1=4

###   @2='Jack'

### UPDATE `oldboy`.`test2`

### WHERE

###   @1=5

###   @2='Jane'

### SET

###   @1=5

###   @2='Jack'

### UPDATE `oldboy`.`test2`

### WHERE

###   @1=6

###   @2='Jane'

### SET

###   @1=6

###   @2='Jack'

### UPDATE `oldboy`.`test2`

### WHERE

###   @1=7

###   @2='Jane'

### SET

###   @1=7

###   @2='Jack'

# at 884

 

 

mysqlbinlog用来解析mysql的binlog日志,在mysql/data目录下,如mysql-bin.000006(6位)

binlog用来记录mysql内部所有增、删、改等对数据库内容有更新的记录,包含所有数据库及所有表,无法分开记

1.指定库导出,加-d 库名,可将指定库的更新语句截取出来

mysqlbinlog -d oldboy mysql-bin.000011  >  all.sql

日志内容部分如下

#181201 21:43:41 server id 1  end_log_pos 177   Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1543671821/*!*/;
SET @@session.pseudo_thread_id=26/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 177
#181201 21:43:41 server id 1  end_log_pos 287   Query   thread_id=26    exec_time=0     error_code=0
use `oldboy`/*!*/;
SET TIMESTAMP=1543671821/*!*/;
insert into test values(8,'Alice'),(9,'Alan')
/*!*/;
# at 287
#181201 21:43:41 server id 1  end_log_pos 314   Xid = 531
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

2.指定位置恢复,--start-position和--stop-position

Insert into test values(4,’钱六’);查看前后两个at的位置分别为570、670,指定更新语句所在的位置

mysqlbinlog mysql-bin.000011 --start-position=570 --stop-position=670 -r /opt/position.sql将结果重定向到/opt/ position.sql文件中(-r相当于重定向>)

3.指定时间恢复, --start-datetime和--stop-datetime(指定时间恢复可能不准确,mysql不会恢复截止时间恰好等于指定时间的sql语句,但是会恢复开始时间恰好等于指定时间的sql语句)

Insert into test values(4,’钱六’);前后时间都为22:41:20,指定时间时可稍微将时间向两个边界扩展一点

mysqlbinlog mysql-bin.000011 --start-datetime='2018-06-22 22:41:10' --stop-datetime='2018-06-22 22:41:21'  -r /opt/datetime.sql

以上指定位置和指定时间,如果不指定结束点,表示从指定点到文件结尾,如果不指定开始点,表示从文件开头到指定点

 

转载于:https://www.cnblogs.com/Forever77/p/10049948.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux IO多路复用之epoll网络编程,高并发的使用例子 (含源码)

本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一行,然后输出到客户端 客户端收到服务端…

c#中Excel数据的导入、导出

/**//// <summary>/// 导出到 Excel 文件/// </summary>/// <param name"fileName">含完整路径</param>/// <param name"dataTable">含字段标题名</param>publicvoidExpExcel(stringfileName ,DataTable dataTable){ …

你对Linux下的实时性应该多点了解

作者简介顺刚(网名:沐多)&#xff0c;一线码农&#xff0c;从事工控行业&#xff0c;目前在一家工业自动化公司从事工业实时现场总线开发工作&#xff0c;喜欢钻研Linux内核及xenomai&#xff0c;个人博客 wsg1100&#xff0c;欢迎大家关注&#xff01;本文讲述一些有利于提高x…

ria website

http://www.36ria.com/

Epoll例子的使用

第一部分&#xff1a;Epoll简介 问题 : Select,Poll和Epoll的区别 答案 : Epoll和Select的区别 1. 遍历方式的区别 。select判断是否有事件发生是遍历的&#xff0c;而epoll是事件响应的&#xff0c;一旦句柄上有事件来了&#xff0c;就马上选出来。 2. 数目的区别。select一…

DHCP机制

DHCP概念&#xff1a;局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;在工作过程中&#xff0c;它有两个对象&#xff0c;DHCP客户端和DHCP服务端&#xff0c;DHCP服务运行在&#xff16;&#xff17;端口和&#xff16;&#xff18;端口。 用途&#xff1a;&#xf…

C#中写入Excel

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Web;usingSystem.Data;namespaceCommon.BaseClass{publicclassFileExport{#region导出文件为 Excel文件 文本格式///<summary>///导出文件为 Excel文件///</summary>///<param name&…

这C语言写法谁见过

这是一个读者发给我的&#xff0c;我自己也没有见过这样的写法&#xff0c;有谁知道的&#xff0c;可以评论说下。谢谢各位&#xff01;

一号团队-团队任务3:每日立会(2018-12-01)

一.基本信息 团队序号&#xff1a;一号 开发的软件名称&#xff1a;Java教学官网 撰写人&#xff1a;张浩洋 学号:2016035107283 职务:项目经理 二.团队汇报 1.汇报文字版 一号团队全体成员与2018年12月01日在第一组项目群中针对2018年11月30日工作任务进行汇报&#xff0c;汇总…

老陈学 C++ 序列之二: 友元函数

class one{ public: one(){}; operator two ( ) const { return two(); } friend ostream& operator << ( ostream& os, const one& o) //成员函数还是全局函数&#xff1f; { return os << " i " << o.i; } int i; …

40 岁的中年失业

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;昨天发了一篇文章&#xff0c;有一个朋友转发了&#xff0c;然后看到有人评论&#xff0c;如下&#xff1a;前两天有朋友问我&#xff0c;说腾讯裁员好严重&#xff0c;还有如何如何&#xff0c;我是这样回答的。很多事情我…

Linux/Windows系统内核性能调优

做过Linux平台性能测试的童鞋平时可能会遇到如下问题&#xff1a; 1、 TCP端口号不够用导致并发上不去&#xff08;即与服务器端建立新连接失败&#xff09; 2、 TIME_WAIT状态连接过多导致应用服务器&#xff08;Nginx、Haproxy、Redis、Tomcat等&#xff09;性能下降或假死…

hwclock: Open of /dev/rtc failed, errno=19: No such device.

今早一台服务器故障&#xff0c;后来有空上来查看故障日志&#xff0c;未果&#xff0c;发现时间不对&#xff0c;如下&#xff1a; [rootcache06 ~]# hwclock -w Cannot access the Hardware Clock via any known method. Use the --debug option to see the details of our s…

MCU复位和程序启动那些事

大家好&#xff0c;这篇文章转自电源漫谈&#xff0c;文章从专业的角度说明了MCU复位经过的过程&#xff0c;对大家学习很有帮助。MCU通常会在工作之前&#xff0c;先经历复位和启动的一个过程&#xff0c;在用户使用过程中往往在这个阶段的工作不是那么的清楚&#xff0c;这里…

逆波兰表达式[栈 C 语言 实现]

逆波兰表达式 逆波兰表达式又叫做后缀表达式。在通常的表达式中&#xff0c;二元运算符总是置于与之相关的两个运算对象之间&#xff0c;这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法&#xff0c;按此方法&#xff0c;每一运算符…

FireFox不支持cursor:hand

这个在IE/Firefox下都支持可以使用cursor:pointer;转载于:https://www.cnblogs.com/kaixin110/archive/2007/08/22/865287.html

Red Hat 6.0 Installation Steps

1) 注册和下载 - 需要一个公司email地址来接收RH的确认邮件 https://cn.redhat.com/products/enterprise-linux/server/download.html 下载免费红帽企业 Linux 30 天评估版 - 注册完毕转入下载页面 https://access.redhat.com/downloads/ -选择免费评估版本, 收到确认邮件, 找到…

若有所思

今天出来​逛了下&#xff0c;没有准备文章&#xff0c;刚好一个朋友有一段思考&#xff0c;给大家分享下。深圳动物园是一个值得去的地方​-----佚名海边的夏天&#xff0c;太阳公公当空照&#xff0c;照的大地滚烫&#xff0c;海水湛蓝。人们都躲到树荫下&#xff0c;享受舶风…

HDU 4383 To The Moon 解题报告

HDU 4383 To The Moon 题意翻译 已知一个长为\(n\)的序列\(a\)&#xff0c;你需要进行下面的四种操作。 C l r d 将区间\([l,r]\)中的数加上\(d\),同时时间加\(1\) Q l r 查询当前时间区间\([l,r]\)中所有数的和 H l r t 查询时间为\(t\)时区间\([l,r]\)中所有数的和 B t 将当前…

第三章 阴阳的工作机制(1)

一、道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物1.易有太极&#xff0c;是生两仪上面&#xff0c;对阴阳已经讨论了很多&#xff0c;对这个问题已经有所了解。现在我们来讨论"阴阳的工作机制"&#xff0c;弄清楚这个以后对理解《伤寒论》的许多…