zoukankan      html  css  js  c++  java
  • MySQL 5.7二进制日志

    简介
    二进制日志是MySQL服务器用来记录数据修改事件的,比如INSERT、UPDATE、DELETE等会导致数据发生变化的语句,SELECT语句不会被记录在内。MySQL必须先执行完一条语句才能知道它是否修改了数据,因此写入二进制日志文件的时间是语句执行完成的时间。写入顺序是按语句执行完成的先后顺序,事务中的语句会先被缓存起来,成功提交后才会被写入,回滚则不会被写入。非事务的存储引擎,所有的修改会立刻写入到二进制日志中。
    二进制日志顾名思义不是文本而是一种更有效率的二进制格式,它比文本占用更少的空间,但是可读性就很差了,必须使用mysqlbinlog工具才能转换为可读的文本。二进制日志主要用于数据库备份和故障时恢复数据,配置MySQL主从复制必须启用二进制日志。
    二进制日志索引文件中会列出所有二进制日志文件,此文件是文本的因此可以直接查看,文件的最后一行就是当前正在使用的二进制日志文件。
     
    启用和关闭
    show variables like 'log_bin' 可以查看当前数据库是否已经启用了二进制日志,ON表示启用,OFF表示未启用。show variables like 'log_bin_basename' 返回二进制日志基本文件名,show variables like 'log_bin_index' 返回二进制日志索引文件名。
    在MySQL配置文件中,[mysqld]下配置 log_bin 即可开启二进制日志,此时默认使用HOSTNAME-bin作为二进制日志的基本文件名,基本文件名加上一组顺序编号000001、000002...就是二进制日志文件名了,例如localhost-bin.000001。每次启动服务器、执行刷新日志命令(flush logs)以及二进制日志文件到达最大长度的时候,服务器会按顺序号生成下一个二进制日志文件,参数max_binlog_size决定了二进制日志最大长度。log_bin=xx指定了二进制日志基本文件名为xx。默认二进制日志索引文件名是二进制日志基本文件名加上.index,参数 log_bin_index可以指定二进制日志索引文件名,如果指定值没有扩展名,默认会加.index。
    关闭二进制日志只要删除相应配置即可。flush logs会关闭当前二进制日志文件并重新创建一个。
     
    格式
    二进制日志的格式有STATEMENT、ROW、MIXED,参数binlog_format 决定了使用何种格式。
    STATEMENT表示基于语句的格式,就是记录执行的语句,优点是减少了日志量,但是还必须记录执行语句时相关上下文信息,这很容易导致主从复制时语句执行出错。
    ROW表示基于行的格式,优点是不用再记录执行语句时的上下文,缺点是增加了记录量,每一条被修改过的行都要被记录,本来只要记录执行时的update语句,现在要记录所有被修改的行的update语句。
    MIXED是以上两种混合使用,由MySQL决定何时使用哪一种。
     
    查看
    使用mysqlbinlog工具,这个工具一般在MySQL安装目录的bin目录下。执行如下语句
    mysqlbinlog -vv --base64-output=decode-rows localhost-bin.000001,也可以重定向到外部文件中 mysqlbinlog -vv --base64-output=decode-rows localhost-bin.000001 >000001.txt。
  • 相关阅读:
    MySQL ERROR : The used command is not allowed with this MySQL version 解决办法
    Linux批量删除指定后缀的文件
    Hadoop 获取Input File的文件名
    Mahout的安装与配置
    【AIMP3】推荐一款Windows下的优质音乐播放器
    LeetCode 未验证规则
    Ubuntu更改用户名
    设计模式:单例模式(C++)
    C++ 四种类型转换
    switch-case内不能定义变量?
  • 原文地址:https://www.cnblogs.com/gjb724332682/p/8610167.html
Copyright © 2011-2022 走看看