14.18.4 基于位置的同步函数
本节中的函数用于控制 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
])该函数用于控制源服务器和复制服务器的同步操作。它将阻塞直到复制服务器读取和应用所有更新到指定位置的源服务器的二进制日志中。
函数的返回值是复制服务器需要等待的日志事件数量。函数返回
NULL
如果复制 SQL 线程未启动、复制服务器的源信息未初始化、参数错误或出现错误。如果超时,函数返回-1
。如果复制 SQL 线程在等待时停止,函数返回NULL
。如果复制服务器已经超过指定位置,函数将立即返回。如果二进制日志文件位置已被标记为无效,函数将等待知道有效文件位置。二进制日志文件位置可以被标记为无效在更改复制源时,例如使用
CHANGE REPLICATION SOURCE TO
语句中的GTID_ONLY
选项,并在服务器重启或复制停止时。文件位置将在事务成功应用到指定位置后变得有效。如果应用程序未达到指定位置,函数将等待超时。使用SHOW REPLICA STATUS
语句检查二进制日志文件位置是否被标记为无效。在多线程复制副本上,该函数将等待由
replica_checkpoint_group
或replica_checkpoint_period
系统变量设置的限制期限到期时,更新副本的状态。根据系统变量的设置,函数可能会在指定位置被达到的时间后返回。如果使用二进制日志事务压缩,并且指定的位置处于压缩的事务 payload(作为一个
Transaction_payload_event
),函数将等待整个事务被读取和应用,并且更新位置。如果指定了
timeout
值,SOURCE_POS_WAIT()
将在timeout
秒后停止等待。timeout
必须大于或等于0。在严格SQL模式下,如果timeout
小于0,服务器将立即 reject该请求,并返回错误代码ER_WRONG_ARGUMENTS
;否则函数返回NULL
,并raise一个警告。可选的
channel
值允许您指定函数应用于哪个复制通道。请参阅第19.2.2节,“复制通道”获取更多信息。该函数不安全用于语句级别复制。使用该函数时,如果
binlog_format
设置为STATEMENT
,将记录警告。