本节列出的函数用于控制 MySQL 复制中源服务器和副本服务器的基于位置的同步。
表 14.28 位置同步函数
名称 | 说明 | 已弃用 |
---|---|---|
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
。如果在SOURCE_POS_WAIT()
等待时复制 SQL 线程停止,则该函数返回NULL
。如果副本已超过指定位置,则该函数立即返回。如果二进制日志文件位置已被标记为无效,则该函数将等待,直到知道有效的日志文件位置。当为复制通道设置了
CHANGE REPLICATION SOURCE TO
选项GTID_ONLY
,并且服务器已重新启动或复制已停止时,二进制日志文件位置可能会被标记为无效。在成功应用了超过给定文件位置的事务后,文件位置将变为有效。如果应用程序未到达指定位置,则该函数将等待,直到超时。使用SHOW REPLICA STATUS
语句检查二进制日志文件位置是否已被标记为无效。在多线程副本上,该函数将等待,直到
replica_checkpoint_group
或replica_checkpoint_period
系统变量设置的限制到期,此时将调用检查点操作来更新副本的状态。因此,根据系统变量的设置,该函数可能会在到达指定位置后的一段时间内返回。如果正在使用二进制日志事务压缩,并且指定位置的事务有效负载已压缩(作为
Transaction_payload_event
),则该函数将等待,直到读取并应用了整个事务,并且位置已更新。如果指定了
timeout
值,则SOURCE_POS_WAIT()
会在经过timeout
秒后停止等待。timeout
必须大于或等于 0。(当服务器在严格 SQL 模式下运行时,负的timeout
值会立即被拒绝,并显示ER_WRONG_ARGUMENTS
;否则,该函数返回NULL
,并引发警告。)可选的
channel
值使您可以命名该函数应用于哪个复制通道。有关更多信息,请参见 第 19.2.2 节“复制通道”。此函数对于基于语句的复制来说是不安全的。如果在
binlog_format
设置为STATEMENT
时使用此函数,则会记录警告。