二进制日志

二进制日志记录描述数据的更改事件(如表创建操作或表数据更改)。

作用
1、复制源服务器上的二进制日志到副本数据库,副本数据库执行该事件,使两边数据一致性
2、数据恢复(增量恢复/增量备份),将数据以事件方式进行记录备份

二进制日志不会记录对数据无修改操作的语句,如:select 、show 。查询语句日志可参考 mysql常规日志/慢日志。二进制日志启用后会略微影响数据库服务器的性能(数据复制、数据恢复还是比较重要)。

启动二进制日志

一、
开启二进制日志

--log-bin[=name]    
			 Log update queries in binary format. Optional (but
			strongly recommended to avoid replication problems if
			server's hostname changes) argument should be the chosen
			location for the binary log files.

log-bin 指定二进制日志文件路径及名称,若未指定名称,将默认使用pid-file 选项名称(pid-file 默认名称为主机的名称),若为指定路径,将默认将二进制日志文件存储到数据目录。
名称不应该有扩展名。
二进制日志文件并非只有一个,在出现一下情况的时候,服务器会创建新的二进制日志文件,并且在日志文件末尾叠加数字编号
1、服务器启动或者重启
2、日志刷新操作
3、二进制日志文件大小达到 max_binlog_size 值(在满足事务完整性的前提下触发该条件)

例:

log-bin=binlog_mysql

日志文件

binlog_mysql.000001
	 binlog_mysql.000002
	 binlog_mysql.000003
	 binlog_mysql.index

log-bin=binlog_mysql 配置还会创建一个日志文件的索引文件:binlog_mysql.index。该文件记录所有二进制日志文件信息。

二、
日志记录格式

--binlog-format=name 
                      What form of binary logging the master will use: either
                      ROW for row-based binary logging, STATEMENT for
                      statement-based binary logging, or MIXED. MIXED is
                      statement-based binary logging except for those
                      statements where only row-based is correct: those which
                      involve user-defined functions (i.e. UDFs) or the UUID()
                      function; for those, row-based binary logging is
                      automatically used. If NDBCLUSTER is enabled and
                      binlog-format is MIXED, the format switches to row-based
                      and back implicitly per each query accessing an
                      NDBCLUSTER table

二进制日志记录格式分为三种;
1、基于操作语句的记录格式;

binlog-format=STATEMENT

2、基于行记录格式;

binlog-format=ROW

3、混合格式,既有语句也有行格式记录

binlog-format=MIXED

在基于语句格式记录并做数据复制的时候;若无法保证语句的事务安全性,服务器将提示安全警告。可以使用行记录来规避此情况;

三、
服务ID

--server-id=#       
  Uniquely identifies the server instance in the community of replication partners

此变量指定服务器 ID,在 MySQL 5.7 中,如果启用二进制日志记录未配置该变量,服务器将无法启动。
默认情况下该值为 ’0‘.

类型			整数
默认值			0
最小值			0
最大值			4294967295

配置文件 mysqld 组示例:

binlog-format=MIXED   		#采用混合模式记录二进制日志(行格式、语句格式)
log-bin=binlog_mysql		#二进制日志名称为 binlog_mysql,默认存放于数据库的数据目录
server-id=1 				#数据库的服务ID为 1

至此已经成功配置二进制日志开启必要条件;重启服务器后生效。

此时数据库服务器是记录服务器下所有库的操作日志,若只需要记录某个库 或者 不记录某个库;
记录给定的数据库 binlog-do-db=name;
排除给定的数据库 binlog-ignore-db=name ;
若需要配置多个库;需要配置多次该选项