MySQL 8.0 C API 开发者指南  / 第 10 章 C API 二进制日志接口  /  10.1 C API 二进制日志接口概述

10.1 C API 二进制日志接口概述

下面的简单示例程序演示了二进制日志 C API 函数。程序说明:

  • mysql假定为有效的连接处理程序。

  • 初始 SET 语句设置@source_binlog_checksum 用户定义的变量,服务器将其作为客户端感知校验和的指示。此客户端不对校验和执行任何操作,但如果没有此语句,在二进制日志事件中包含校验和的服务器将在第一次尝试读取包含校验和的事件时返回错误。分配给变量的值是无关紧要的;重要的是变量存在。

if (mysql_query(mysql, "SET @source_binlog_checksum='ALL'"))
{
  fprintf(stderr, "mysql_query() failed\n");
  fprintf(stderr, "Error %u: %s\n",
           mysql_errno(mysql), mysql_error(mysql));
  exit(1);
}

MYSQL_RPL rpl;

rpl.file_name_length = 0;
rpl.file_name = NULL;
rpl.start_position = 4;
rpl.server_id = 0;
rpl.flags = 0;

if (mysql_binlog_open(mysql, &rpl))
{
  fprintf(stderr, "mysql_binlog_open() failed\n");
  fprintf(stderr, "Error %u: %s\n",
           mysql_errno(mysql), mysql_error(mysql));
  exit(1);
}
for (;;)  /* read events until error or EOF */
{
  if (mysql_binlog_fetch(mysql, &rpl))
  {
    fprintf(stderr, "mysql_binlog_fetch() failed\n");
    fprintf(stderr, "Error %u: %s\n",
             mysql_errno(mysql), mysql_error(mysql));
    break;
  }
  if (rpl.size == 0)  /* EOF */
  {
    fprintf(stderr, "EOF event received\n");
    break;
  }
  fprintf(stderr, "Event received of size %lu.\n", rpl.size);
}
mysql_binlog_close(mysql, &rpl);

有关显示如何使用这些函数的其他示例,请查看这些源文件的 MySQL 源代码分发:

  • mysqlbinlog.ccclient目录 中

  • mysql_client_test.ctestclients目录 中