特别声明:
所有的过滤规则不建议在主库上设置。
 
 

server_id

是一个整数,范围:1 至 power(2,32)-1 之间。
推荐使用端口号+ip最后一位的方式。
唯一区别ID,同一个集群不可重复,从5.6开始可动态修改。
 
server_uuid
唯一区别ID,同一个集群不可重复,从5.6开始可动态修改。
从5.6开始,系统根据函数自动生成唯一的一个值,默认存放在$datadir/auto.cnf  ,MySQL启动时,会判断auto.cnf文件是否存在,如果不存在auto.cnf文件就会创建。在gtid中用此参数标识一个server,而不是server_id。
cat auto.cnf 
[auto]
server-uuid=b16b53da-c1a1-11e6-915f-000c29355816
 
 
log_bin_index
mysql> show variables like 'log_bin_index';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| log_bin_index | /data/mysql/3306/logs/mysql-bin.index |
+---------------+---------------------------------------+
此参数与log_bin_basename 参数文件做的一个前缀。
mysql> show variables like 'log_bin_basename';
+------------------+---------------------------------+
| Variable_name    | Value                           |
+------------------+---------------------------------+
| log_bin_basename | /data/mysql/3306/logs/mysql-bin |
+------------------+---------------------------------+
 
此文件( /data/mysql/3306/logs/mysql-bin.index)可用vi等工具手工编辑。
cat /data/mysql/3306/logs/mysql-bin.index
/data/mysql/3306/logs/mysql-bin.000003
/data/mysql/3306/logs/mysql-bin.000004
/data/mysql/3306/logs/mysql-bin.000005
 
binlog_format
 
binlog日志格式:statement,row,mixed三种。
可动态修改。
生成环境建议使用row格式。
 
 
binlog_cache_size
binlog写入bugger。
建议设置值在1M-4M之间。
 
 
max_binlog_size
限制单个binlog大小。
默认是1G,在生产环境binlog文件生成要两分钟以上,此值推荐使用128M或者256M。
可动态修改。
 
 
 
sync_binlog
多少个SQL之后,调用fdatasync()函数刷新binlog到disk。
(fsync()和fdatasync()的区别是什么?fsync是完全刷新到磁盘,fdatasync值刷新数据,不刷新metedata。)
可动态修改。
交易系统为了安全,建议设置此值为1 。
 
 
 
expire_logs_days
binlog保存多少天。
可动态修改。
推荐此值设置为7天。
 
 
log_bin_trust_function_creators
开启binlog时,是否允许创建存储过程(除非有super权限,或者指定deterministic、reads sql data、no sql)
可动态修改。
推荐开启。
 
 
log_awrnings
如果政治设置的大于1,会在错误日志里看到异常断开的连接(Aborted connection )或者是被拒绝的请求。
 
binlog_row_image
5.6.2后出现。
full:
记录所有的行信息,和以前没有区别。
minimal:
只记录要修改的列的记录
noblob:
记录除了BLOB和TEXT之外的所有字段
注意,当binlog_format = statement的时候,不起作用;
= row的时候,完美支持;
= mixed 的时候,根据实际情况决定;
 
binlog_rows_query_log_events
5.6.2后出现。
 
在row模式下开启该参数,将把sql语句打印到binlog日志里面.默认是0(off);
虽然将语句放入了binlog,但不会执行这个sql,就相当于注释一样.但对于dba来说,在查看binlog的时候,很有用处.
 
基于MySQL 5.6 GTID的Crash Recover 
在5.6.23版本后才稳定。
 
传统复制也是支持的(前提是master_info_repository,relay_log_info_repository  两个值改为table )。
binlog_gtid_simple_recovery( 5.6.21 -5.6.23) 这个功能刚出来不久,在挂掉时,可以找到自己同步到哪里,完成的同步的GTID上接着同步,重新拉一下日志。
如果没启用这个特性,会从binlog全部搜索一下,如果日志很多,需要占用的时间比较多。
 
binlogging_impossable_mode ->binlog_error_action
binlog_error_action 当不能写binlog时,可以爆出来错,默认没开启:IGNORE_ERROR。
 
 
特别说明
5.6.5,5.7.5以后binlog v2格式,引入了GTID,主库是5.5从库是5.6是OK的,但是5.6到5.5或者5.7到5.6是同步不了的,会报错,如果相兼容的话,需要设置两个参数(分别是binlog_checksum=none和log_bin_use_v1_row_events=on)
 
binlog-do-db
binlog记录db,除此外,其他db上的binlog都不记录,存在风险。
use mysql;update db1.t1 set user='user2' where id=1; 这个SQL会记录到binlog里面么?
SBR模式下,这个SQL就不会记录binlog,会导致主从不一致,而在RBR/MBR模式下,则会被记录。
类似CREATE TABLE mydb3.mytable1 like mytable1,则会一如既然的记录binlog,只有INSERT/UPDATE/DELETE不会被记录。
 
binlog-ignore-db
和binlog-do-db规则相反。
se mysql;update db1.t1 set user='user2' where id=1; 这个SQL会记录到binlog里面么?
SBR模式下,这个SQL就不会记录binlog,会导致主从不一致,而在RBR/MBR模式下,则会被记录。
类似CREATE TABLE mydb3.mytable1 like mytable1,则会一如既然的记录binlog,只有INSERT/UPDATE/DELETE不会被记录。
 
max_binlog_cache_size
binlog最大的cache size,有大SQL写入时需要用到,或者大数据LOAD DATA时。
 
binlog_stmt_cache_size
用于cache那些事务中非事务表产生的SQL语句,如果经常在事务中涉及到非事务表,需要加大该参数。
 
binlog_direct_non_transactional_updates 
事务中既有事务表也有非事务表的情况下,发生数据变更时,非事务表会直接写binlog,而不是也和事务表一样缓存在buffer中。
这个参数只影响SBR模式,RBR/MBR不影响。
 
gtid_mode
用于控制是否启用GTID。
如果设置成ON,则必须是log_bin,log_slave_updates,enforce_gtid_consistency 也要启用。
 
enforce_gtid_consistency 
如果开启了GTID必须把这个参数选项打开。
用于控制只有是事务安全的语句才能被记录到log中。
 
gtid_next
5.6.5后出现。
用来表示下一个要执行的事务,设置这个变量需要由SUPER权限。
 
gtid_purged
用于指定哪个事务从binlog忽悠了,reset master这个值会被清空。
 
gtid_executed
执行到gtid号及所有执行过gtid号,和executed_gtid_set(show master status,show slave status )输出的这列意思是一样的。
reset master这个值会被清空。