本节中列出的函数用于控制 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时使用此函数,则会记录警告。