引言

注:图片取自网络

提一下比较重要的几个:

重做日志(Redo Log):重做日志是实现mysql事务的持久性的原理之一,当新增数据时,Redo Log会备份新数据,在事务提交前,只要持久化Redo Log即可,而不需要持久化实际数据,如果这时候mysql系统崩溃,虽然数据还没有持久化新增数据,但是Redo Log已经持久化了,系统可以根据Redo Log内容将数据恢复到最新的状态。

回滚日志(Undo Log):回滚日志是实现mysql事务的原子性和一致性的原理之一,在操作任何数据之前,会先将数据备份到某个地方(这个存储数据备份的地方称为Undo Log),然后进行数据的修改,当修改发生错误或用户执行了Rollback回滚操作,系统就会根据Undo Log恢复到事务执行之前的状态。

二进制日志(binlog):MySQL的二进制日志是MySQL服务层的日志之一。其记录了所有对MySQL数据库的CRUD事件,包括增删改查和对表的系列操作记录,其记录的日志都是经过comomit的操作,对于失败、回滚或未提交的操作不会记录。通过mysql的二进制日志增量,可以较好到的实现mysql的复制和备份。

慢查日志(slow_query_log):参考我的这篇文章https://blog.csdn.net/fanrenxiang/article/details/83687241

中继日志(relay_log):这个日志暂时还没怎么研究过,只知道在mysql主从复制时候用到了,从服务器上会将二进制日志写入relay_log,然后从服务器再重放relay_log来实现mysql复制功能。

三种二进制日志格式

statement:基于SQL语句的形式,采用这种格式的话,你的二进制日志文件里记录的就是你执行的SQL语句,例如你执行的是delete from table where id<100;那记录的就是该条SQL,个人觉得记录的比较"粗糙";

row:行格式记录二进制日志,记录的是SQL对应的每一行的操作,粒度比statement细,也是推荐的格式;

mixed:混合格式,由mysql自己决定什么时候用row,什么时候用statement;

mysql> show variables like '%log_bin%'; #查看二进制相关信息

+---------------------------------+---------------------------------------+

| Variable_name | Value |

+---------------------------------+---------------------------------------+

| log_bin | ON |

| log_bin_basename | /usr/local/mysql/data/mysql-bin |

| log_bin_index | /usr/local/mysql/data/mysql-bin.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

+---------------------------------+---------------------------------------+

6 rows in set (0.01 sec)

mysql> show variables like '%binlog_format%'; #查看二进制日志格式

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | ROW |

+---------------+-------+

1 row in set (0.00 sec)

二进制日志若未开启,在 /etc/my.cnf 中的[mysqld]下面加上即可开启

[mysqld]

log-bin=/logs/mysql-bin ##二进制日志存放位置

binlog_format=statement ##二进制日志格式

或者执行如下命令即可

mysql> set global binlog_format=MIXED;

如果你没显式的配置二进制日志的目录位置,默认在${mysql安装目录}/data/下。

二进制日志格式对比

binlog_format=statement

日志记录量较小,节约磁盘空间和网络IO

非确定行函数复制可能失败,主从复制存在不一致风险

binlog_format=row

避免主从复制不一致问题,复制效率高于statement

日志记录量大于statement,自然就消耗多一些的磁盘和IO

binlog_format=mixed

根据sql语句由系统决定使用row还是statement格式

可以使用下面语句修改日志格式:

mysql>set global binlog_format=row;

当binlog_format=statement时数据库进行批量操作时,如update tablename set column1=‘foo’ where id>2,则statement格式只记录此条sql,而row格式则会记录每一行的修改操作。

mysql 5.7版本开始,其二进制日志格式默认为row。其中,row格式中细化的binlog_row_image属性又可设置为FULL、MINIMAL、NOBLOB 类型,这里推荐使用binlog_row_img=MINIMAL。

mysql> show variables like 'binlog_row_image'; //查询row格式

mysql> set global binlog_row_image=minimal; //设置row格式

如何选择mysql的二进制日志格式

推荐使用binlog_format=mixed,若复制操作走的是内网操作,则可以选择row格式来确保主从复制一致性,同时选择binlog_row_image=minial格式来减少磁盘占用和网络IO。

binlog_format=statement还是binlog_format=row决定了复制方式是基于sql语句的复制还是基于行的复制,其优缺点大致参考这两种日志格式对应的优缺点。

二进制日志的记录时机

二进制日志文件的记录可以是同步或者异步,写入时机在mysql事务提交之后,主要由sync_binlog参数决定,当sync_binlog=1表示最高安全级别的写入(最大程度的保证事务不丢失)

mysql> show variables like '%sync_binlog%';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| sync_binlog | 1 |

+---------------+-------+

1 row in set (0.01 sec)

二进制日志的文件大小

单个二进制日志文件的大小限制,可以通过以下命令查看

mysql> show variables like 'max_binlog_size';

+-----------------+------------+

| Variable_name | Value |

+-----------------+------------+

| max_binlog_size | 1073741824 |

+-----------------+------------+

1 row in set (0.01 sec)

