MySQL 8.0 C API 开发者指南  / 第 10 章 C API 二进制日志接口  /  10.2 C API 二进制日志数据结构

10.2 C API 二进制日志数据结构

用于处理来自服务器的复制事件流的 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成员 from file_name_lengththrough flags。此外,如果 设置flagsMYSQL_RPL_GTID标志,则调用者必须设置成员 from gtid_set_encoded_size through gtid_set_arg

  • 调用成功后 mysql_binlog_fetch(),调用者检查sizebuffer成员。

MYSQL_RPL结构成员说明:

  • file_name_length

    要读取的二进制日志文件的名称长度。该成员与 file_name;结合使用 看 file_name说明。

  • file_name

    要读取的二进制日志文件的名称:

    • 如果file_nameNULL,客户端库将其设置为空字符串并设置file_name_length 为 0。

    • 如果file_name不是 NULL, 则file_name_length必须是名称的长度或 0。如果 file_name_length是 0,则客户端库将其设置为名称的长度,在这种情况下, file_name必须作为以 null 结尾的字符串给出。

    要从二进制日志的开头读取而不必知道最早的二进制日志文件的名称,请设置 file_nameNULL或空字符串,并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_size

    GTID 集数据的大小,或 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_setNULL),或者指向要在回调函数中使用的值的指针(如果fix_gtid_set不是NULL)。gtid_set_arg 是通用指针,因此它可以指向任何类型的值(例如,字符串、结构或函数)。它在回调中的解释取决于回调打算如何使用它。

  • size

    调用成功后 mysql_binlog_fetch(),返回二进制日志事件的大小。EOF 事件的值为 0,非 EOF 事件的值为大于 0。

  • buffer

    调用成功后 mysql_binlog_fetch(),指向二进制日志事件内容的指针。