官网地址:MySQL :: MySQL Replication :: 2.6.2 Replication Source Options and Variables
欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.
本节介绍可以在复制源服务器上使用的服务器选项和系统变量。您可以在命令行或?选项文件中指定选项?。您可以使用指定系统变量值?SET。
在源和每个副本上,您必须设置?server_id系统变量以建立唯一的复制 ID。对于每个服务器,您应该选择一个 1 到 2 32?? 1范围内的唯一正整数,并且每个 ID 必须与复制拓扑中任何其他源或副本使用的每个其他 ID 不同。例子:?server-id=3
。
有关源上用于控制二进制日志记录的选项,请参见?第 2.6.4 节 “二进制日志记录选项和变量”。
以下列表描述了用于控制复制源服务器的启动选项。本节稍后将讨论与复制相关的系统变量。
命令行格式 | --show-slave-auth-info[={OFF|ON}] |
---|---|
类型 | 布尔值 |
默认值 | OFF |
SHOW SLAVE HOSTS在源服务器上?的输出中显示 以--report-user和?--report-password选项启动的副本的副本用户名和密码。
以下系统变量用于控制源:
命令行格式 | --auto-increment-increment=# |
---|---|
系统变量 | auto_increment_increment |
范围 | 全局、会话 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 1 |
最大值 | 65535 |
auto_increment_increment?旨在auto_increment_offset?与源到源复制一起使用,并可用于控制?AUTO_INCREMENT
列的操作。这两个变量都有全局值和会话值,并且每个变量都可以采用 1 到 65,535 之间的整数值(含 1 和 65,535)。将这两个变量中的任何一个的值设置为 0 都会导致其值设置为 1。尝试将这两个变量的值设置为大于 65,535 或小于 0 的整数会导致其值被设置为 65,535。尝试设置?auto_increment_incrementor 的值auto_increment_offset转换为非整数值会产生错误,并且变量的实际值保持不变。
auto_increment_increment?还支持与表格一起使用?NDB。
当服务器上启动组复制时, 的值?auto_increment_increment将更改为 的值?group_replication_auto_increment_increment(默认为7),并且 的值?auto_increment_offset将更改为服务器ID。当组复制停止时,更改将恢复。auto_increment_increment?仅当且每个更改的默认值均为 1 时,才会进行并恢复这些更改。?auto_increment_offset?如果它们的值已从默认值修改,则组复制不会更改它们。
auto_increment_increment?并auto_increment_offset?影响AUTO_INCREMENT
列行为如下:
auto_increment_increment?控制连续列值之间的间隔。例如:
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE autoinc1
-> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query OK, 0 rows affected (0.04 sec)
mysql> SET @@auto_increment_increment=10;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set (0.01 sec)
mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
+-----+
4 rows in set (0.00 sec)
auto_increment_offset?确定列值的起点?AUTO_INCREMENT
。请考虑以下情况,假设这些语句在与 的描述中给出的示例相同的会话期间执行?auto_increment_increment:
mysql> SET @@auto_increment_offset=5;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE autoinc2
-> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc2;
+-----+
| col |
+-----+
| 5 |
| 15 |
| 25 |
| 35 |
+-----+
4 rows in set (0.02 sec)
当 的值?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> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
+-----+
4 rows in set (0.00 sec)
mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
| 35 |
| 45 |
| 55 |
| 65 |
+-----+
8 rows in set (0.00 sec)
显示的值?auto_increment_increment?和auto_increment_offset
?生成序列 5 +?N
× 10,即 [5, 15, 25, 35, 45, ...]。col
之前的列?中存在的最高值INSERT是 31,AUTO_INCREMENT
?系列中的下一个可用值是 35,因此插入的值从?col
该点开始,结果如SELECT?查询所示。
不可能将这两个变量的影响限制在单个表中;这些变量控制MySQL 服务器上所有AUTO_INCREMENT
表中?所有列的行为。如果设置了任一变量的全局值,则其影响将持续存在,直到通过设置会话值更改或覆盖全局值,或者重新启动mysqld 。如果设置了本地值,则新值会影响?当前用户在会话期间插入新行的所有表的列,除非在该会话期间更改了这些值。?AUTO_INCREMENT
默认值为?auto_increment_increment1。请参见?第 4.1.1 节“复制和 AUTO_INCRMENT”。
命令行格式 | --auto-increment-offset=# |
---|---|
系统变量 | auto_increment_offset |
范围 | 全局、会话 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 1 |
最大值 | 65535 |
该变量的默认值为 1。如果保留默认值,并且在服务器上启动组复制,则会将其更改为服务器 ID。有关详细信息,请参阅 的说明?auto_increment_increment。
auto_increment_offset
还支持与表格一起使用NDB。
命令行格式 | --rpl-semi-sync-master-enabled[={OFF|ON}] |
---|---|
系统变量 | rpl_semi_sync_master_enabled |
范围 | 全球的 |
动态的 | 是的 |
类型 | 布尔值 |
默认值 | OFF |
控制是否在源上启用半同步复制。要启用或禁用插件,请分别将此变量设置为ON
或OFF
?(或 1 或 0)。默认为?OFF
.
仅当安装了源端半同步复制插件时,该变量才可用。
命令行格式 | --rpl-semi-sync-master-timeout=# |
---|---|
系统变量 | rpl_semi_sync_master_timeout |
范围 | 全球的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 10000 |
最小值 | 0 |
最大值 | 4294967295 |
单元 | 毫秒 |
一个以毫秒为单位的值,用于控制源在超时并恢复到异步复制之前等待提交以获取副本确认的时间。默认值为 10000(10 秒)。
仅当安装了源端半同步复制插件时,该变量才可用。
rpl_semi_sync_master_trace_level
命令行格式 | --rpl-semi-sync-master-trace-level=# |
---|---|
系统变量 | rpl_semi_sync_master_trace_level |
范围 | 全球的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 32 |
最小值 | 0 |
最大值 | 4294967295 |
源上的半同步复制调试跟踪级别。定义了四个级别:
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 |
范围 | 全球的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 1 |
最大值 | 65535 |
源在继续之前必须接收每个事务的副本确认数。默认情况下为?rpl_semi_sync_master_wait_for_slave_count
?,1
这意味着半同步复制在收到单个副本确认后继续进行。该变量的值较小时性能最佳。
例如,如果?rpl_semi_sync_master_wait_for_slave_count
?是2
,则 2 个副本必须在配置的超时期限之前确认收到事务,以便?rpl_semi_sync_master_timeout?半同步复制继续进行。如果在超时期间确认收到事务的副本较少,则源将恢复到正常复制。
仅当安装了源端半同步复制插件时,该变量才可用。
rpl_semi_sync_master_wait_no_slave
命令行格式 | --rpl-semi-sync-master-wait-no-slave[={OFF|ON}] |
---|---|
系统变量 | rpl_semi_sync_master_wait_no_slave |
范围 | 全球的 |
动态的 | 是的 |
类型 | 布尔值 |
默认值 | ON |
控制源是否等待配置的超时期限到期?rpl_semi_sync_master_timeout?,即使副本计数下降到小于?rpl_semi_sync_master_wait_for_slave_count?超时期间配置的副本数量。
rpl_semi_sync_master_wait_no_slave
当的?值为?ON
(默认)时,允许副本计数下降到小于?rpl_semi_sync_master_wait_for_slave_count?超时期间。只要有足够的副本在超时期限到期之前确认事务,半同步复制就会继续。
当 的值为 时?rpl_semi_sync_master_wait_no_slave
, 如果?在 所配置的超时时间内任意时间?OFF
副本计数下降到小于所配置的数量?,则源将恢复到正常复制。?rpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_master_timeout
仅当安装了源端半同步复制插件时,该变量才可用。
rpl_semi_sync_master_wait_point
命令行格式 | --rpl-semi-sync-master-wait-point=value |
---|---|
系统变量 | rpl_semi_sync_master_wait_point |
范围 | 全球的 |
动态的 | 是的 |
类型 | 枚举 |
默认值 | AFTER_SYNC |
有效值 |
|
此变量控制半同步源在将状态返回给提交事务的客户端之前等待事务接收的副本确认的时间点。允许使用以下值:
AFTER_SYNC
(默认):源将每个事务写入其二进制日志和副本,并将二进制日志同步到磁盘。同步后,源等待事务接收的副本确认。收到确认后,源将事务提交到存储引擎并将结果返回给客户端,然后客户端可以继续。
AFTER_COMMIT
:源将每个事务写入其二进制日志和副本,同步二进制日志,并将事务提交到存储引擎。提交后,源等待事务接收的副本确认。收到确认后,源将结果返回给客户端,然后客户端可以继续。
这些设置的复制特征有所不同,如下所示:
使用 时AFTER_SYNC
,所有客户端都会同时看到已提交的事务:在副本确认事务并提交到源上的存储引擎之后。因此,所有客户端都会在源上看到相同的数据。
如果源发生故障,在源上提交的所有事务都已复制到副本(保存到其中继日志)。源的意外退出和故障转移到副本是无损的,因为副本是最新的。但请注意,在这种情况下源无法重新启动,必须??被丢弃,因为其二进制日志可能包含未提交的事务,这些事务在二进制日志恢复后外部化时会导致与副本发生冲突。
使用 时AFTER_COMMIT
,发出事务的客户端仅在服务器提交到存储引擎并收到副本确认后才获得返回状态。在提交之后和副本确认之前,其他客户端可以在提交客户端之前看到已提交的事务。
如果出现问题导致副本无法处理事务,那么在源意外退出并故障转移到副本的情况下,此类客户端可能会看到相对于他们在源上看到的数据丢失。
仅当安装了源端半同步复制插件时,该变量才可用。
rpl_semi_sync_master_wait_point?MySQL 5.7.2 中添加。对于旧版本,半同步源行为相当于 的设置AFTER_COMMIT
。
此更改引入了版本兼容性约束,因为它增加了半同步接口版本:MySQL 5.7.2 及更高版本的服务器不能与旧版本的半同步复制插件一起使用,旧版本的服务器也不能与 MySQL 5.7.2 的半同步复制插件一起使用及以上。