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

mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志相关推荐

  1. Python 解析log日志

    Python 解析log日志 软件环境 环境搭建 待解析log日志格式 log解析脚本 解析后文本格式 软件环境 软件 版本 作用 Ubuntu 20.04 操作系统 python 3.8.10 py ...

  2. (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解...

    关键词:binlog模式,binlog,二进制日志,binlog日志 目录概述 0.binlog概述 查看binlog日志参数设置: show variables like '%log_bin%'; ...

  3. MySQL二进制日志的三种模式解析

    原文出自 http://www.abcdocker.com/abcdocker/213 Row Level 行模式 日志会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改 优点:在 ...

  4. mysql 二进制日志查看_使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)...

    前提 MySQL开启了binlog日志 操作 1. 查看MySQL是否开启binlog(进mysql操作) mysql> show variables like 'log_bin%'; 2. 查 ...

  5. mysql导出二进制日志_使用mysqlbinlog提取二进制日志

    MySQL binlog日志记录了MySQL数据库从启用日志以来所有对当前数据库的变更.binlog日志属于二进制文件,我们可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要 ...

  6. mysql 二进制日志查看_使用mysqlbinlog查看二进制日志

    (一)mysqlbinlog工具介绍 binlog类型是二进制的,也就意味着我们没法直接打开看,MySQL提供了mysqlbinlog来查看二进制日志,该工具类似于Oracle的logminer.my ...

  7. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...

    MySQL中有六种日志文件, 分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log). ...

  8. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

    前言 1. ''最近公司大佬让我优化sql的时候,说可以通过控制where条件,尽可能的少的较少数据库的开支,少生成一些无用的binlog.由此引出binlog这个概念,大家一起学习一下 关于Binl ...

  9. mysql binlog日志的三种模式

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

最新文章

  1. 写个测试程序测试下,单片机使用浮点型数效率有多低
  2. python list去掉引号_最新的python面试题集170之三(基础性学习)
  3. jaxp的Sax解析
  4. Objective-c 静态变量的定义
  5. redis和kafka比较
  6. CIKM 2021 | BH:面向Web级应用的基于二进制码的Hash Embedding
  7. chrome浏览器设置网页快速到顶部和到底部的方法
  8. express接受get数据
  9. python3.6字典有序_为什么Python 3.6以后字典有序并且效率更高?
  10. Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释
  11. 循环队列(循环数组)中元素个数的计算
  12. c语言进度,C语言实现动态进度条
  13. 关闭MySQL日志,删除mysql-bin.0000*日志文件
  14. BZOJ5217[Lydsy2017省队十连测] 航海舰队
  15. mysql的安装包,可直接下载5.6.43
  16. 谷歌搜索算法分析及应对策略
  17. 数据结构1800试题(第3章)
  18. 电脑Windows磁盘修复工具如何使用
  19. 固态硬盘迁移及0xc00000e错误码解决方案
  20. 流量、技术、超级APP,百度吹响国潮IP进攻号

热门文章

  1. 使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular
  2. Handle/Body pattern(Wrapper pattern)
  3. ceph中查看一个rbd的image的真实存储位置
  4. isset、empty、var==null、is_null、var===null详细理解
  5. MapInfo开发心得——控件篇
  6. .Net环境下基于Ajax的MVC方案
  7. spdk/dpdk 编译相关问题汇总
  8. BZOJ1911 特别行动队
  9. Ionic Angular自动捕获错误 配置Angular2.x +
  10. Jquery中$(document).ready(function(){ })函数的使用详解