17.1.4.4 Binary Log Options and Variables Binary Log 选项和变量
Startup Options Used with Binary Logging
System Variables Used with Binary Logging
你可以使用mysqld 选项和系统变量在这个章节描述的来影响binary log的操作以及控制哪些语句被写入到binary log.
关于binary log 额外的信息请参见第5.2.4,“二进制日志”。更多信息关于使用MySQL服务器选项和系统变量,见第,“服务
器命令选项”,和第5.1.4,服务器“系统变量”。
Binary logging 使用的启动选项:
下面的列表描述了 启动选项用于启动和配置binary log,在本节后面讨论了二进制日志记录的系统变量。
–binlog-row-event-max-size=N
指定基于黄的binary log event 的最大大小,单位bytes. 记录被分组成很小的events 如果可能的话。
这个值是256,默认是8192 在MySQL 5.6.6
–log-bin[=base_name]
启用binary logging, server 记录改变数据的所有的语句到binary log.
用于备份和复制。
如果选项的值给定, 是log sequence 的base name,server按顺序的创建binary log 文件
通过增加一个数字后缀到basename. 推荐你指定一个base name ,否则mysql 使用host_name-bin作为base name
在MySQL 5.6.5 和以后的版本, 当server 需要读取一个entry 从index file,
它会检查 entry 是否包含一个相对路径,如果有,相对路径的部分替换为绝对路径的部分设置使用–log-bin选项。
绝对路径保持不变,在这种情况下,一个index 必须手动编辑来启动新的路径或者来使用路径。
设置这个选项使log_bin 系统变量为ON或者1,不是base name.
–log-bin-index[=file_name]
binary log 文件的名字,如果你忽略文件名,而且你没有指定–log-bin,MySQL 使用host_name-bin.index 作为文件名。
–log-bin-trust-function-creators[={0|1}]
此选项设置相应的 log_bin_trust_function_creators 系统变量,如果没有参数指定,
这个选项设置变为为1,log_bin_trust_function_creators 影响MySQL 如何执行限制存储函数或者触发器创建。
–binlog-do-db=db_name
此选项会影响binary logging 在master上 类似 –replicate-do-db一样影响复制:
此选项的效果取决于是基于语句的或者是基于行的日志格式的使用, 以相同的方式,–replicate-do-db
依赖基于语句的或者基于行的复制的使用。你应该记住,格式用于记录一个给定的语句可能不需要相同
和binlog_format 显示的值。 比如,DDL 语句比如CREATE TABLE and ALTER TABLE 总是记录为语句的,
没有考虑日志格式的影响, 因此下面的基于语句的规则 –binlog-do-db 总是应用 不管语句是否被记录。
基于语句的日志记录,只有那些语句被写入binary log 当默认的数据库是db_name(你选择的那个)
为了指定一个或者多个database,使用这个选项多行,然而这样做不会造成cross-database 语句
比如:
UPDATE some_db.some_table SET foo=’bar’ 会被记录,当一个不同的数据库被选择。
警告:
要指定多个数据库,你必须使用多个实例。因为database name 可能包含逗号.
一个例子 不工作的情况 ,你可能起到当使用基于语句的,如果 server 启动带 –binlog-do-db=sales
你执行下面的语句, UPDATE语句不会被记录:
USE prices;
UPDATE sales.january SET amount=amount+1000;
主要的原因是”只是检查默认的数据库”行为,它很难从单独的语句知道,是否需要复制(
比如,你使用多个表DELETE语句或者多个表UPDATE语句,跨越多个数据库)
它只是检查默认的数据库相比所有的数据库。
另外一种情况肯呢过不是自治的,当给定一个数据库 是被复制的,尽管它没有被指定当设置这个选项时.
如果server启动带 –binlog-do-db=sales,下面的语句会被记录尽管price数据库没有包括在binlog-do-db里
USE sales;
UPDATE prices.discounts SET percentage = percentage + 10;
因为 sales是默认的数据,当UPDATE语句执行时,UPDATE被记录:
基于行日志记录, logging 是被限制为db_name.只有改变属于db_name的表才会被记录,
默认的数据库这时没有起作用。假设 server is started with –binlog-do-db=sales
下面的语句被执行:
(这种情况默认数据库不起作用):
USE prices;
UPDATE sales.february SET amount=amount+100;
修改sales数据库的february表会被记录, 这个发生不管是否使用USE 语句,然后,当使用基于行的记录和-binlog-do-db=sales,
下面的SQL 不会被记录:
USE prices;
UPDATE prices.march SET amount=amount-25;
即使USE prices 被改变USE salves, UPDATE语句仍旧不会记入到binary log.
另外一个重要的区别 –binlog-do-db 处理基于语句的logging相对于基于行的记录 涉及的语句涉及多个数据库,
假设 started with –binlog-do-db=db1, and the following statements are executed:
USE db1;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;
如果使用基于语句的logging, 两个表的更新都会记录到binary log,然后当使用基于行的格式,
只有对表table 1的改变会被记录, table2是不同的数据库,不会被UPDATE改变。
现在假设,而不是使用db1语句,使用db4声明已被使用:
USE db4;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;
在这种情况下,当使用基于语句的logging UPDATE语句不会写入到binary log.然而, 当使用基于行的记录时,
对table 1的改变会被记录, table2不会记录。换句话说,只会改变表在数据库记录在–binlog-do-db
默认数据库(use 数据库) 不会启作用
System Variables Used with Binary Logging Binary logging 使用的系统变量:
下面的列表描述系统变量用于控制binary logging, 它们可以在server 启动的时候设置
有些变量可以在运行的时候设定,通过SET设置。
binlog_cache_size:
mysql> show variables like ‘%binlog_cache%’;
+———————–+———————-+
| Variable_name | Value |
+———————–+———————-+
| binlog_cache_size | 131072 |
| max_binlog_cache_size | 18446744073709547520 |
+———————–+———————-+
这个cache的大小,保留改变到binary log 在一个事务期间, 一个binary log cache 被分配给每个客户端
如果server 支持任何事务存储引擎且事务启用了bianry log.
如果你经常使用大事务, 你可以增加这个值得到更好的行能。
Binlog_cache_use and Binlog_cache_disk_use
binlog_cache_size 只设置事务cache的大小, 语句的cache是通过 binlog_stmt_cache_size设置:
binlog_format:
该变量设置binary logging 格式, 可以是STATEMENT, ROW, or MIXED.
binlog_format 可以通过 –binlog-format option 在启动时设置,或者binlog_format 变量在运行时。
注意:
当你改变logging 格式在运行时,它是不推荐的,你改变它当复制是进行的。
这个是由于 slaves不尊重master的binlog_format 设置,一个给定的MySQL Server 只能改变它自己的logging format.
在MySQL 5.6,默认的格式是基于语句的, 例外,在MySQLCluster NDB 7.3后,默认是混合;基于语句的复制不支持MySQL集群。
你必须有SUPER 权限来设置全局或者SESSION binlog_format 值:
当MIXED 被指定, 基于语句的复制被使用, 除了只有基于行的复制被保证导致正确的结果。
比如, 这个发生在当语句使用了用户自动的函数(UDF)或者UUID()函数。
此规则的例外是,混合模式总是使用基于语句的复制对于存储函数和触发器。
log_bin
当binary log 是被启用,如果–log-bin 选项被使用, 变量值是ON.
max_binlog_cache_size:
如果一个事务需要比这个个多的内存, server 生成一个多语句事务需要比’max_binlog_cache_size’ 多的bytes
最小值是4096,最大值是16EB
mysql> show variables like ‘%max_binlog_cache_size%’;
+———————–+———————-+
| Variable_name | Value |
+———————–+———————-+
| max_binlog_cache_size | 18446744073709547520 |
+———————–+———————-+
1 row in set (0.00 sec)
max_binlog_cache_size 设置 只设置事务cache 的大小,上限是有max_binlog_stmt_cache_size系统变量决定。
mysql> show variables like ‘%max_binlog_size%’;
+—————–+———–+
| Variable_name | Value |
+—————–+———–+
| max_binlog_size | 536870912 |
+—————–+———–+
1 row in set (0.00 sec)
512M
如果写一个binary log 导致当前的日志文件大小超过这个变量的值, server 将切换binary logs(
关闭当前的文件,打开下一个文件) 最小是4096 bytes,最大和默认值是1GB。
一个事务被写到一个chunk 到binary log, 所以它不会在多个Binary logs之间分割。
因此,如果有大的事务,你可能会看到binary logs files 大于max_binlog_size
sync_binlog
如果这个值设置大于0, MySQL server 同步它的binary log 到磁盘在sync_binlog 对应值的提交次数被写入到
binary log
默认的sync_binlog是0,是不同步写磁盘的。