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отfile_name_lengthдоflags. Кроме того, если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должен быть задан как строка с завершающим нулём.
Чтобы читать с начала двоичного лога, не зная имени самого старого файла двоичного лога, установите
file_nameвNULLили пустую строку, аstart_positionв 4. -
start_positionПозиция, с которой начать чтение двоичного лога. Позиция первого события в любом данном файле двоичного лога равна 4.
-
server_idИдентификатор сервера для идентификации сервера, с которого читается двоичный лог.
-
flagsОбъединение флагов, влияющих на чтение двоичного лога, или 0, если флаги не установлены. Разрешены следующие значения флагов:
-
MYSQL_RPL_SKIP_HEARTBEATУстановите этот флаг, чтобы вызвать
mysql_binlog_fetch()пропустить события ожидания. -
MYSQL_RPL_GTIDУстановите этот флаг для чтения данных GTID (глобальный идентификатор транзакции). Если установлен, необходимо инициализировать члены структуры
MYSQL_RPL, связанные с GTID, отgtid_set_encoded_sizeдоgtid_set_arg, перед вызовомmysql_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_setравенNULL) или указатель на значение, которое должно быть доступно для использования в функции обратного вызова (еслиfix_gtid_setне равенNULL).gtid_set_arg— это универсальный указатель, поэтому он может указывать на любой тип значения (например, строку, структуру или функцию). Его интерпретация в рамках обратного вызова зависит от того, как обратный вызов планирует его использовать. -
sizeПосле успешного вызова
mysql_binlog_fetch()размер возвращаемого события двоичного лога. Значение равно 0 для события EOF, больше 0 для события, отличного от EOF. -
bufferПосле успешного вызова
mysql_binlog_fetch()указатель на содержимое события двоичного лога.
© 2025 Oracle
Licensed under the GPLv2 License.