本节中列出的函数用于控制 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
。如果复制 SQL 线程在SOURCE_POS_WAIT()
等待时停止,则该函数返回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
时使用此函数,则会记录警告。