17.1.4.4 Binary Log Options and Variables Binary Log

来源:互联网 发布:mysql导入xls文件 编辑:程序博客网 时间:2024/06/08 19:16

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,是不同步写磁盘的。

0 0
原创粉丝点击