为什么80%的码农都做不了架构师?>>>   

二进制日志记录了数据库的所有改变,使得多个slave可以执行同样的更新,二进制日志仅包含可能改变数据库的语句,对于那些目前没有但是以后可能会改变数据库的语句也会记录下来。

服务器上的事物通常不是一个接一个顺序执行的,而是并行执行的,为了防止多个事务之间产生冲突导致不一致的结果,服务器要确保事务的执行是顺序化的,就像他们是串行执行的一样。二进制日志按照在master上提交的顺序记录事务,虽然事务在master上可能是交错执行的,但是记录在二进制中的日志却是顺序不变的,这取决于事务在master上的提交时间。

二进制日志是一系列的文件,它由记录真正事件的一系列binlog文件和一个记录binlog文件的索引文件构成,binlog索引文件用来跟踪已有的binlog文件,以便必要的时候服务器能够创建正确的binlog日志文件。影响binlog日志文件的命令如;purge binary logs、reset master、flush logs也会影响索引文件。

binlog日志文件里面由改变数据库的事件组成,不过每个binlog日志都是以Format_desc事件作为文件头,以Rotate事件作为文件尾。如果mysql服务不正常启动或者停止,binlog日志的末尾可能不是以Rotate事件结尾的。mysql服务关闭或者重启都会产生一个新的binlog日志文件,在binlog文件记录完毕后,服务器会在该binlog文件末尾追加一个Rotate事件,该事件会记录下一个binlog文件的文件名和事件开始读取的位置。

binlog日志中记录的事件都被划分为组,每个组对应一个事务,一个事务可能包含多条语句,通常情况下,每个组要么全都执行,要么全都不执行。对于非事务引擎,每个改变数据库的语句就是一个组。在事件写入binlog之前,需要获得互斥锁,在事件写完后再释放。在基于语句的复制中,实际执行的语句会被写入binlog日志文件中,然后在slave上重新执行这些语句。

在mysql的配置文件中,可以配置只记录某些库的binlog或者忽略记录某些库的binlog。当你想过滤只属于特定库的语句时,使用binlog-do-db,想忽略特定的数据库时,使用binlog-ignore-db,这两个选项可以多次使用。注意:过滤是在语句级别完成的,binlog-*-db使用当前数据库以决定是否过滤该语句,而不是以语句影响的表的数据库决定的。

二进制日志的改变并不一定是数据库的改变,有时候mysql服务停止了,也是可以手动修改binlog文件的,所以这样的binlog的改变并不会引起复制的进行,因为mysql服务没有运行,所以,保持数据库和二进制日志相互一致,对于防备系统崩溃是非常重要的。

sync-binlog可以控制将二进制日志多久写入磁盘一次,默认是0,表示由系统决定,如果设置为1,1个语句提交或者1个事务提交后,二进制日志将写入磁盘,这样即使系统崩溃了,你是不会损失任何事务的,不过这样也意味着性能会变得很糟糕,因为访问内存和访问磁盘的速度相差很大。

由于操作系统对单个文件的大小有限制,所以binlog日志不可能会一直写在一个日志文件中,所以binlog日志文件需要轮转,有几个活动会导致binlog日志轮转:
      1 服务停止,当服务再次启动时,都会开启一个新的二进制日志文件
      2 如果binlog文件增长到规定的大小,则会自动轮转,通过max-binlog-size来控制binlog文件大小
      3 flush logs命令会将所有log刷新进磁盘,然后创建一个新的文件用来继续写二进制日志

清除binlog有两种办法,一种是自动清除,一种是手动清除
     1 自动清除需要设置expire-logs-days,这个变量设置日志需要保留的天数
     2 purge binary logs命令手动清除binlog
        有两种清理方式,一种是按照文件名清理,一种是按照时间清理
        purge binary logs before ‘datetime’  datetime之前的文件都会被清除
        purge binary logs to ‘filename’ filename之前的文件都会被删除
     服务器重启或者二进制日志轮转完成后,binlog文件将会被清除。

