用于处理来自服务器的复制事件流的 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成员 fromfile_name_lengththroughflags。此外,如果 设置flags了MYSQL_RPL_GTID标志,则调用者必须设置成员 fromgtid_set_encoded_sizethroughgtid_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_RPL结构 GTID 相关成员从gtid_set_encoded_size到 。gtid_set_argmysql_binlog_open()详细描述客户端程序如何使用那些与 GTID 相关的成员超出了本文档的范围。有关详细信息,请检查
mysqlbinlog.cc源文件。有关基于 GTID 的复制的信息,请参阅 使用全局事务标识符进行复制。
-
-
gtid_set_encoded_sizeGTID 集数据的大小,或 0。
-
fix_gtid_setmysql_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(),指向二进制日志事件内容的指针。