MySQL 9.0 C API 開發者指南  /  C API 二進制日誌介面  /  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.cc 位於 client 目錄中

  • mysql_client_test.c 位於 testclients 目錄中