用于记录对mysql数据库真正执行更改的所有操作(DML语句),不包含那些没有修改任何数据的语句,即select show这样的语句,开启全量日志即可记录这些语句。

作用

  1. 主从复制。在主服务器上把所有修改数据的操作记录到binlog中,然后发送给服务器完成主从同步
  2. 进行恢复操作。使用mysqlbinlog命令基于时间点和位置的恢复数据。

配置参数log-bin=[filename]可以启动二进制日志,默认(不命名filename的情况下)以主机名来作为二进制日志的文件名。
二进制日志文件默认存储在数据目录(/data/mysql/)下。数字后缀名就是其序列号,按顺序排列

在mysql shell中:

  • show binary logs—列出当前binlog文件及值大小
  • show master status—查看当前日志及状态

相关参数

  • max_binlog_size—单个binlog最大值,从mysql5.0开始,该值默认为1GB(建议调整为256MB)
  • binlog_cache_size—决定记录未提交事务的缓存大小,默认为32KB。该参数是基于会话的,即一个线程要开始一个事务时,会自动被分配一个跟该参数值一致的缓存。
    • show global status like ‘%binlog_cache%’ 查看使用情况判断参数值合理性,如果binlog_cache_disk_use=0,即没有使用磁盘上的临时文件。
    • 生产环境中设置为1-4MB.
  • binlog_format—代表二进制日志的格式,分为三种:
    • statement(SBR)—基于操作的SQL语句记录到binlog中。mysql5.1之前都是默认这个格式,不建议在生产环境中使用。其优点是减少binlog日志量,节约I/O;缺点是在某些情况下会导致主从节点数据不一致。
    • row(RBR)—基于行的变更情况记录,会记录行变更前的样子及变更后的内容。生产环境中推荐使用。其优点是对主从复制可靠(只记录哪条数据被修改和被修改后的结果)。在mysql5.6后,使用新增的binlog_rows_query_log_events参数,也可以在row模式下看见用户的完整sql语句
    • mixed—混合使用以上两种格式。在mysql5.1时是statement和row的一个过渡模式。不建议使用
  • sync_binlog—影响binlog的刷新
  • expire_logs_days—二进制日志过期时间(天)
  • binlog-do-db&binlog-ignore-db — 需要/忽略写入哪些库的日志,默认为空,即将所有库的日志同步到二进制日志
  • log_slave_updates — 该配置开启时,relay_log的改变会通过log_slave_update写入到从机的binlog中
  • binlog_checksum—校验写入的binlog,可以填入none,mysql5.6.6后默认值为crc32
  • log_bin_use_v1_row_events—binlog版本信息,mysql5.6.6之后默认使用Version 2 binary log,因此该参数显示为off
  • binlog_row_image—该配置是基于RBR复制下,每一个数据行更改事件会包含两个image,有三个参数值可以配置这些image记录的信息:
    • full—全部记录
    • minimal—只记录要修改列的记录
    • noblob—默认值,记录除了blog和text的所有字段

      输出binlog的方法

      binlog文件是无法直接用cat、head、tail等命令查看的,需要通过mysqlbinlog命令查看二进制日志,把日志转化格式后输出到bin.log文件中。
      /usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /data/mysql/mysql-binlog.000001 > ./bin.log