转载于:https://my.oschina.net/guol/blog/145848

mysql二进制日志管理相关推荐

  1. mysql二进制日志管理_MYSQL二进制日志管理脚本

    MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志,将二进制日志备份至NFS,并压缩存放:#!/bin/bash#Purpose:管理二进制日志,每小时刷新二进制日志,并将 ...

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

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

  3. MySQL数据库 日志管理、备份与恢复

    MySQL数据库 日志管理.备份与恢复 一.MySQL日志管理 MySQL的默认日志保存位置为/usr/local/mysql/data 日志开启方式有两种: 通过配置文件或者是通过命令 通过命令修改 ...

  4. 不属于mysql二进制日志相关的参数_MySQL二进制日志相关问题详解

    本文出处: (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL"第一 ...

  5. mysql完全备份 二进制日志,MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  6. MySQL二进制日志(binlog)开启、查看、截取

    mysql二进制日志记录了数据库所有变更类的操作日志主要有2个作用: MySQL主从配置 数据恢复 参数介绍 server_id=3 log_bin=/data/binlog/mysql-bin: / ...

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

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

  8. mysql 二进制日志后缀数字最大为多少

    之前看到mysql二进制日志后面会加一个以数字递增为结尾的后缀,一直在想当尾数到达999999后会发生什么情况,先查了一下官网,对后缀有这样一句介绍:The server creates binary ...

  9. 2.5.2 MySQL二进制日志介绍

    MySQL二进制日志介绍 什么是 binary log 这个文件记录了mysql数据库所有的DDL和DML(除了数据查询语句 select)语句事件.用来记录数据库中发生的修改情况. 比如:数据的修改 ...

  10. mysql日志管理_关于MySQL的日志管理(binlog)

    关于MySQL的日志管理(binlog) 一.查看binlog的启用状态 最常用的mysql版本是5.7,默认不开启binlog,可以在登录mysql之后,利用以下命令查看当前的binlog启用状态: ...

最新文章

  1. 为什么很多网站的验证码都设置得肉眼都很难识别?
  2. php调用dll函数,[转载]matlab调用DLL中的函数
  3. python 数组赋值_LeetCode基础算法题第182篇:一维数组的运行总和
  4. 2. html表单提交servlet出现的乱码问题的解决?
  5. 鹤峰:美丽的茶乡——人物篇
  6. 【Linux】安装x11vnc和xrdp,使用windows远程deepin
  7. 判断回文串时忽略既非字母又非数字的字符
  8. 编写计算机取余程序_必须收藏,2020年专升本计算机常考知识点总结,抓分的关键点...
  9. 妙用TurboMail企业通讯平台,重要邮件不再躲猫猫
  10. WPS文字表格自动填充序号
  11. 字符类型与Unicode 编码
  12. 视频图像处理-01背景差分法
  13. Yii Zii组件 CGridView 使用详解
  14. 真彩色图像数据量 计算_计算机基础:图形、图像相关知识笔记
  15. 周易六十四卦——水风井卦
  16. 【算法基础】一维前缀和 + 二维前缀和
  17. python去重、根据某列统计另一列频数
  18. 小菜鸡的Three.js学习笔记(一)-三维模型压缩DRACO初探
  19. iOS 重力感应之箭头指向重力方向
  20. vue实现人员展示页面

热门文章

  1. java Relative Path and absolute
  2. ML--K-近邻算法
  3. win10电脑显示无法自动修复此计算机,win10系统无法自动修复此计算机的操作步骤...
  4. oracle删除导入库,oracle数据库删除和导入方法
  5. 485.最大连续1的个数(力扣leetcode) 博主可答疑该问题
  6. java中的并发是什么意思_java中的并发是什么
  7. Codeforces 1013
  8. c++11 多线程依次打印ABC
  9. 谁能告诉我war包的作用及使用方法。。。。。。
  10. 简单几步配置gitlab