本节列出了用于控制 MySQL 复制中源服务器和副本服务器之间基于位置的同步的函数。
表 14.28 基于位置的同步函数
Name | Description | Deprecated |
---|---|---|
MASTER_POS_WAIT() |
阻塞直到副本读取并应用所有更新到指定位置 | 是 |
SOURCE_POS_WAIT() |
阻塞直到副本读取并应用所有更新到指定位置 |
-
MASTER_POS_WAIT(
log_name
,log_pos
[,timeout
][,channel
])已弃用的别名
SOURCE_POS_WAIT()
。 -
SOURCE_POS_WAIT(
log_name
,log_pos
[,timeout
][,channel
])该函数用于控制源服务器和副本服务器之间的同步。它阻塞直到副本读取并应用所有更新到指定位置在源服务器的二进制日志中。
返回值是副本等待到达指定位置所需的日志事件数。如果复制 SQL 线程未启动、副本的源信息未初始化、参数不正确或出现错误,函数返回
NULL
。如果超时已过期,函数返回-1
。如果复制 SQL 线程在SOURCE_POS_WAIT()
等待时停止,函数返回NULL
。如果副本已经超过指定位置,函数立即返回。如果二进制日志文件位置被标记为无效,该函数等待直到有效文件位置被知晓。二进制日志文件位置可能在
CHANGE REPLICATION SOURCE TO
选项GTID_ONLY
设置为 replication 通道时被标记为无效,并且服务器被重新启动或复制被停止。文件位置变得有效后,事务被成功应用到指定文件位置。如果应用程序不达到指定位置,该函数等待直到超时。使用SHOW REPLICA STATUS
语句来检查二进制日志文件位置是否被标记为无效。在多线程副本上,该函数等待直到
replica_checkpoint_group
或replica_checkpoint_period
系统变量设置的限制到期时,checkpoint 操作被调用以更新副本的状态。根据系统变量的设置,该函数可能在指定位置被达到后一些时间返回。如果二进制日志事务压缩在使用中,并且指定位置的事务负载被压缩(作为
Transaction_payload_event
),该函数等待直到整个事务被读取和应用,并且位置被更新。如果指定了
timeout
值,SOURCE_POS_WAIT()
将在timeout
秒后停止等待。timeout
必须大于或等于 0。(当服务器在严格 SQL 模式下运行时,负的timeout
值将被立即拒绝,返回ER_WRONG_ARGUMENTS
;否则函数返回NULL
,并生成警告。)可选的
channel
值使您可以指定该函数应用于哪个复制通道。请参阅 第 19.2.2 节,“复制通道” 以获取更多信息。该函数对于基于语句的复制是不安全的。如果您在
binlog_format
设置为STATEMENT
时使用该函数,将记录警告。