二进制日志二进制日志记录了对数据库执行更改的所有操作 , 但是不包括select和show这类操作 , 因为这类操作对数据本身并没有修改 , 如果你还想记录select和show操作 , 那只能使用查询日志了 , 而不是二进制日志 。
此外 , 二进制还包括了执行数据库更改操作的时间和执行时间等信息 。二进制日志主要有以下几种作用:
- 恢复(recovery):某些数据的恢复需要二进制日志 , 如当一个数据库全备文件恢复后 , 我们可以通过二进制的日志进行 point-in-time的恢复
- 复制(replication) : 通过复制和执行二进制日志使得一台远程的 MySQL 数据库(一般是slave 或者 standby) 与一台MySQL数据库(一般为master或者primary) 进行实时同步
- 审计(audit):用户可以通过二进制日志中的信息来进行审计 , 判断是否有对数据库进行注入攻击
[mysqld]log-bin
mysql> show variables like 'datadir';+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| datadir | /var/lib/mysql/ |+---------------+-----------------+1 row in set (0.00 sec)
mysqld-bin.000001即为二进制日志文件 , 而mysqld-bin.index为二进制的索引文件 , 为了管理所有的binlog文件 , MySQL额外创建了一个index文件 , 它按顺序记录了MySQL使用的所有binlog文件 。如果你想自定义index文件的名称 , 可以设置 log_bin_index=file参数 。-rw-rw---- 1 mysql mysql 120 Aug 21 16:42 mysqld-bin.000001-rw-rw---- 1 mysql mysql 20 Aug 21 16:42 mysqld-bin.index
查看二进制日志文件对于二进制日志文件来说 , 不像错误日志文件 , 慢查询日志文件那样用cat , head, tail等命令可以查看 , 它需要通过 MySQL 提供的工具 mysqlbinlog 。如:[root@iz2zeaf3cg1099kiidi06mz mysql]# mysqlbinlog mysqld-bin.000001/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019 SET @@session.max_insert_delayed_threads=0*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4#180821 16:42:53 server id 1 end_log_pos 120 CRC32 0x3e55be40 Start: binlog v 4, server v 5.6.39-log created 180821 16:42:53 at startup# Warning: this binlog is either in use or was not closed properly.ROLLBACK/*!*/;BINLOG 'jdB7Ww8BAAAAdAAAAHgAAAABAAQANS42LjM5LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACN0HtbEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAUC+VT4='/*!*/;DELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
二进制日志文件配置参数下面比较简要介绍下二进制日志文件几个重要的配置参数max_binlog_size
可以通过max_binlog_size参数来限定单个binlog文件的大小(默认1G)
binlog_cache_size
当使用事务的表存储引擎(如InnoDB存储引擎)时 , 所有未提交(uncommitted)的二进制日志会被记录到一个缓冲中去 , 等该事务提交(committed)时 , 直接将缓存中的二进制日志写入二进制日志文件中 , 而该缓冲的大小由binlog_cache_size决定 , 默认大小为32K 。
此外 , binlog_cache_size 是基于会话(session)的 , 当每一个线程开启一个事务时 , MySQL会自动分配一个大小为 binlog_cache_size 的缓存
mysql> show variables like 'binlog_cache_size';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| binlog_cache_size | 32768 |+-------------------+-------+1 row in set (0.00 sec)
sync_binlog在默认情况下 , 二进制日志并不是在每次写的时候同步到磁盘 。参数 sync_binlog = [N] 表示每写缓冲多少次就同步到磁盘 。如果将N设置为1 , 即 sync_binlog = 1表示采用同步写磁盘的方式来写二进制日志 , 这时写操作就不用向上面所说的使用操作系统的缓冲来写二进制日志
推荐阅读
- 分析2.5万篇博客后,来看看后端程序员每天都在写什么
- 炎炎夏日必备七歀凉饮 清淡养生促健康
- 轻巧简约,超强待机!家装网盘必备~优越者S105A硬盘底座拆机简评
- 程序员当独立开发者开发几个月的作息及收支等总结体会
- 家常土豆饼
- 含完整源代码和开发文档 人工智能图像识别绘本阅读方案
- Redis企业级开发与运维-初识Redis
- 要成为一名成功的开发人员,您应该放弃的22件事
- 聊聊Spring boot2.X开发环境搭建和基本开发
- 冬天吃什么早餐?推荐几款必备的御寒早餐