如果超过了这个限制,则会自动滚动清理,也就是由之前的mysql-bin.000001变为mysql-bin.000002。

通过show master logs;命令来查看当前二进制日志文件数。

二进制日志文件的滚动清理

上面说到,超过限制大小后会自动生成新的二进制日志文件,这里说的是这些日志文件的删除

mysql> show variables like 'expire_logs_days';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| expire_logs_days | 0 |

+------------------+-------+

1 row in set (0.01 sec)

如上是0,表示不过期,如果我设置为2,表示超过两天的二进制日志会被自动删除。

也可以手动 flush logs;来显式的进行二进制日志文件的滚动清理。

引申文章:

Mysql主从复制-基于GTID复制(https://blog.csdn.net/fanrenxiang/article/details/70197004)

Mysql主从复制-基于日志点复制(https://blog.csdn.net/fanrenxiang/article/details/70194707)

mysql 二进制日志详解_Mysql二进制日志详解相关推荐

  1. mysql 二进制日志 解析c++_mysql二进制日志文件恢复数据库

    二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句.如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所 ...

  2. mysql二进制日志内容说明_MySQL二进制日志相关问题详细说明

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  3. mysql配置日志老化配置_mysql中日志的配置与分析

    默认情况下,如果日志没有配置,则只记录错误日志,记录到syslog,配置文件 /etc/mysql/conf.d/mysqld_safe_syslog.cnf (ubuntu下) [mysqld_sa ...

  4. mysql配置日志老化配置_mysql配置-日志大小限制和自动删除

    线上的项目磁盘消耗问题, 发现和MySQL日志有关系. 需要处理的问题 如何限制大小 不让日志无限膨胀? 配置日志不留? 删除的方式和直接删除会对服务有什么影响? 解决方式 限制大小, 保留最近一段时 ...

  5. mysql 数据库日志管理工具_mysql mysqlbinlog日志管理工具使用教程

    一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...

  6. mysql日志文件名字_MySQL各类日志文件相关变量介绍

    文章转自:http://www.ywnds.com/?p=3721 查询所有日志的变量 1 mysql>show global variables like'%log%'; GLOBAL表示查全 ...

  7. mysql 错误日志 占用硬盘_MySQL慢日志占满磁盘空间导致业务主库宕机解决

    在MySQL的日常维护中,我们总会遇到这样或那样的问题,对于那些经常发生且有处理经验的事故,不论是新手还是老司机都能在故障规定的容错时间内解决.而对于那些不常见.比较棘手的问题,新手上路可能就显得举足 ...

  8. mysql my.ini 详解_mysql my.ini 详解

    basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录. datadir = path 从给定目录读取数据库文件 ...

  9. mysql的报错日志哪里看_mysql错误日志

    ### 错误日志是非常有用的东西,在上一篇 mysql字符集 中,因为看了网上很多博客,修改字符集的时候,在服务端` [mysqld]`下添加的变量内容为(博客里写的是这个变量,有很多博客都这样写,可 ...

最新文章

  1. Feign Client的各种超时时间设置
  2. bzoj1503 郁闷的出纳员(平衡树,思维)
  3. 鸿蒙系统的升级名单,首批升级鸿蒙系统的名单确认,华为安卓系统将成为过去式!...
  4. php 比较字符串或文章的相似度
  5. y电容如何选型_高压并联补偿电容器基础及运行管理
  6. Node.js是什么?
  7. fsck 修复文件系统_微软推出Win10 20H2 Build 19042.608测试版 修复多种已知错误
  8. android inputmethodmanager 不自动弹出,Android中软键盘InputMethodManager的弹出和隐藏,以及显示和隐藏的监听...
  9. 凸优化学习笔记(五):凸优化算法、无约束优化算法、有约束优化算法
  10. 如何从零开始准备数学建模竞赛?
  11. wamp mysql使用方法_wamp使用方法【总】
  12. [BZOJ3162]独钓寒江雪
  13. Linux下RTL8723BE无线网卡驱动问题解决方法
  14. 美团:后端开发工程师(实习生)面试
  15. 基于C#实现的小型动物识别推理系统
  16. SQL 简介以及MySQL的优点
  17. GitHub个人Blog完全攻略
  18. Vue进阶(幺柒零):前端用户体验提升(四)应用 rem/em 实现字体自适应
  19. find 搜索关键字并显示文件名
  20. [搬家]打造自己的嵌入式系统,防火墙或路由器

热门文章

  1. RMI中部署时要注意的地方
  2. wkwebview html5页面,iOS使用WKWebView加载HTML5不显示屏幕宽度的问题解决
  3. java神雕侠侣1古墓情缘游戏攻略_《神雕侠侣》古墓派平民玩法攻略
  4. 推荐 7 个 Vue2、Vue3 源码解密分析的开源项目
  5. Java程序员必须知道的Java10特性
  6. reactjs创建虚拟DOM的两种方式:使用jsx和js创建虚拟DOM
  7. ClickHouse数据分析列式数据库概述
  8. linux bash中的引号:单双引号、反撇号
  9. linux grep查找命令使用示例
  10. pythonanywhere使用:进入虚拟机及修改django项目的css样式