zoukankan      html  css  js  c++  java
  • mysql 开发进阶篇系列 39 mysql日志之二进制日志(binlog)

    一.概述

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

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

    -- 通过环境变量来查看位置
    SHOW VARIABLES LIKE '%log_bin%'

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

    -- 通过环境变量来查看位置
    SHOW VARIABLES LIKE '%expire_logs_days%'

          

          现来查看日志,重启服务后日志只保留了一天,也就是今天9月7日的日志。如下图所示:
          

  • 相关阅读:
    在 TB1 机器上编译并调试 TB 自带sample的方法
    C++编译错误 fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning
    c++生成随机数
    Unity调用讯飞做语音听写(Android Studio版)
    TouchDesigner 编译FlexChop
    Behavior Designer知识点
    清除Unity缓存
    UnityEngine.UI.dll is in timestamps but is not known in assetdatabase
    Unity插件学习记录 -- SW Actions
    Unity3D 使用LineRenderer制作画板功能
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9605565.html
Copyright © 2011-2022 走看看