10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.9 mb
PDF (A4)- 42.0 mb
手册页(TGZ)- 266.1 kb
手册页(邮政编码)- 376.0 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

17.1.6.2复制源选项和变量

介绍可以在复制源服务器上使用的服务器选项和系统变量。控件上指定选项命令行或者在一个选择文件.您可以使用

在源和每个副本上,您必须设置server_id系统变量来建立唯一的复制ID。对于每个服务器,应该在1到2之间选择一个唯一的正整数32−1,且每个ID不能与复制拓扑中其他源或副本正在使用的ID相同。例子:服务器id = 3

有关源上用于控制二进制日志记录的选项,请参见第17.1.6.4节,“二进制日志选项和变量”

复制源服务器的启动选项

下面的列表描述了控制复制源服务器的启动选项。本节稍后将讨论与复制相关的系统变量。

用于复制源服务器的系统变量

以下系统变量用于复制源服务器或复制源服务器:

  • auto_increment_increment

    命令行格式 ——auto-increment-increment = #
    系统变量 auto_increment_increment
    范围 全球、会话
    动态 是的
    SET_VAR提示应用 是的
    类型 整数
    默认值 1
    最小值 1
    最大值 65535

    auto_increment_increment而且auto_increment_offset用于循环(源到源)复制,并可用于控制操作AUTO_INCREMENT列。这两个变量都有全局值和会话值,并且每个变量都可以假定1到65,535之间的整数值。如果将这两个变量中的任何一个的值设置为0,则会将其值设置为1。如果试图将这两个变量中的任何一个的值设置为大于65,535或小于0的整数,则会将其值设置为65,535。的值auto_increment_incrementauto_increment_offset对于非整型值会产生错误,变量的实际值保持不变。

    请注意

    auto_increment_increment也支持使用NDB表。

    从MySQL 8.0.18开始,设置这个系统变量的会话值不再是受限制的操作。

    当在服务器上启动组复制时,auto_increment_increment的值改变为group_replication_auto_increment_increment,默认值为7auto_increment_offset修改为服务器ID。停止组复制时将恢复更改。只有在以下情况下才会进行和恢复这些更改auto_increment_increment而且auto_increment_offset它们的默认值都是1。如果它们的值已经从默认值修改过,则组复制不会更改它们。从MySQL 8.0开始,当Group Replication处于单主模式(只有一个服务器写操作)时,也不会修改系统变量。

    auto_increment_increment而且auto_increment_offset影响AUTO_INCREMENT列行为如下:

    • auto_increment_increment控制连续列值之间的间隔。例如:

      mysql>显示auto_inc%+--------------------------+-------+ | Variable_name |值  | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1  | +--------------------------+-------+ 2行集(0.00秒)mysql > CREATE TABLE autoinc1 - > (col INT NOT NULL AUTO_INCREMENT主键);mysql> SET @@auto_increment =10mysql>显示变量:auto_inc%;+--------------------------+-------+ | Variable_name |值  | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 1  | +--------------------------+-------+ 2行集(0.01秒)mysql >插入autoinc1值(空),(零),(零),(零);查询mysql> SELECT col FROM autoinc1;+-----+ | 上校  | +-----+ | 21 11 | 1 | | | | | 31  | +-----+ 4行集(0.00秒)
    • auto_increment_offset的起始点AUTO_INCREMENT列值。考虑下面的情况,假设这些语句在与描述中给出的示例相同的会话中执行auto_increment_increment

      mysql >设置@@auto_increment_offset = 5;mysql>显示变量:auto_inc%;+--------------------------+-------+ | Variable_name |值  | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 5  | +--------------------------+-------+ 2行集(0.00秒)mysql > CREATE TABLE autoinc2 - > (col INT NOT NULL AUTO_INCREMENT主键);INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);查询mysql> SELECT col FROM autoinc2;+-----+ | 上校  | +-----+ | 25 15 | 5 | | | | | 35  | +-----+ 4行集(0.02秒)

      当的值auto_increment_offset的值大于auto_increment_increment的价值auto_increment_offset将被忽略。

    如果更改了这两个变量中的任何一个,那么将新行插入到包含AUTO_INCREMENT列,结果似乎违反直觉,因为系列AUTO_INCREMENT计算值时不考虑列中已经存在的任何值,插入的下一个值是序列中大于中现有最大值的最小值AUTO_INCREMENT列。这个级数是这样计算的:

    auto_increment_offset+N×auto_increment_increment

    在哪里N是序列[1,2,3,…]中的正整数。例如:

    mysql>显示auto_inc%+--------------------------+-------+ | Variable_name |值  | +--------------------------+-------+ | 10 auto_increment_increment | | | auto_increment_offset | 5  | +--------------------------+-------+ 2行(0.00秒)mysql >选择坳autoinc1;+-----+ | 上校  | +-----+ | 21 11 | 1 | | | | | 31  | +-----+ 4行集(0.00秒)mysql >插入autoinc1值(空),(零),(零),(零);查询mysql> SELECT col FROM autoinc1;+-----+ | 上校  | +-----+ | 21 11 | 1 | | | | | | 31日35 | | | 45 | | 55 | | 65年  | +-----+ 8行集(0.00秒)

    的值auto_increment_increment而且auto_increment_offset生成系列5 +N× 10,即[5,15,25,35,45,…]。中出现的最大值上校列之前的插入是31,下一个可用的值是AUTO_INCREMENTSeries是35,因此插入的值上校从该点开始,结果如下所示选择查询

    将这两个变量的影响限制在一个表中是不可能的;这些变量控制所有的行为AUTO_INCREMENT所有MySQL服务器上的表。如果设置了这两个变量的全局值,那么它的影响将持续到全局值被更改或通过设置会话值覆盖为止mysqld重新启动。如果设置了本地值,则新值会影响AUTO_INCREMENT在会话期间由当前用户插入新行的所有表的列,除非值在会话期间被更改。

    默认值auto_increment_increment是1。看到第17.5.1.1节,“复制和自增”

  • auto_increment_offset

    命令行格式 ——auto-increment-offset = #
    系统变量 auto_increment_offset
    范围 全球、会话
    动态 是的
    SET_VAR提示应用 是的
    类型 整数
    默认值 1
    最小值 1
    最大值 65535

    该变量的默认值为1。如果保持默认值,并且在多主模式下在服务器上启动Group Replication,则将其更改为服务器ID。有关更多信息,请参见的描述auto_increment_increment

    请注意

    auto_increment_offset也支持使用NDB表。

    从MySQL 8.0.18开始,设置这个系统变量的会话值不再是受限制的操作。

  • immediate_server_version

    介绍了 8.0.14
    系统变量 immediate_server_version
    范围 会话
    动态 是的
    SET_VAR提示应用 没有
    类型 整数

    供内部复制使用。这个会话系统变量保存着复制拓扑中的直接源服务器的MySQL Server发布号(例如,80014对于MySQL 8.0.14服务器实例)。如果此即时服务器处于不支持会话系统变量的版本,则该变量的值设置为0 (UNKNOWN_SERVER_VERSION).

    变量的值从源复制到副本。有了这些信息,通过识别所涉及的版本之间发生语法或语义变化的位置,并适当地处理这些变化,副本可以正确地处理来自旧版本源的数据。该信息还可以用于组复制环境,其中复制组的一个或多个成员的版本比其他成员的版本更新。变量的值可以在每个事务的二进制日志中查看(作为Gtid_log_event,或Anonymous_gtid_log_event如果服务器上没有使用gtid),在调试跨版本复制问题时可能会有帮助。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有REPLICATION_APPLIER特权(见第17.3.3节,“复制权限检查”)或足够的权限来设置受限制的会话变量(请参见第5.1.9.1节,“系统变量权限”).但是,请注意,该变量不是为用户设置的;它由复制基础设施自动设置。

  • original_server_version

    介绍了 8.0.14
    系统变量 original_server_version
    范围 会话
    动态 是的
    SET_VAR提示应用 没有
    类型 整数

    供内部复制使用。这个会话系统变量保存了事务最初提交的服务器的MySQL Server版本号(例如,80014对于MySQL 8.0.14服务器实例)。如果这个原始服务器的版本不支持会话系统变量,那么该变量的值将设置为0 (UNKNOWN_SERVER_VERSION).注意,当原始服务器设置版本号时,如果复制拓扑中的即时服务器或任何其他介入服务器不支持会话系统变量,那么变量的值将重置为0,因此不复制它的值。

    变量的值的设置和使用方法与immediate_server_version系统变量。如果变量的值与immediate_server_version系统变量,只有后者被记录在二进制日志中,并指示原来的服务器版本是相同的。

    在Group Replication环境中,查看更改日志事件,这些事件是每个组成员在新成员加入组时排队的特殊事务,使用排队事务的组成员的服务器版本进行标记。这可以确保加入的成员知道原始捐赠者的服务器版本。由于为特定视图更改排队的视图更改日志事件在所有成员上具有相同的GTID,因此仅在本例中,相同GTID的实例可能具有不同的原始服务器版本。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有REPLICATION_APPLIER特权(见第17.3.3节,“复制权限检查”)或足够的权限来设置受限制的会话变量(请参见第5.1.9.1节,“系统变量权限”).但是,请注意,该变量不是为用户设置的;它由复制基础设施自动设置。

  • rpl_semi_sync_master_enabled

    命令行格式 ——rpl-semi-sync-master-enabled[={|在}]
    系统变量 rpl_semi_sync_master_enabled
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 布尔
    默认值

    控制是否在源服务器上启用了半异步复制。要启用或禁用插件,请将此变量设置为(或1或0)。默认值是

    只有在安装了源端半异步复制插件时,该变量才可用。

  • rpl_semi_sync_master_timeout

    命令行格式 ——rpl-semi-sync-master-timeout = #
    系统变量 rpl_semi_sync_master_timeout
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 10000

    一个以毫秒为单位的值,该值控制源在超时并恢复到异步复制之前等待一个副本的确认提交所需的时间。缺省值是10000(10秒)。

    只有在安装了源端半异步复制插件时,该变量才可用。

  • rpl_semi_sync_master_trace_level

    命令行格式 ——rpl-semi-sync-master-trace-level = #
    系统变量 rpl_semi_sync_master_trace_level
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 32

    源服务器上的半异步复制调试跟踪级别。定义了四个级别:

    • 1 =一般水平(例如,时间函数失效)

    • 16 =详细级别(更详细的信息)

    • 32 =网络等待级别(关于网络等待的更多信息)

    • 64 =函数级别(关于函数进入和退出的信息)

    只有在安装了源端半异步复制插件时,该变量才可用。

  • rpl_semi_sync_master_wait_for_slave_count

    命令行格式 ——rpl-semi-sync-master-wait-for-slave-count = #
    系统变量 rpl_semi_sync_master_wait_for_slave_count
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 1
    最小值 1
    最大值 65535

    在继续之前,源每个事务必须接收的副本确认数。默认情况下rpl_semi_sync_master_wait_for_slave_count1,这意味着半异步复制在接收到单个副本确认后继续进行。对于这个变量的小值,性能最好。

    例如,如果rpl_semi_sync_master_wait_for_slave_count2,则2个副本必须在设置的超时时间之前确认收到事务rpl_semi_sync_master_timeout以进行半异步复制。如果在超时期间确认收到事务的副本减少,则源将恢复到正常复制。

    请注意

    这种行为也取决于rpl_semi_sync_master_wait_no_slave

    只有在安装了源端半异步复制插件时,该变量才可用。

  • rpl_semi_sync_master_wait_no_slave

    命令行格式 ——rpl-semi-sync-master-wait-no-slave[={|在}]
    系统变量 rpl_semi_sync_master_wait_no_slave
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 布尔
    默认值

    控制源是否等待超时时间rpl_semi_sync_master_timeout要过期,即使副本计数下降到小于配置的副本数量rpl_semi_sync_master_wait_for_slave_count在超时时间内。

    当的值rpl_semi_sync_master_wait_no_slave(默认),允许将副本计数降至小于rpl_semi_sync_master_wait_for_slave_count在超时时间内。只要在超时时间到期前有足够多的副本确认事务,半异步复制就会继续进行。

    当的值rpl_semi_sync_master_wait_no_slave,如果副本计数下降到小于中配置的数量rpl_semi_sync_master_wait_for_slave_count的超时时间内的任何时间rpl_semi_sync_master_timeout,源端恢复正常复制。

    只有在安装了源端半异步复制插件时,该变量才可用。

  • rpl_semi_sync_master_wait_point

    命令行格式 ——rpl-semi-sync-master-wait-point =值
    系统变量 rpl_semi_sync_master_wait_point
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 枚举
    默认值 AFTER_SYNC
    有效值

    AFTER_SYNC

    AFTER_COMMIT

    此变量控制半异步复制源服务器在向提交事务的客户端返回状态之前等待事务收到副本确认的时间点。这些值是允许的:

    • AFTER_SYNC(默认):源将每个事务写入它的二进制日志和副本,并将二进制日志同步到磁盘。同步完成后,源等待副本确认事务收到。在接收到确认之后,源将事务提交给存储引擎,并将结果返回给客户端,然后客户端可以继续进行。

    • AFTER_COMMIT:源程序将每个事务写入它的二进制日志和副本,同步二进制日志,并将事务提交给存储引擎。提交后,源等待副本确认事务收到。在接收到确认之后,源向客户端返回一个结果,然后客户端可以继续操作。

    这些设置的复制特性区别如下:

    • AFTER_SYNC,所有客户端同时看到提交的事务:在它被副本确认并提交给源端的存储引擎之后。因此,所有客户机在源上看到相同的数据。

      在源失败的情况下,源上提交的所有事务都被复制到副本(保存到它的中继日志中)。源服务器的意外退出和到副本的故障转移是无损的,因为副本是最新的。但是请注意,在这种情况下不能重新启动源,必须丢弃源,因为它的二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外化时可能会与副本发生冲突。

    • AFTER_COMMIT,发出事务的客户端只有在服务器提交到存储引擎并收到副本确认之后才会获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到提交的事务。

      如果出现了一些错误,例如副本不能处理事务,那么在意外的源服务器退出和故障转移到副本的情况下,这些客户机可能会看到相对于它们在源上看到的数据的损失。

    只有在安装了源端半异步复制插件时,该变量才可用。

    加上rpl_semi_sync_master_wait_point在MySQL 5.7中,创建了一个版本兼容性约束,因为它增加了半同步接口版本:MySQL 5.7及更高版本的服务器不能使用旧版本的半同步复制插件,旧版本的服务器也不能使用MySQL 5.7及更高版本的半同步复制插件。

  • rpl_semi_sync_source_enabled

    命令行格式 ——rpl-semi-sync-source-enabled[={|在}]
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_enabled
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 布尔
    默认值

    rpl_semi_sync_source_enabledrpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_master_enabled是可用的。

    rpl_semi_sync_source_enabled控制是否在源服务器上启用了半异步复制。要启用或禁用插件,请将此变量设置为(或1或0)。默认值是

  • rpl_semi_sync_source_timeout

    命令行格式 ——rpl-semi-sync-source-timeout = #
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_timeout
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 10000

    rpl_semi_sync_source_timeoutrpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_master_timeout是可用的。

    rpl_semi_sync_source_timeout控制源在从副本提交确认之前等待多长时间,然后超时并恢复到异步复制。缺省值是10000(10秒),单位是毫秒。

  • rpl_semi_sync_source_trace_level

    命令行格式 ——rpl-semi-sync-source-trace-level = #
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_trace_level
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 32

    rpl_semi_sync_source_trace_levelrpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_master_trace_level是可用的。

    rpl_semi_sync_source_trace_level指定源服务器上的半异步复制调试跟踪级别。定义了四个级别:

    • 1 =一般水平(例如,时间函数失效)

    • 16 =详细级别(更详细的信息)

    • 32 =网络等待级别(关于网络等待的更多信息)

    • 64 =函数级别(关于函数进入和退出的信息)

  • rpl_semi_sync_source_wait_for_replica_count

    命令行格式 ——rpl-semi-sync-source-wait-for-replica-count = #
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_wait_for_replica_count
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 整数
    默认值 1
    最小值 1
    最大值 65535

    rpl_semi_sync_source_wait_for_replica_countrpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_master_wait_for_slave_count是可用的。

    rpl_semi_sync_source_wait_for_replica_count指定源在继续之前每个事务必须接收的副本确认的数量。默认情况下rpl_semi_sync_source_wait_for_replica_count1,这意味着半异步复制在接收到单个副本确认后继续进行。对于这个变量的小值,性能最好。

    例如,如果rpl_semi_sync_source_wait_for_replica_count2,则2个副本必须在设置的超时时间之前确认收到事务rpl_semi_sync_source_timeout以进行半异步复制。如果在超时期间确认收到事务的副本减少,则源将恢复到正常复制。

    请注意

    这种行为也取决于rpl_semi_sync_source_wait_no_replica

  • rpl_semi_sync_source_wait_no_replica

    命令行格式 ——rpl-semi-sync-source-wait-no-replica[={|在}]
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_wait_no_replica
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 布尔
    默认值

    rpl_semi_sync_source_wait_no_replicarpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_source_wait_no_replica是可用的。

    rpl_semi_sync_source_wait_no_replica控制源是否等待超时时间rpl_semi_sync_source_timeout要过期,即使副本计数下降到小于配置的副本数量rpl_semi_sync_source_wait_for_replica_count在超时时间内。

    当的值rpl_semi_sync_source_wait_no_replica(默认),允许将副本计数降至小于rpl_semi_sync_source_wait_for_replica_count在超时时间内。只要在超时时间到期前有足够多的副本确认事务,半异步复制就会继续进行。

    当的值rpl_semi_sync_source_wait_no_replica,如果副本计数下降到小于中配置的数量rpl_semi_sync_source_wait_for_replica_count的超时时间内的任何时间rpl_semi_sync_source_timeout,源端恢复正常复制。

  • rpl_semi_sync_source_wait_point

    命令行格式 ——rpl-semi-sync-source-wait-point =值
    介绍了 8.0.26
    系统变量 rpl_semi_sync_source_wait_point
    范围 全球
    动态 是的
    SET_VAR提示应用 没有
    类型 枚举
    默认值 AFTER_SYNC
    有效值

    AFTER_SYNC

    AFTER_COMMIT

    rpl_semi_sync_source_wait_pointrpl_semi_sync_sourcesemisync_source.so库)插件安装在副本上以建立半异步复制。如果rpl_semi_sync_master插件(semisync_master.so库)安装,rpl_semi_sync_master_wait_point是可用的。

    rpl_semi_sync_source_wait_point控制半异步复制源服务器在将状态返回给提交事务的客户端之前等待事务接收副本确认的时间点。这些值是允许的:

    • AFTER_SYNC(默认):源将每个事务写入它的二进制日志和副本,并将二进制日志同步到磁盘。同步完成后,源等待副本确认事务收到。在接收到确认之后,源将事务提交给存储引擎,并将结果返回给客户端,然后客户端可以继续进行。

    • AFTER_COMMIT:源程序将每个事务写入它的二进制日志和副本,同步二进制日志,并将事务提交给存储引擎。提交后,源等待副本确认事务收到。在接收到确认之后,源向客户端返回一个结果,然后客户端可以继续操作。

    这些设置的复制特性区别如下:

    • AFTER_SYNC,所有客户端同时看到提交的事务:在它被副本确认并提交给源端的存储引擎之后。因此,所有客户机在源上看到相同的数据。

      在源失败的情况下,源上提交的所有事务都被复制到副本(保存到它的中继日志中)。源服务器的意外退出和到副本的故障转移是无损的,因为副本是最新的。但是请注意,在这种情况下不能重新启动源,必须丢弃源,因为它的二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外化时可能会与副本发生冲突。

    • AFTER_COMMIT,发出事务的客户端只有在服务器提交到存储引擎并收到副本确认之后才会获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到提交的事务。

      如果出现了一些错误,例如副本不能处理事务,那么在意外的源服务器退出和故障转移到副本的情况下,这些客户机可能会看到相对于它们在源上看到的数据的损失。