用于处理来自服务器的复制事件流的 C API 函数需要一个连接句柄(一个 MYSQL * 指针)和一个指向 MYSQL_RPL 结构的指针,该结构描述要从服务器二进制日志中读取的复制事件流。例如
MYSQL *mysql = mysql_real_connect(...);
MYSQL_RPL rpl;
# ... initialize MYSQL_RPL members ...
int result = mysql_binlog_open(mysql, &rpl);
本节描述 MYSQL_RPL 结构成员。连接句柄在 第 5.2 节,“C API 基本数据结构” 中描述。
适用的 MYSQL_RPL 成员取决于要执行的二进制日志操作
在调用
mysql_binlog_open()之前,调用者必须设置MYSQL_RPL中从file_name_length到flags的成员。此外,如果flags设置了MYSQL_RPL_GTID标志,则调用者必须在调用mysql_binlog_open()之前设置从gtid_set_encoded_size到gtid_set_arg的成员。成功调用
mysql_binlog_fetch()后,调用者会检查size和buffer成员。
MYSQL_RPL 结构成员描述
-
file_name_length要读取的二进制日志文件的名称的长度。此成员与
file_name结合使用;请参阅file_name描述。 -
file_name要读取的二进制日志文件的名称
如果
file_name为NULL,客户端库会将其设置为空字符串并将file_name_length设置为 0。如果
file_name不为NULL,则file_name_length必须是名称的长度或 0。如果file_name_length为 0,则客户端库会将其设置为名称的长度,在这种情况下,file_name必须作为以 null 结尾的字符串给出。
要从二进制日志的开头读取而不必知道最旧的二进制日志文件的名称,请将
file_name设置为NULL或空字符串,并将start_position设置为 4。 -
start_position在二进制日志中开始读取的位置。任何给定二进制日志文件中的第一个事件的位置为 4。
-
server_id用于识别读取二进制日志的服务器的服务器 ID。
-
flags影响二进制日志读取的标志的并集,或者如果没有设置标志,则为 0。允许使用以下标志值
-
MYSQL_RPL_SKIP_HEARTBEAT设置此标志会导致
mysql_binlog_fetch()跳过心跳事件。 -
MYSQL_RPL_GTID设置此标志以读取 GTID(全局事务 ID)数据。如果设置,您必须在调用
mysql_binlog_open()之前初始化MYSQL_RPL结构中从gtid_set_encoded_size到gtid_set_arg的与 GTID 相关的成员。本文档无法详细描述客户端程序如何使用这些与 GTID 相关的成员。有关更多信息,请检查
mysqlbinlog.cc源文件。有关基于 GTID 的复制的信息,请参阅 使用全局事务标识符进行复制。
-
-
gtid_set_encoded_sizeGTID 集数据的尺寸,或 0。
-
fix_gtid_set用于
mysql_binlog_open()的回调函数的地址,用于填充命令包 GTID 集,或者如果不存在此类函数,则为NULL。如果使用回调函数,则应具有以下调用签名void my_callback(MYSQL_RPL *rpl, unsigned char *packet_gtid_set); -
gtid_set_arg指向 GTID 集数据的指针(如果
fix_gtid_set为NULL),或指向要使其可用于回调函数中使用的值的指针(如果fix_gtid_set不为NULL)。gtid_set_arg是一个通用指针,因此它可以指向任何类型的值(例如,字符串、结构或函数)。它在回调函数中的解释取决于回调函数打算如何使用它。 -
size成功调用
mysql_binlog_fetch()后,返回的二进制日志事件的大小。对于 EOF 事件,值为 0,对于非 EOF 事件,值大于 0。 -
buffer成功调用
mysql_binlog_fetch()后,指向二进制日志事件内容的指针。