二进制日志
二进制日志记录描述数据的更改事件(如表创建操作或表数据更改)。
作用
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 ;
若需要配置多个库;需要配置多次该选项