用于记录对mysql数据库真正执行更改的所有操作(DML语句),不包含那些没有修改任何数据的语句,即select show这样的语句,开启全量日志即可记录这些语句。
作用
- 主从复制。在主服务器上把所有修改数据的操作记录到binlog中,然后发送给服务器完成主从同步
- 进行恢复操作。使用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记录的信息: