可能会影响性能,默认不启用。
启用二进制日志功能,需要在my.cnf文件中进行配置。
记录所有更改数据的语句,也包含可能修改数据的语句。 还记录了语句执行了多久,所消耗的资源以及相关的事务信息。
1.开启二进制日志功能
格式:--log-bin[=base_name]
如果没有设置base_name的具体值,默认是使用pid-file选项的值表示(默认是hostname-bin的格式)
如果设置了base_name的值,但是没有使用绝对路径,则产生的二进制日志位于数据目录下。
不需要指定扩展名,如果加了扩展名,会被mysqld忽略。mysqld会自动为二进制日志添加一串数字作为扩展名
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql> show variables like 'log_bin_basename'; +------------------+--------------------------+ | Variable_name | Value | +------------------+--------------------------+ | log_bin_basename | /var/mysql/log/mysql-bin | +------------------+--------------------------+ 1 row in set (0.00 sec) mysql>
2.与二进制日志相关的参数
·max_binlog_size :
binlog的最大存储上限。达到上限后,会重新创建一个binlog文件。
·binlog-do-db=db_name:
显式指定某个数据库需要开启binlog功能。如果设置了该参数的值,会忽略对其它数据库开启binlog功能。这里的db_name是指查询发生的数据库,而不是数据存储的数据库。
·binlog_ignore_db=db_name:
显示指定某个数据库不开启binlog功能。这里的db_name是指查询发生的数据库,而不是数据存储的数据库。
3.二进制日志索引文件
格式: --log-bin-index[=file_name]
二进制日志索引文件记录二进制日志信息。默认情况下,和二进制日志有相同的名称,扩展名为.index。 在mysql运行时,不要手动编辑该文件
mysql> show variables like 'log_bin_index'; +---------------+--------------------------------+ | Variable_name | Value | +---------------+--------------------------------+ | log_bin_index | /var/mysql/log/mysql-bin.index | +---------------+--------------------------------+ 1 row in set (0.00 sec) mysql>
4.二进制日志分析 mysqlbinlog工具对二进制日志进行分析
5.二进制日志的格式
格式参数:binlog-format=[value] (有三种格式取值:statement、row、mixed)
--binlog-format=statement:语句形式的二进制日志主要用于日志复制。
--binlog-format=row:只是记录了各个表中受到影响的行
--binlog-format=mixed:结合了上面两种特性
mysql> show variables like 'binlog_format'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | ROW | +---------------+-----------+ 1 row in set (0.00 sec) mysql>
可以在配置文件中进行设置,也可以在mysql运行过程中设置(global、session级别)
mysql> SET GLOBAL binlog_format = 'STATEMENT'; mysql> SET GLOBAL binlog_format = 'ROW'; mysql> SET GLOBAL binlog_format = 'MIXED'; mysql> SET SESSION binlog_format = 'STATEMENT'; mysql> SET SESSION binlog_format = 'ROW'; mysql> SET SESSION binlog_format = 'MIXED';
6.如果存在临时表,在mysql运行过程中,不建议改变复制格式。
因为只有基于statement格式复制的时候临时表才会被计入日志。
如果是mixed格式的,也会对临时表产生日志,但是对用户定义的function和uuid()函数不会产生日志。
即使是row格式,DDL语句也还是使用statement格式。
7.MIXED格式的二进制日志运行在mixed模式下时,遇到以下情形时候,会自动从statement切换到row模式
(1)DML语句更新NDBCLUSTER表
(2)function包含uuid()函数
(3)5.1.40版本之前,当2个或者2个以上的表含有auto_increment列被更新
(4)进行了insert delayed操作
(5)调用用户自定义函数
(6)If a statement is logged by row and the session that executed the statement has any temporary tables, logging by row is used for all subsequent statements (except for those accessing temporary tables) until all temporary tables in use by that session are dropped.