用於處理來自伺服器的複寫事件流的 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()
之前,呼叫者必須設定從file_name_length
到flags
的MYSQL_RPL
成員。此外,如果flags
設定了MYSQL_RPL_GTID
旗標,呼叫者必須設定從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()
之前,從gtid_set_encoded_size
到gtid_set_arg
初始化MYSQL_RPL
結構中與 GTID 相關的成員。本文件不詳述客戶端程式如何使用這些與 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_set
為NULL
),或一個值的指標,該值將在回呼函式內提供使用(如果fix_gtid_set
不為NULL
)。gtid_set_arg
是一個泛型指標,因此它可以指向任何種類的值(例如,字串、結構或函式)。它在回呼中的解譯取決於回呼打算如何使用它。 -
size
在成功呼叫
mysql_binlog_fetch()
後,傳回的二進制日誌事件大小。EOF 事件的值為 0,非 EOF 事件的值大於 0。 -
buffer
在成功呼叫
mysql_binlog_fetch()
後,指向二進制日誌事件內容的指標。