START SLAVE [thread_types] [until_option] [connection_options]
thread_types:
[thread_type [, thread_type] ... ]
thread_type:
IO_THREAD | SQL_THREAD
until_option:
UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set
| MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
| RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
| SQL_AFTER_MTS_GAPS }
connection_options:
[USER='user_name'] [PASSWORD='user_pass'] [DEFAULT_AUTH='plugin_name'] [PLUGIN_DIR='plugin_dir']
gtid_set:
uuid_set [, uuid_set] ...
| ''
uuid_set:
uuid:interval[:interval]...
uuid:
hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
h:
[0-9,A-F]
interval:
n[-n]
(n >= 1)
START SLAVE
没有
thread_type
选项启动两个复制线程。I/O 线程从复制源服务器读取事件并将它们存储在中继日志中。SQL 线程从中继日志中读取事件并执行它们。
START SLAVE
需要
SUPER
特权。
如果START SLAVE
成功启动复制线程,它会无任何错误地返回。然而,即使在那种情况下,复制线程也可能启动然后停止(例如,因为它们无法连接到源或读取其二进制日志,或其他一些问题)。START SLAVE
不会就此警告您。您必须检查副本的错误日志以了解复制线程生成的错误消息,或者检查它们是否以令人满意的方式运行
SHOW SLAVE STATUS
。
START SLAVE
导致正在进行的事务的隐式提交。请参阅第 13.3.3 节,“导致隐式提交的语句”。
从 MySQL 5.6.11 开始,
gtid_next
必须
AUTOMATIC
在发出此语句之前设置为(错误 #16062608)。
START SLAVE
USER
支持带有、
和
选项的可插入用户密码验证,PASSWORD
如下表所述:
DEFAULT_AUTH
PLUGIN_DIR
USER
: 用户名。不能设置为空字符串或空字符串,如果PASSWORD
使用则不能设置。PASSWORD
: 密码。DEFAULT_AUTH
:插件名称;默认是 MySQL 本机身份验证。PLUGIN_DIR
: 插件位置。
SQL_THREAD
在指定 、 、 或 中的任何一个时,您不能使用该选项USER
,
PASSWORD
除非DEFAULT_AUTH
还
提供PLUGIN_DIR
了该
IO_THREAD
选项。
有关详细信息,请参阅 第 6.2.11 节,“可插入身份验证”。
如果将不安全的连接与任何这些选项一起使用,服务器会发出警告Sending passwords in plain text without SSL/TLS is extremely insecure。
START SLAVE ... UNTIL
支持与全局事务标识符 (GTID) 一起使用的两个附加选项(请参阅
第 17.1.3 节,“使用全局事务标识符进行复制”)。其中每一个都将一组一个或多个全局事务标识符
gtid_set
作为参数(有关更多信息,请参阅
GTID 集)。
thread_type
指定
no 时,START SLAVE UNTIL SQL_BEFORE_GTIDS
导致复制 SQL 线程处理事务,直到它到达第一个事务,其 GTID 在gtid_set
.
START SLAVE UNTIL SQL_AFTER_GTIDS
导致复制线程处理所有事务,直到 中的
last
事务
gtid_set
已被两个线程处理。换句话说,START SLAVE UNTIL
SQL_BEFORE_GTIDS
使复制 SQL 线程处理在
gtid_set
到达第一个 GTID 之前发生的所有事务,
START SLAVE UNTIL SQL_AFTER_GTIDS
并使复制线程处理所有事务,包括那些在中找到 GTID 的事务gtid_set
,直到每个人都遇到一个 GTID 不属于该集合的事务。SQL_BEFORE_GTIDS
并且
SQL_AFTER_GTIDS
每个都支持
SQL_THREAD
和IO_THREAD
选项,尽管IO_THREAD
与它们一起使用目前没有效果。
例如,START SLAVE SQL_THREAD UNTIL
SQL_BEFORE_GTIDS =
3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
使复制 SQL 线程处理所有源自源的
server_uuid
事务
3E11FA47-71CA-11E1-9E33-C80AA9429562
,直到它遇到序列号为 11 的事务;然后它停止而不处理此事务。换句话说,处理直到并包括序列号为 10 的事务的所有事务。执行中START SLAVE
SQL_THREAD UNTIL SQL_AFTER_GTIDS =
3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
,另一方面,将导致复制 SQL 线程从源中获取刚刚提到的所有事务,包括所有具有序列号 11 到 56 的事务,然后停止而不处理任何其他事务;也就是说,序列号为 56 的事务将是复制 SQL 线程获取的最后一个事务。
在 MySQL 5.6.14 之前,SQL_AFTER_GTIDS
在指示的事务完成后不会停止副本,而是等到收到另一个 GTID 事件(错误 #14767986)。
使用该START SLAVE
UNTIL SQL_AFTER_MTS_GAPS
语句使多线程副本的 SQL 线程运行,直到在中继日志中找不到更多间隙,然后停止。该语句可以带一个SQL_THREAD
选项,但语句的效果保持不变。它对复制 I/O 线程没有影响(并且不能与该
IO_THREAD
选项一起使用)。START SLAVE UNTIL
SQL_AFTER_MTS_GAPS
在副本在多线程模式下因错误而失败后,应在将副本从多线程模式切换到单线程模式(即,
slave_parallel_workers
从正的非零值重置回 0 时)之前使用。
要将失败的多线程副本更改为单线程模式,您可以按所示顺序发出以下一系列语句:
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
SET @@GLOBAL.slave_parallel_workers = 0;
START SLAVE SQL_THREAD;
如果您在
relay_log_recovery
启用的情况下运行失败的多线程副本,那么您必须START SLAVE UNTIL
SQL_AFTER_MTS_GAPS
在执行之前
发出CHANGE MASTER TO
。否则后一条语句失败。
START SLAVE ...
可以在 的输出中查看正在运行的语句
的整个文本
,包括使用的任何USER
或PASSWORD
值SHOW
PROCESSLIST
。对于运行语句的文本也是如此,包括它为或
CHANGE MASTER TO
所使用的任何值
。
MASTER_USER
MASTER_PASSWORD
START SLAVE
在 I/O 线程和 SQL 线程都启动后向用户发送确认。但是,I/O 线程可能尚未连接。出于这个原因,成功
START SLAVE
导致
SHOW SLAVE STATUS
显示
Slave_SQL_Running=Yes
,但这并不能保证Slave_IO_Running=Yes
(因为
Slave_IO_Running=Yes
只有当 I/O 线程正在运行和连接时)。有关详细信息,请参阅第 13.7.5.35 节,“SHOW SLAVE STATUS 语句”和
第 17.1.5.1 节,“检查复制状态”。
您可以向语句添加IO_THREAD
和
SQL_THREAD
选项以命名要启动的线程。指定、、
或
中的SQL_THREAD
任何一个时,不允许使用
该选项,除非
还提供了该选项。
USER
PASSWORD
DEFAULT_AUTH
PLUGIN_DIR
IO_THREAD
可以添加一个UNTIL
子句(until_option
,在前面的语法中)以指定副本应该启动并运行,直到 SQL 线程到达源的二进制日志中的给定点(由
MASTER_LOG_POS
和
MASTER_LOG_FILE
选项指定)或副本的中继日志中的给定点, 用
RELAY_LOG_POS
和
RELAY_LOG_FILE
选项表示。当 SQL 线程到达指定点时,它会停止。如果
SQL_THREAD
在语句中指定了该选项,则它只启动 SQL 线程。否则,它启动两个复制线程。如果 SQL 线程正在运行,
UNTIL
则忽略该子句并发出警告。您不能将UNTIL
子句与IO_THREAD
选项。
也可以START SLAVE UNTIL
使用选项之一指定相对于给定 GTID 或一组 GTID 的停止点SQL_BEFORE_GTIDS
或
SQL_AFTER_GTIDS
,如本节前面所述。使用这些选项之一时,您可以指定
SQL_THREAD
、IO_THREAD
、这两个选项,或两者都不指定。如果指定 only
SQL_THREAD
,则只有复制 SQL 线程受语句影响;如果仅
IO_THREAD
使用,则只有复制 I/O 线程受到影响。如果同时使用SQL_THREAD
和IO_THREAD
,或者两者均未使用,则两个复制线程均受该语句影响。
多线程副本不支持该UNTIL
子句,除非同时使用
SQL_AFTER_MTS_GAPS
.
对于UNTIL
子句,您必须指定以下任何一项:
日志文件名和该文件中的位置
或_
SQL_BEFORE_GTIDS
_SQL_AFTER_GTIDS
SQL_AFTER_MTS_GAPS
不要混用二进制日志和中继日志选项。不要将日志文件选项与 GTID 选项混合使用。
任何UNTIL
条件都由后续
STOP SLAVE
语句、
START SLAVE
不包含UNTIL
子句的语句或服务器重新启动重置。
指定日志文件和位置时,您可以使用
IO_THREAD
选项 withSTART SLAVE
... UNTIL
即使只有 SQL 线程受此语句影响。在这种情况下该IO_THREAD
选项将被忽略。SQL_BEFORE_GTIDS
使用其中一个 GTID 选项(和
)时,上述限制不适用SQL_AFTER_GTIDS
;GTID 选项同时支持SQL_THREAD
和
IO_THREAD
,如本节前面所述。
该UNTIL
子句可用于调试复制,或使复制继续进行,直到您希望避免副本复制事件的点之前。例如,如果
DROP TABLE
在源上执行了一条不明智的语句,您可以使用UNTIL
告诉副本执行到该点但不再执行。要查找事件是什么,请将mysqlbinlog与源的二进制日志或副本的中继日志一起使用,或者使用
SHOW BINLOG EVENTS
语句。
如果您UNTIL
要让副本进程分段复制查询,建议您在启动副本时
--skip-slave-start
选择防止 SQL 线程在副本服务器启动时运行的选项。最好在选项文件中而不是在命令行中使用此选项,这样意外的服务器重启不会导致它被遗忘。
该SHOW SLAVE STATUS
语句包括显示
UNTIL
条件当前值的输出字段。