欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)

程序员文章站 2022-09-03 10:47:48
一.概述 二进制日志(binlog)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程,此日志对灾难时的数据恢复起着极其重要的作用。 1.1 日志的位置和格式 在my.cnf中可以查看log-bin的位置,m ......

一.概述

         二进制日志(binlog)记录了所有的ddl(数据定义语言)语句和dml(数据操纵语言)语句,但是不包括数据查询语句, 语句以"事件"的形式保存,它描述了数据的更改过程,此日志对灾难时的数据恢复起着极其重要的作用。

  1.1 日志的位置和格式
    在my.cnf中可以查看log-bin的位置,mysqld将包含所有更新数据的sql命令写入日志文件,位置如下图所示:
    mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
    下面通过环境变量来查看当前binlog位置和状态

-- 通过环境变量来查看位置
show variables like '%log_bin%'

    mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
    下面查询所有binlog日志文件
    mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)

    上图中mysql-bin.index是日志的索引文件,记录了最大的日志序号。


  1.2 日志的读取 

    由于日志以二进制方式存储,不能直接读取,需要用mysqlbinlog工具来查看。在33篇里有讲到开启binlog以及查看内容,这里不在详述。
       https://www.cnblogs.com/mrhsr/p/9555313.html


  1.3  日志的删除
              对于繁忙的事务处理系统,每天会生成大量日志内容,日志如果长时间不清除,将会对磁盘空间带来很大的浪费,因此定期删除日志是dba维护mysql数据库的一个重要工作内容,下面介绍几种方法。    

    (1)  执行sql 的reset master; 命令,该命令将删除所有binlog日志,新日志编号从000001开始。请谨慎使用此语句,以确保不会丢失二进制日志文件数据。特别是在主从库上,导致日志不同步报错。清空所有日志如下:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
    (2) 使用purge以日志编号为条件。例如:执行purge master logs to 'mysql-bin.000006'; 将删除06编号之前的所有日志,如下图所示:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
    (3) 使用purge 以时间为条件。例如:执行purge master logs before '2018-09-06'; 删除9月6日之前的所有日志,如下图所示:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
    (4) 使用expire_logs_days
      此参数设置在my.cnf中,是用来设置日志的过期天数,过了指定的天数后日志将会自动删除,这样有利于减少dba的管理的工作量。如下所示:
      注意在my.cnf中参数如果设置错误。例如设置成expire_logs_day=1。 在重启mysql服务器,进程将启动失败,如下图所示:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)
      在my.cnf中设置,重新启动mysql服务 如下图所示:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)

-- 通过环境变量来查看位置
show variables like '%expire_logs_days%'

      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)

      现来查看日志,重启服务后日志只保留了一天,也就是今天9月7日的日志。如下图所示:
      mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)