zoukankan      html  css  js  c++  java
  • 17.1.4.3 Replication Slave Options and Variables 复制Slave 选项和变量

    17.1.4.3 Replication Slave Options and Variables 复制Slave 选项和变量

    Startup Options for Replication Slaves 启动选项用于复制

    Options for Logging Slave Status to Tables 选项用于记录Slave状态到表

    Obsolete Replication Slave Options 已过时的复制slave选项

    System Variables Used on Replication Slaves 系统变量用于复制Slaves

    在命令行或者选项文件里指定选项,很多的选项可以在服务器运行时设置,通过使用

    CHANGE MASTER TO 语句,指定系统变量使用SET:

    Server ID, 一个master 和每个slave, 你必须设置server-id

    启动选项用于复制slaves:

    这个章节解释启动选项用于控制复制slave servers, 很多的选项可以在服务器运行时设置

    通过使用CHANGE MASTER TO 语句,其他的,如 –replicate-* options,

    只能设置在slave server 启动的时候,复制相关的系统变量在本节稍后讨论:

    –abort-slave-event-count

    Command-Line Format –abort-slave-event-count=#
    Permitted Values Type integer
    Default 0
    Min Value 0

    当这个选项被设置为一些正数值除了0以外(0是默认值),它影响复制行为如下:

    当slave SQL thread 已经启动,value log events 是允许被执行,之后,

    slave SQL thread 不接收任何更多的event,就像网络连接从master被切断。

    slave thread 继续运行, SHOW SLAVE STATUS 的输出显示Yes 在 Slave_IO_Running and the Slave_SQL_Running columns,

    但是没有events 从relay log 读取

    这个选项是用于内部的通过MYSQL 复制测试和调试,它不是用于在生产设置中使用。

    –disconnect-slave-event-count

    Command-Line Format –disconnect-slave-event-count=#
    Permitted Values Type integer
    Default 0

    这个选项是用于内部的Mysql 复制测试和调试使用

    –log-slave-updates

    Command-Line Format –log-slave-updates
    System Variable Name log_slave_updates
    Variable Scope Global
    Dynamic Variable No
    Permitted Values Type boolean
    Default OFF

    通常,一个slave 不写它自己的binary log 任何的更新从master server接收。

    这个选项导致slave 写执行的更新通过它的SQL thread 到它自己的binary log.

    对于这个选项有任何影响, slave必须启动带 –log-bin option来启用binary logging.

    在MySQL 5.5之前,server 不能启动当使用–log-slave-updates 选项在没有启动–log-bin选项的时候。

    会报错,在MySQL 5.6,只会产生一个警告。

    –log-slave-updates 是用于当需要束缚复制servers.比如:

    你可能需要设置复制servers使用这样的安排:

    A -> B -> C

    在这里,一个slave B 也作为master,B 是slave C的master.为了让这个工作,B必须即是MASTER也是SLAVE.

    你必须在A和B上启动 –log-bin来启动binary logging, B使用 –log-slave-updates option

    以便从A接收到更新被B记录到它的binary log.

    –log-slow-slave-statements

    Removed 5.6.11
    Command-Line Format –log-slow-slave-statements (<= 5.6.10)
    Permitted Values Type boolean
    Default OFF

    当慢查询日志被启用,这个选项可以记录查询超过long_query_time 秒在slave上执行的SQL。

    命令行选项在MySQL 5.6.11版本中被删除, 被log_slow_slave_statements 变量替换。

    系统变量可以在命令行设置或者选项文件里,因为没有必要对于改变在服务器启动的时候,但是系统变量

    可以测试或者设置值在运行时。

    –log-warnings[=level]

    导致server记录更多的信息到错误日志, 相对于复制,服务器产生错误,它成功的重新连接在网络或者连接失败时,

    提供信息关于每个slave如何启动的,这个选项是启用的(1)

    | log_warnings | 1 默认是的1,

    关闭它 设置 –log-warnings=0. 如果这个值大于1, 中止的连接被写入到错误日志,

    连接拒绝的错误对于新的连接尝试也会被写入。

    注意:

    这个选项不影响复制,它提供了一些警告

    –master-info-file=file_name

    该文件用于记录slave中关于master的信息,默认名字是master.info 在数据目录下。

    –master-retry-count=count

    连接的次数 ,slave 尝试连接到master 在放弃之前。重连尝试的间隔是通过MASTER_CONNECT_RETRY 选项设置

    默认是(60),重连是被触发放数据通过slave读取超时 根据 –slave-net-timeout option.

    默认值是86400, 值为0意思是无限的

    –max-relay-log-size=size

    服务器轮流 relay log 文件的大小, 如果这个值是非0,relay log是自动轮流的 当

    它的大小超过这个值。如果这个值是0(默认的), relay log 轮流发生时有max_binlog_size决定的。

    –relay-log=file_name

    中继日志的base name, 默认的base name 是host_name-relay-bin.

    例如:mysqld-relay-bin.000044

    server 写文件在data 目录里,除非base name 是指定一个指向决定路径的特定的不同目录。

    server 按顺序创建relay log 文件通过增加一个数字后缀。

    由于方法在MySQL 解析server 选项,如果你指定这个选项,你必须提供一个值,

    默认的base name 是只用于如果这个选项没有实际指定。

    如果你使用–relay-log 选项没有指定值,则可能导致意外行为, 这个行为取决于其他选项的使用,

    它们被指定的顺序,是否它们在命令行或者选项文件被指定

    如果你指定这个选项,指定的值也用于base name 用于relay log index 文件。

    你可以覆盖这个行为通过指定一个不同的relay log index file 的base name 使用–relay-log-index 选项

    从MySQL 5.6.5开始,当server 从index file 读取一个entry,它检查entry是否包含一个相对的路径。

    如果它是,路径的相对部分被替换为决定路径 使用–relay-log选项 。

    绝对路径保持不变, 在这种情况下,一个Index 必须手动编辑来启用新的路径来被使用。

    –relay-log-index=file_name

    用于relay log index 文件的名字,默认的明治是host_name-relay-bin.index 在数据目录下,

    where host_name 是slave server 的名字。

    如果你指定这个选项,你必须提供一个值, 默认的base name 只用于当这个选项没有实际指定,

    如果你使用 –relay-log-index 选项没有指定这个值,则可能导致意外的行为,这个行为依赖于其他使用的选项,

    它们指定的顺序。

    如果你指定这个选项, 指定的值也用于base name用于relay logs.你可以覆盖这个行为通过指定一个不同的relay log 文件。

    –relay-log-info-file=file_name

    这个文件用于slave记录relay logs信息的文件,默认的名字是relay-log.info 在数据文件

    注意:信息也可以写入表

    –relay-log-purge={0|1}

    禁用或者启用自动清除relay log ,当它们不需要的时候 默认值是1(启用的).

    这个是全局变量 ,可以被动态的改变用GLOBAL relay_log_purge = N。

    –relay-log-recovery={0|1}

    启用自动的relay log recovery 立即紧接着server startup,恢复进程创建一个新的relay log 文件,

    初始SQL thread 位置到新的relay log,初始 I/O thread 到SQL thread 位置。

    从master 读取 relay log 然后继续 默认是关闭的(0)

    –relay-log-space-limit=size
    这个选项 设置一个上限对于所有的relay logs 在slave上单位是bytes, 0意味着没有限制。

    这是有用的 对于slaev server 主机只有有限的磁盘。 放限制达到时,I/O thread 停止读取binary log event

    from master server,直到SQL thread 已经追赶并删除一些没用的relay logs.

    注意 这个限制不是绝对的,有些情况下,SQL thread 需要更多的evnets 在它能删除relay logs前,

    在这种情况下, I/O thread 会超出限制直到它变的可用对于 SQL thread 删除一些relay logs

    因为不这么做 会导致一个deadlock.

    –replicate-do-db=db_name

    这个选项的效果取决于是基于语句的或者基于行的复制

    基于语句的复制, 告诉 slave SQL thread 来限制复制语句在默认的数据库里(即,你选择的那个数据库)

    指定一个或者多个数据库,使用选项多次,

    replicate-ignore-db = mysql
    replicate-ignore-db = information_schema

    然而, 这么做不会复制跨越数据库的语句 比如

    UPDATE some_db.some_table SET foo=’bar’ 当一个不同的数据库名字被选择

    继续测试:

    master 上执行:

    use zjzc;
    mysql> UPDATE mysql.user SET password=PASSWORD(‘kjk123’) WHERE user=’root’;
    Query OK, 4 rows affected (0.00 sec)
    Rows matched: 4 Changed: 4 Warnings: 0

    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    此时slave :
    slave:/root# mysql -uroot -p’1234567’
    Warning: Using a password on the command line interface can be insecure.
    ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

    报密码错误

    slave的密码也被修改:
    slave:/root# mysql -uroot -p’kjk123’
    Warning: Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 11

    注意:

    指定多个数据库 你不许使用多个选项的实例,因为数据库名字可能包含逗号,如果你提供的一个以逗号为分隔的列表

    被视为一个单一的数据库的名字。

    当使用基于语句复制时,如果slave 是带 –replicate-do-db=sales启动,你执行下面的语句在Master上

    UPDATE语句不会被复制:

    USE prices;
    UPDATE sales.january SET amount=amount+1000;

    主要的原因是这个检查默认的数据库的行为,它是很难的从一个单独的语句来确定是否需要复制

    (比如,如果你使用 multiple-table DELETE statements or multiple-table UPDATE statements that act across multiple

    databases)

    只能检查默认的数据库,而不是所有的数据库。

    基于行的复制, 告诉slave SQL thread to 限制复制到指定的数据库。

    只有表属于 db_name 被改变,当前的数据库没有影响。 假设这个slave是带 –replicate-do-db=sales

    和基于行的复制是生效的,西面的语句运行在Master上:

    USE prices;
    UPDATE sales.february SET amount=amount+100;

    在salves数据库的february表是被改变按照更新的语句,这会发生取决于是否USE 语句被执行,

    执行下面的语句在Master,在slave上没有影响 当使用基于行的复制和 –replicate-do-db=sales:

    USE prices;
    UPDATE prices.march SET amount=amount-25;

    即使语句USE prices;改为 USE sales,UPDATE 语句的影响仍旧不会被复制:

    另一个重要的区别是 –replicate-do-db是操作在 statement-based replication

    而不是基于行的复制 在涉及的多个数据库的语句。假设 slave是带h –replicate-do-db=db1启动,

    在master上执行下面的语句:

    USE db1;
    UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;

    如果你使用基于语句的复制, 那么两个表都会在slave上更新。

    然而,当基于行的复制,只有table1是有 影响的, 因为table2是不同的数据库,table 2在slave上是不会被UPDATE改变。

    现在假设,代替 USE db1 statement, a USE db4 statement had been used:

    USE db4;
    UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;

    在这种情况下,当使用基于语句的复制,更新语句不会对slave有影响。

    –replicate-ignore-db=db_name

    与 –replicate-do-db一样,这个选项的影响依赖取决于基于语句或者基于行的使用:

    基于使用语句的复制, 告诉slave SQL thread 不要复制任何语句,默认的数据库(你选择忽略的数据库)

    基于行的复制,告诉 slave SQL thread不要更新任何表 在数据库 db_name 默认是没有影响

    当使用基于语句的复制,下面的例子不按你期望那样,假设 slave 启动带–replicate-ignore-db=sales

    你指向下面的语句在master上:

    USE prices;
    UPDATE sales.january SET amount=amount+1000;

    UPDATE语句被复制在这种情况下,因为–replicate-ignore-db 只应用于默认数据库(有USE 语句决定)

    因为 salves数据库 在语句中明确的指定,语句没有被过滤

    然而,当使用基于行复制的情况下, UPDATE 语句 的效果不会传播给slave,slave的january 不会被改变。

    在这个情况下, –replicate-ignore-db=sales 会导致所有的改变 对master的copy ,会被slave忽略。

    –replicate-do-table=db_name.tbl_name

    创建一个辅助过滤通过告诉 slave SQL thread 限制复制一个给定的表,要指定多个表,

    使用多行,每行一个表。

    –replicate-ignore-table=db_name.tbl_name

    创建一个复制filter 通过告诉 slave SQL thread 不要复制任何语句(更新指定表)

    即使任何其他的表可能被更新通过相同的SQL。

    –replicate-rewrite-db=from_name->to_name

    告诉slave 来创建一个复制过滤器,转换默认的数据(你选择的那个)到 to_name

    如果它是from_name 在master上,只有语句涉及表被影响(不是CREATE DATABASE, DROP DATABASE, and ALTER DATABASE),

    只有如果from_name 是默认的数据库在master上,指定多个rewrites, 使用这个选项多次。

    –replicate-same-server-id

    在slave server上使用,通常你应该设置为默认值0

    –report-host=host_name

    slave的host name 或者IP地址 被汇报给master 在slave 注册期间。值出现在

    mysql> SHOW SLAVE HOSTS
    -> ;
    +———–+——+——+———–+————————————–+
    | Server_id | Host | Port | Master_id | Slave_UUID |
    +———–+——+——+———–+————————————–+
    | 137 | | 3306 | 135 | 4f927e9c-0a98-11e5-929d-000c295537c2 |
    | 136 | | 3306 | 135 | 76a55be4-cf9c-11e4-91fd-00163e003122 |
    +———–+——+——+———–+————————————–+
    2 rows in set (0.01 sec)

    不设置值 如果你不像要slave 注册本身到master.

    –report-password=password

    slave的 账户密码 被汇报给master 在slave注册期间,这个值可以通过SHOW SLAVE HOSTS 在master server上

    如果–show-slave-auth-info option选项被指定

    –skip-slave-start

    告诉 slave server 当sever启动的时候不启动

    Options for Logging Slave Status to Tables 记录slave 状态信息到table

    MySQL 5.6和后来的版本记录复制信息到表而不是文件, 把master info log和relay log info 信息能被单独配置

    使用server 选项文件。

    –master-info-repository={FILE|TABLE}

    这个选项会使服务器写master info log 信心到一个文件或者表, 文件的名字默认是master.info,

    你可以改变这个名字使用–master-info-file server option。

    默认值是问题,如果你使用TABLE,log 会被写到slave_master_info table 在你的mysql数据库里。

    –relay-log-info-repository={FILE|TABLE}

    此选项会导致server 记录它的relay log 信息到一个文件或者表, 文件的名字默认是 relay-log.info

    你可以改变文件的名字使用–relay-log-info server 选项:

    此选项 默认值是文件,如果你使用TABLE,log 被写入到 slave_relay_log_info table。

    已过时的复制Slave选项:

    下列选项在MySQL 5.5中删除,如果你试图启动mysqld 带这些选项,server 会中止报一个变量错误

    系统变量使用复制slaves:

    下面的列表描述了用于控制复制的系统变量,它们可以设置在server 启动的时候,有些可以在运行的时候改变

    init_slave:

    这个变量类似于 Init_connect, 但是是一个字符串被一个slave server 每次 SQL thread启动时执行。

    注意:

    The SQL thread 发送一个确认的给客户端在它执行Init_slave前,因此,它不能保证

    init_slave 已经被执行党START SLAVE返回时

    log_slow_slave_statements

    当慢查询日志启用,这个变量可以记录那些查询花费超过long_query_time_seconds 的sql 在slave上。

    master_info_repository
    这个变量是决定 是否slave 记录master的状态和连接信息到一个文件(master.info) 或者到一个表

    (mysql.slave_master_info).

    relay_log

    relay log 文件名字

    relay_log_basename

    保存名字和relay log file 完整路径

    relay_log_index

    relay log index 文件的名字,默认的名字是host_name-relay-bin.index 在数据目录,

    host_name 是slave server 的名字。

    relay_log_info_file

    文件的名字,slave记录relay logs 信息,默认的名字是relay-log.info 在数据目录下:

    relay_log_info_repository

    这个变量决定 slave的position 在relay logs 是写入到文件(relay-log.info)或者到一个表(mysql.slave_relay_log_info).

    relay_log_recovery

    启用自动的relay log 恢复在server启动后,

    | relay_log_recovery | ON |

    恢复 进程创建一个新的relay log 文件,初始化 SQL thread position 到这个新的relay log,

    初始化 I/O thread 到SQL thread position.

    从master 读取relay log 然后继续。在MySQL 5.6.5和更早的版本, 可以动态的改变这个值,

    在MySQL 5.6.6开始,它是只读的。

    无论MySQL什么版本,它的值可以被改变通过 –relay-log-recovery option,

    用于一个crash 在复制Slave 确保不可能算坏relay logs,必须用来保证一个crash-proof slave.

    默认是0 (关闭)

    当relay_log_recovery 启动,slave已经停止由于遇到错误,当运行在multi-threaded mode,

    你不能执行CHANGE MASTER TO 如果有任何日志间隔在日志文件里。

    rpl_stop_slave_timeout

    在MySQL 5.6.13以后, 你能控制时间的长度(单位秒),STOP SLAVE 等待在超时前 通过设置这个变量。

    这个可以用于避免死锁在STOP SLAVE和其他的slave SQL语句 使用不同的客户端连接到slave.

    sync_master_info

    这个变量的影响在复制slave上依赖 slave的master_info_repository设置为文件还是表,如下面:

    master_info_repository = FILE.如果 sync_master_info 值大于0,slave 同步它的mastr.info到磁盘

    (使用 fdatasync()) 在每个sync_master_info events,如果为0,MySQL server 不执行同步master.info文件到磁盘,

    代替的是,server 依赖操作系统来刷新它的内容周期性的 和其他任何文件。

    master_info_repository = TABLE. 如果 sync_master_info大于0,

    更新它的master info repository 表在每次sync_master_info events,如果为0 表永远不更新

    默认sync_master_info 是10000

    sync_relay_log

  • 相关阅读:
    linux上安装mysql
    linux 上nginx配置
    js人民币数字转大写
    pm2常用命令
    基于redis实现分布式锁
    Enterprise Architect 14破解版 安装包 安装教程
    一些有用的链接
    Linux安装Zookeeper
    根据朋友圈的网易云音乐分享找到人
    我的待做事项
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351320.html
Copyright © 2011-2022 走看看