zoukankan      html  css  js  c++  java
  • 17.1.4.4 Binary Log Options and Variables Binary Log

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

  • 相关阅读:
    全新通用编程语言 Def 招募核心贡献者、文档作者、布道师 deflang.org
    全球最快的JS模板引擎:tppl
    4行代码实现js模板引擎
    [Node.js框架] 为什么要开发 Codekart 框架
    Android用BusyBox替换系统toolbox
    纪念一下,昨天换手机了
    在Android上使用gcc编译C/C++源程序
    关于BAPI_ACC_DOCUMENT_POST解读
    关于ABAP和JSON互相转换
    关于客户和供应商预制凭证添加WBS字段
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351319.html
Copyright © 2011-2022 走看看