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
以上指定位置和指定时间,如果不指定结束点,表示从指定点到文件结尾,如果不指定开始点,表示从文件开头到指定点
mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志的更多相关文章
- [日志分析]Graylog2进阶 通过正则解析Nginx日志
之前分享的 [日志分析]Graylog2采集Nginx日志 主动方式 这篇文章介绍了Graylog如何通过Graylog Collector Sidecar来采集nginx日志. 由于日志是未经处理的 ...
- Mysqlbinlog解析工具
Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据 ...
- (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解
关键词:binlog模式,binlog,二进制日志,binlog日志 目录概述 0.binlog概述 查看binlog日志参数设置: show variables like '%log_bin%'; ...
- (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置
(4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...
- 使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)
前提MySQL开启了binlog日志操作1. 查看MySQL是否开启binlog(进mysql操作) mysql> show variables like 'log_bin%'; 2 ...
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- mysql binlog日志的三种模式
1.statement level模式 每一条会修改数据的sql都会记录到master的bin-log中.slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行.优 ...
- mysqlbinlog抽取二进制日志中某库某表的日志
1.先使用myqlbinlog命令把整个库的二进制日志抽取出来 mysqlbinlog --database=db_name mysql-bin.xxxxxx > db_name.sql 2.然 ...
- MySQL备份方案-->(利用mysqldump以及binlog二进制日志)
MySQL备份方案-->(利用mysqldump以及binlog二进制日志) 随着数据不 ...
随机推荐
- ansible-playbook 快速入门
管理用户密码: --- - hosts: test tasks: - name: changed password shell: echo root:123456 | chpasswd remote_ ...
- 超实用教程,教你用墨刀做出小红书app原型
一个新手怎么用1小时快速学会APP原型设计? 1小时很短,这意味着学习时必须把握APP原型设计中的重点.难点,而非面面俱到. 要在短时间内理解.掌握一个工具的使用,最有效的方式莫过于临摹: 看实例视频 ...
- c# 利用MailKit.IMap 收取163邮件
最近我要做一个爬虫.这个爬虫需要如下几个步骤: 1 填写注册内容(需要邮箱注册) 2 过拖拽验证码(geetest) 3 注册成功会给邮箱发一封确认邮箱 4 点击确认邮箱中的链接 完成注册 我这里就采 ...
- Oracle相关安装经验总结
1. 安装的是oracle 12c client for windows,从同事处拿到的,说是64位的,不过我没有找到包含有64这样的文件名或者里面内容有64位的.从同事处拿到的plsqldev110 ...
- windows go dll 框架
乘着还没有添加商业功能之前,先给大家把福利分享了 希望有需要的朋友能够用的上 这个框架是在用windows平台,GO做的http/https服务,调用dll现有的库接口实现特定功能的大框架 //dll ...
- iOS 开发笔记-Objective-C之KVC、KVO
概述 键值编码(KVC).键值监听(KVO)特性 键值监听KVO Key Value Observing(简称KVO)其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属 ...
- cocos2d JS 在 JavaScript 中,怎样把一个对象转化成 JSON 字符串?
为什么今天要做这样子的操作,原因很简单,因为cocos JS 的本地缓存储存不了对象,所以当我通过本地缓存的 key和value来取值的时候就取不出来来,json的消息数据是一个对象来的,然而在做牌局 ...
- UVAL 3942 Remember the Word(递推+Trie)
Remember the Word [题目链接]Remember the Word [题目类型]递推+Trie &题解: 蓝书P209,参考的别人公开代码 &代码: #include ...
- spring之继承配置
我们有一下两个类,并且Gradate类继承了Student类 public class Student public class Gradate extends Student 在applicatio ...
- CentOS中利用Docker安装RabbitMQ
CentOS中利用Docker安装RabbitMQ 1.拉取镜像(带管理平台) #docker pull rabbitmq:3.7.7-management 2.启动容器: #docker run - ...