RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 3. MGM API

Резюме

В этой главе рассматриваются NDB Cluster Management API, C API, который используется для задач администрирования, таких как старт и остановка узлов, резервные копии и регистрации. Это также покрывает понятия MGM API, программные конструкции и типы событий.

3.1. Концепция MGM API

Для каждой API-функции MGM нужен обработчик сервера типа NdbMgmHandle. Это создается, вызывая функцию ndb_mgm_create_handle() и освобождается ndb_mgm_destroy_handle().

См. разделы 3.2.3.1 и 3.2.3.4 для получения дополнительной информации об этих двух функциях.

Вы не должны разделять NdbMgmHandle между потоками. В то время как возможно сделать так (если вы осуществляете свои собственные блокировки, это не рекомендуется. Каждый поток должен использовать свой собственный обработчик сервера управления.

Функция может возвратить любое из следующего:

  • Целочисленное значение, -1 указывает на ошибку.

  • Непостоянное значение указателя. NULL указывает на ошибку, иначе возвращаемое значение должно быть освобождено программистом.

  • Постоянное значение указателя. NULL указывает на ошибку. Возвращенное значение не должно быть освобождено.

Состояние ошибки может быть определено при помощи соответствующих функций сообщения об ошибке ndb_mgm_get_latest_error() и ndb_mgm_error().

Вот пример использования MGM API (без обработки ошибок для краткости):

NdbMgmHandle handle = ndb_mgm_create_handle();
ndb_mgm_connect(handle,0,0,0);
struct ndb_mgm_cluster_state *state= ndb_mgm_get_status(handle);
for (int i=0; i < state->no_of_nodes; i++)
{
  struct ndb_mgm_node_state *node_state= &state->node_states[i];
  printf("node with ID=%d ", node_state->node_id);
  if (node_state->version != 0) printf("connected\n");
  else printf("not connected\n");
}
free((void*)state);
ndb_mgm_destroy_handle(&handle);

3.1.1. Работа с событиями регистрации

Узлы данных и серверы управления регулярно и в определенных случаях сообщают относительно различных событий регистрации, которые происходят. Эти события регистрации написаны в журнал кластера. Произвольно клиент MGM API может слушать эти события, используя метод ndb_mgm_listen_event(). Каждое событие регистрации принадлежит категории ndb_mgm_event_category и имеет важность ndb_mgm_event_severity, связанную с ним. Каждому событию регистрации также присвоен уровень (0-15).

Регистрацией событий управляют функции ndb_mgm_listen_event(), ndb_mgm_set_clusterlog_loglevel() и ndb_mgm_set_clusterlog_severity_filter().

Это пример, показывающий, как слушать события, связанные с резервной копией:

int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0 };
int fd = ndb_mgm_listen_event(handle, filter);

3.1.2. Структурированные события регистрации

Следующие шаги используются:

  1. Создайте NdbLogEventHandle с помощью ndb_mgm_create_logevent_handle().

  2. Ждите и сохраните события регистрации с использованием ndb_logevent_get_next().

  3. Данные о событии регистрации доступны в структуре ndb_logevent. Данные, которые являются определенными для конкретного события, хранятся в объединении структур, надо использовать ndb_logevent::type, чтобы решить, какая структура действительна.

Следующий пример кода демонстрирует слушание событий, связанных с резервными копиями:

int filter[] = {15, NDB_MGM_EVENT_CATEGORY_BACKUP, 0};
NdbLogEventHandle le_handle= ndb_mgm_create_logevent_handle(handle, filter);
struct ndb_logevent le;
int r= ndb_logevent_get_next(le_handle, &le, 0);
if (r < 0) /*error*/
else if(r == 0) /*no event*/

switch(le.type)
{
  case NDB_LE_BackupStarted:
    ... le.BackupStarted.starting_node;
    ... le.BackupStarted.backup_id;
    break;
  case NDB_LE_BackupFailedToStart:
    ... le.BackupFailedToStart.error;
    break;
  case NDB_LE_BackupCompleted:
    ... le.BackupCompleted.stop_gci;
    break;
  case NDB_LE_BackupAborted:
    ... le.BackupStarted.backup_id;
    break;
  default:
    break;
}

См. раздел 3.2.1.

Доступные типы событий регистрации перечисляются в разделе 3.3.4, а также в файле /storage/ndb/include/mgmapi/ndb_logevent.h исходных текстов NDB Cluster.

3.2. Список API-функций MGM

Резюме

Эта секция покрывает структуры и функции, используемые в MGM API. Списки сгруппированы целью или использованием.

3.2.1. Функции событий регистрации

Резюме

Эта секция обсуждает функции, которые используются, чтобы зарегистрировать события.

3.2.1.1. ndb_mgm_listen_event()

Описание. Эта функция используется, чтобы послушать события регистрации, которые прочитаны из дескриптора файла. События используют основанный на тексте формат, как в регистрации кластера.

Сигнатура.

int ndb_mgm_listen_event
(
  NdbMgmHandle handle,
  const int filter[]
)

Параметры. Эта функция берет два аргумента:

  • NdbMgmHandle handle.

  • filter, который состоит из серии пар {level, ndb_mgm_event_category} (в едином массиве), которые переданы дескриптору файла. Надо использовать 0 для уровня, чтобы закончить список.

Возвращаемое значение. Дескриптор файла, из которого должны быть прочитаны события.

3.2.1.2. ndb_mgm_create_logevent_handle()

Описание. Эта функция используется, чтобы создать обработчик событий регистрации.

Сигнатура.

NdbLogEventHandle ndb_mgm_create_logevent_handle
(
  NdbMgmHandle handle,
  const int filter[]
)

Параметры. Эта функция берет два аргумента:

  • NdbMgmHandle handle.

  • filter, который состоит из серии пар {level, ndb_mgm_event_category} (в едином массиве), которые переданы дескриптору файла. Надо использовать 0 для уровня, чтобы закончить список.

Возвращаемое значение. Обработчик событий регистрации.

3.2.1.3. ndb_mgm_destroy_logevent_handle()

Описание. Используйте эту функцию, чтобы уничтожить обработчик событий регистрации, когда не будет никакой дальнейшей потребности в нем.

Сигнатура.

void ndb_mgm_destroy_logevent_handle
(
  NdbLogEventHandle* handle
)

Параметры. Указатель на событие регистрации handle.

Возвращаемое значение. Нет.

3.2.1.4. ndb_logevent_get_fd()

Описание. Эта функция восстанавливает дескриптор файла из NdbMgmLogEventHandle, этот дескриптор может использоваться в (например) вызове select().

Не пытайтесь читать от дескриптора файла, возвращенного этой функцией, это может заставить описатель становиться испорченным.

Сигнатура.

int ndb_logevent_get_fd
(
  const NdbLogEventHandle handle
)

Параметры. LogEventHandle.

Возвращаемое значение. Дескриптор файла. В случае неудачи -1.

3.2.1.5. ndb_logevent_get_next()

Описание. Эта функция используется, чтобы восстановить следующее событие регистрации, используя данные из события, чтобы заполнить структуру ndb_logevent.

Сигнатура.

int ndb_logevent_get_next
(
  const NdbLogEventHandle handle,
  struct ndb_logevent* logevent,
  unsigned timeout
)

До NDB 7.2.14 и NDB 7.3.2 события регистрации ndb_mgm_event_category приводились к типу enum. Это поведение, хотя и неправильное, вмешалось в существующие приложения и было восстановлено в NDB 7.2.18 и NDB 7.3.7, новая функция, использующая исправленное поведение, это ndb_logevent_get_next2() была добавлена в этих выпусках.

Параметры. Три параметра ожидаются этой функцией:

  • NdbLogEventHandle.

  • Указатель на структуру данных ndb_logevent.

  • Количество миллисекунд, чтобы ждать события до тайм-аута, передача 0 в этот параметр заставляет функцию ждать, пока следующее событие регистрации не получено.

Возвращаемое значение. Значение, возвращенное этой функцией, интерпретируется следующим образом: Если возвращаемое значение меньше чем или равно нолю, то logevent не изменен или затронут в любом случае.

  • > 0: Событие существует, данные были получены в logevent.

  • 0: Тайм-аут произошел, ожидая события (больше, чем timeout миллисекунд).

  • < 0: Ошибка произошла.

3.2.1.6. ndb_logevent_get_next2()

Описание. Эта функция используется, чтобы получить следующее событие регистрации, используя данные из события, чтобы заполнить структуру ndb_logevent.

ndb_logevent_get_next2() была добавлена в NDB 7.2.18 и NDB 7.3.7. Это предназначается, чтобы служить заменой для for ndb_logevent_get_next(), которая исправляет обработку структуры ndb_mgm_event_category для приложений, которые не требуют обратной совместимости. Это в других отношениях идентично ndb_logevent_get_next().

Сигнатура.

int ndb_logevent_get_next2
(
  const NdbLogEventHandle handle,
  struct ndb_logevent* logevent,
  unsigned timeout
)

Параметры. Три параметра ожидаются этой функцией:

  • An NdbLogEventHandle.

  • Указатель на структуру ndb_logevent .

  • Количество миллисекунд, чтобы ждать события до тайм-аута, 0 заставляет функцию ждать, пока следующее событие регистрации не получено.

Возвращаемое значение. Значение, возвращенная этой функцией, интерпретируется следующим образом: Если возвращаемое значение меньше чем или равно нолю, то logevent не изменен или затронут в любом случае.

  • > 0: Событие существует, данные были получены в logevent.

  • 0: Тайм-аут произошел, ожидая события больше timeout миллисекунд.

  • < 0: Ошибка произошла.

3.2.1.7. ndb_logevent_get_latest_error()

Описание. Эта функция получает код ошибки.

Можно предпочесть использовать ndb_logevent_get_latest_error_msg(), см. раздел 3.2.1.8 .

Сигнатура.

int ndb_logevent_get_latest_error
(
  const NdbLogEventHandle handle
)

Параметры. Обработчик событий регистрации.

Возвращаемое значение. Код ошибки.

3.2.1.8. ndb_logevent_get_latest_error_msg()

Описание. Получает текст новой ошибки, полученной, пытаясь прочитать события регистрации.

Сигнатура.

const char* ndb_logevent_get_latest_error_msg
(
  const NdbLogEventHandle handle
)

Параметры. Обработчик событий регистрации.

Возвращаемое значение. Текст сообщения об ошибке.

3.2.2. Функции обработки ошибок MGM API

Резюме

Функции MGM API, используемые для обработки ошибок, обсуждены в этой секции.

Каждая ошибка MGM API характеризуется кодом ошибки и сообщением об ошибке. Может также быть описание ошибки, которое может предоставить дополнительную информацию об ошибке. API обеспечивает функции, чтобы получить эту информацию в случае ошибки.

3.2.2.1. ndb_mgm_get_latest_error()

Описание. Эта функция используется, чтобы связать последний код ошибки с данным обработчиком сервера управления.

До NDB 7.4.8 эта функция не была безопасна для использования с NULL. В более поздних версиях ndb_mgm_get_latest_error() NULL-безопасна, но возвращает произвольное значение (Bug #78130, Bug #21651706).

Сигнатура.

int ndb_mgm_get_latest_error
(
  const NdbMgmHandle handle
)

Параметры. NdbMgMHandle.

Возвращаемое значение. Код ошибки, соответствующий ndb_mgm_error. Можно получить связанное сообщение об ошибке, применяя ndb_mgm_get_latest_error_msg().

3.2.2.2. ndb_mgm_get_latest_error_msg()

Описание. Эта функция используется, чтобы получить последнее общее сообщение об ошибке, связанное с NdbMgmHandle.

До NDB 7.4.8 эта функция не была безопасна для использования с NULL. В более поздних версиях ndb_mgm_get_latest_error() NULL-безопасна, но возвращает произвольное значение (Bug #78130, Bug #21651706).

Сигнатура.

const char* ndb_mgm_get_latest_error_msg
(
  const NdbMgmHandle handle
)

Параметры. NdbMgmHandle.

Возвращаемое значение. Текст сообщения об ошибке. Более определенная информация может быть получена, используя ndb_mgm_get_latest_error_desc().

3.2.2.3. ndb_mgm_get_latest_error_desc()

Описание. Получает новое описание ошибки, связанной с NdbMgmHandle, это описание предоставляет дополнительную информацию относительно сообщения об ошибке.

До NDB 7.4.8 эта функция не была безопасна для использования с NULL. В более поздних версиях ndb_mgm_get_latest_error() NULL-безопасна, но возвращает произвольное значение (Bug #78130, Bug #21651706).

Сигнатура.

const char* ndb_mgm_get_latest_error_desc
(
  const NdbMgmHandle handle
)

Параметры. NdbMgmHandle.

Возвращаемое значение. Текст описания ошибки.

3.2.2.4. ndb_mgm_set_error_stream()

Описание. Функция может использоваться, чтобы установить поток вывода ошибок.

Сигнатура.

void ndb_mgm_set_error_stream
(
  NdbMgmHandle handle,
  FILE* file
)

Параметры. Эта функция требует двух параметров:

  • NdbMgmHandle.

  • Указатель на файл, в который должны быть посланы ошибки.

Возвращаемое значение. Нет.

3.2.3. Функции обработчика сервера управления

Резюме

Эта секция содержит информацию об API-функциях MGM используемых, чтобы создать и уничтожить обработчик сервера управления.

3.2.3.1. ndb_mgm_create_handle()

Описание. Эта функция используется, чтобы создать обработчик сервера управления.

Сигнатура.

NdbMgmHandle ndb_mgm_create_handle(void)

Параметры. Нет.

Возвращаемое значение. NdbMgmHandle.

3.2.3.2. ndb_mgm_set_name()

Описание. Эта функция может использоваться, чтобы определить имя для обработчика сервера управления, о котором сообщают в регистрации кластера.

Сигнатура.

void ndb_mgm_set_name
(
  NdbMgmHandle handle,
  const char* name
)

Параметры. Эта функция берет два аргумента:

  • Сервер управления handle .

  • Желаемое name для handle.

Возвращаемое значение. Нет.

3.2.3.3. ndb_mgm_set_ignore_sigpipe()

Описание. MGM API по умолчанию устанавливает обработчик сигнала, который игнорирует все SIGPIPE, которые могли бы произойти, при записи в сокет, который был закрыт или перезагружен. Приложение, которое предоставляет собственный обработчик для SIGPIPE, должно вызвать эту функцию после создания обработчика сервера управления и перед использованием обработчика, чтобы соединиться с сервером управления. Другими словами, вызовите эту функцию после использования ndb_mgm_create_handle(), но до ndb_mgm_connect(), который вызывает обработчик MGM API SIGPIPE, который будет установлен, если не перекрыт.

Сигнатура.

int ndb_mgm_set_ignore_sigpipe
(
  NdbMgmHandle handle,
  int ignore = 1
)

Параметры. Эта функция берет два параметра:

  • Обработчик сервера управления.

  • Целочисленное значение, которое определяет игнорировать ли SIGPIPE. Установите это в 1 (по умолчанию), чтобы заставлять MGM API игнорировать SIGPIPE, установите в 0, если вы желаете размножать SIGPIPE к вашему приложению.

Возвращаемое значение. Нет.

3.2.3.4. ndb_mgm_destroy_handle()

Описание. Эта функция уничтожает обработчик сервера управления.

Сигнатура.

void ndb_mgm_destroy_handle
(
  NdbMgmHandle* handle
)

Параметры. Указатель на NdbMgmHandle, который должен быть разрушен.

Возвращаемое значение. Нет.

3.2.4. Функции связи сервера управления

Резюме

Эта секция обсуждает API-функции MGM, которые используются, чтобы начать, формировать и закончить связи с сервером управления NDB.

3.2.4.1. ndb_mgm_get_connectstring()

Описание. Эта функция получает строку подключения, используемую для связи.

Эта функция возвращает строку подключения по умолчанию если никакого вызова ndb_mgm_set_connectstring() не было. Кроме того, возвращенная строка подключения может быть отформатирована немного по-другому, чем оригинал, это может содержать спецификаторы, не существующие в оригинале.

Формат строки подключения совпадает с обсужденным в разделе 3.2.4.10.

Сигнатура.

const char* ndb_mgm_get_connectstring
(
  NdbMgmHandle handle,
  char* buffer,
  int size
)

Параметры. Эта функция берет три аргумента:

  • NdbMgmHandle.

  • Указатель на buffer, куда поместить результат.

  • Размер size буфера.

Возвращаемое значение. Строка подключения это то же самое значение, которое передано в buffer.

3.2.4.2. ndb_mgm_get_configuration_nodeid()

Описание. Эта функция получает ID узла, к которому было сделано подключение.

Сигнатура.

int ndb_mgm_get_configuration_nodeid
(
  NdbMgmHandle handle
)

Параметры. Обработчик сервера управления.

Возвращаемое значение. A node ID.

3.2.4.3. ndb_mgm_get_connected_port()

Описание. Эта функция получает номер порта, используемого связью.

Сигнатура.

int ndb_mgm_get_connected_port
(
  NdbMgmHandle handle
)

Параметры. NdbMgmHandle.

Возвращаемое значение. Номер порта.

3.2.4.4. ndb_mgm_get_connected_host()

Описание. Эта функция используется, чтобы получить имя хоста, с которым установлена связь.

Сигнатура.

const char* ndb_mgm_get_connected_host
(
  NdbMgmHandle handle
)

Параметры. Обработчик сервера управления handle.

Возвращаемое значение. Имя хоста.

3.2.4.5. ndb_mgm_get_version()

Описание. Учитывая обработчик сервера управления, эта функция получает информацию о версии сервера MySQL и механизма хранения NDB для обозначенного сервера управления.

Сигнатура.

int ndb_mgm_get_version
(
  NdbMgmHandle handle,
  int* major,
  int* minor,
  int* build,
  int length,
  char* string
)

Параметры. NdbMgmHandle и указатели на значения версии NDB, major, minor и build, а также указатель на версию string (наряду с length).

Строка версии использует формат mysql-x.x.x ndb-y.y.y- status, где x.x.x это трехчастная версия сервера MySQL, и y.y.y это трехчастная версия механизма хранения NDB. Строка status указывает на уровень выпуска или статус, обычно это одно из beta, rc или ga, но другие значения иногда возможны.

Возвращаемое значение. ndb_mgm_get_version() вернет integer, 0 при удаче, любое ненулевое значение указывает на ошибку.

3.2.4.6. ndb_mgm_is_connected()

Описание. Используется, чтобы определить, была ли связь установлена.

Эта функция не определяет, есть ли рабочий сервер управления на другом конце связи. Используйте ndb_mgm_check_connection(), чтобы выполнить эту задачу.

Сигнатура.

int ndb_mgm_is_connected
(
  NdbMgmHandle handle
)

Параметры. Сервер управления handle.

Возвращаемое значение. Эта функция возвращает целое число, значение которого интерпретируется следующим образом:

  • 0: Не связан с узлом управления.

  • Любое ненулевое значение: связь была установлена с узлом управления.

3.2.4.7. ndb_mgm_check_connection()

Описание. Эта функция может использоваться, чтобы определить, работает ли сервер управления на данной связи.

Сигнатура.

int ndb_mgm_check_connection
(
  NdbMgmHandle handle
)

Параметры. NdbMgmHandle (см. раздел 3.1).

Возвращаемое значение. В NDB 7.5 и позже эта функция возвращает 0 при успехе, -1, когда обработчик пустой и -2, если не связан.

В NDB 7.4 и ранее, эта функция возвращает -1 в случае ошибки, иначе это возвратит 0, даже когда обработчик сервера управления был NULL или когда проверка связи потерпела неудачу (Bug #53242, Bug #11760802).

3.2.4.8. ndb_mgm_number_of_mgmd_in_connect_string()

Описание. Это функция удобства, которая обеспечивает легкий способ определить количество серверов управления, на которые ссылаются в строке подключения, как установлено использованием ndb_mgm_set_connectstring().

Сигнатура.

int ndb_mgm_number_of_mgmd_in_connect_string
(
  NdbMgmHandle handle
)

Параметры. Обработчик управления (NdbMgmHandle).

Возвращаемое значение. При успехе неотрицательное целое число, отрицательное целое число указывает на неудачу.

3.2.4.9. ndb_mgm_set_bindaddress()

Описание. Эта функция позволяет установить локальный адрес для сервера управления. Если используется, это нужно вызвать прежде, чем соединиться с сервером управления.

Сигнатура.

int ndb_mgm_set_bindaddress
(
  NdbMgmHandle handle,
  const char* address
)

Параметры. Эта функция берет два параметра:

  • Обработчик управления (NdbMgmHandle).

  • Строка address в форме host[: port].

Возвращаемое значение. Вернет integer:

  • 0 = успех.

  • Любое ненулевое значение указывает на неудачу (адрес не был действителен).

    Об ошибках, вызванных другими причинами, при действительном местном адресе не сообщают, пока связь с управлением на самом деле не предпринята.

3.2.4.10. ndb_mgm_set_connectstring()

Описание. Эта функция используется, чтобы установить строку подключения для связи сервера управления с узлом.

Сигнатура.

int ndb_mgm_set_connectstring
(
  NdbMgmHandle handle,
  const char* connection_string
)

Параметры. ndb_mgm_set_connectstring() берет два параметра:

  • Сервер управления handle.

  • A connection_string, чей формат показывают здесь:

    connection_string :=
    [nodeid-specification,
    ]host-specification[,
    host-specification]
    

    ndb_mgm_get_connectstring() также использует этот формат для строк подключения.

    Возможно установить связи с многими серверами управления, используя единственную строку подключения.

    nodeid-specification := nodeid=id
    host-specification := host[:port]
    

    id, port и host определяются следующим образом:

    • id: Целое число больше 0, идентификация узла в config.ini.

    • port: Целое число, относящееся к стандартному порту Unix.

    • host: Строка, содержащая действительный адрес сетевого узла.

Возвращаемое значение. Эта функция вернет -1 в случае неудачи.

3.2.4.11. ndb_mgm_set_configuration_nodeid()

Описание. Эта функция устанавливает ID узла подключения.

Сигнатура.

int ndb_mgm_set_configuration_nodeid
(
  NdbMgmHandle handle,
  int id
)

Параметры. Эта функция требует двух параметров:

  • NdbMgmHandle.

  • id узла, чтобы соединиться.

Возвращаемое значение. Эта функция вернет -1 в случае неудачи.

3.2.4.12. ndb_mgm_set_timeout()

Описание. Обычно сетевой тайм-аут 60 секунд. Эта функция разрешает вам варьировать это время.

Тайм-аут, установленный этой функцией, применяется не только к установлению сетевых соединений, но и к каждой операции, требующей коммуникации, используя сетевое соединение. Это включает каждое чтение или запись по сети, выполненное любой API-функцией MGM, методом NDB API или ndb_mgm.

Сигнатура.

int ndb_mgm_set_timeout
(
  NdbMgmHandle handle,
  unsigned int timeout
)

Параметры. Эта функция берет два параметра:

  • Обработчик сервера управления (NdbMgmHandle).

  • Количество времени, чтобы ждать, в миллисекундах.

Возвращаемое значение. 0 = успех, любое другое значение = неудача.

3.2.4.13. ndb_mgm_connect()

Описание. Эта функция устанавливает связь с сервером управления, определенным строкой подключения, установленной в разделе 3.2.4.10.

Сигнатура.

int ndb_mgm_connect
(
  NdbMgmHandle handle,
  int retries,
  int delay,
  int verbose
)

Параметры. Эта функция берет 4 аргумента:

  • Сервер управления handle .

  • Количество повторов retries, которые надо сделать, пытаясь соединиться. 0 означает, что только одна попытка подключения будет сделана.

  • Число секунд delay между попытками подключения.

  • Если verbose = 1, сообщение печатается для каждой попытки подключения.

Возвращаемое значение. Эта функция вернет -1 в случае неудачи.

3.2.4.14. ndb_mgm_disconnect()

Описание. Эта функция заканчивает связь с сервером управления.

Сигнатура.

int ndb_mgm_disconnect
(
  NdbMgmHandle handle
)

Параметры. NdbMgmHandle.

Возвращаемое значение. Вернет -1, если не получилось разъединиться.

3.2.5. Функции статуса кластера

Резюме

Эта секция обсуждает, как получить информацию о статусе из узлов кластера NDB.

3.2.5.1. ndb_mgm_get_status()

Описание. Эта функция используется, чтобы получить статус узлов в NDB Cluster.

Вызывающий должен освободить указатель, возвращенный этой функцией.

Сигнатура.

struct ndb_mgm_cluster_state* ndb_mgm_get_status
(
  NdbMgmHandle handle
)

Параметры. Эта функция берет единственный параметр, сервер управления handle.

Возвращаемое значение. Указатель на структуру данных ndb_mgm_cluster_state.

3.2.5.2. ndb_mgm_get_status2()

Описание. Эта функция подобна ndb_mgm_get_status(), это используется, чтобы получить статус узлов в NDB Cluster. Но ndb_mgm_get_status2() позволяет определять тип или типы узлов ( ndb_mgm_node_type) для проверки.

Вызывающий должен освободить указатель, возвращенный этой функцией.

Сигнатура.

struct ndb_mgm_cluster_state* ndb_mgm_get_status2
(
  NdbMgmHandle handle,
  const enum ndb_mgm_node_type types[]
)

Параметры. Эта функция берет два параметра:

  • Сервер управления handle .

  • Указатель на множество типов узлов, которые будут проверены. Это значения ndb_mgm_node_type. Множество должно быть закончено элементом типа NDB_MGM_NODE_TYPE_UNKNOWN.

Возвращаемое значение. Указатель на структуру данных ndb_mgm_cluster_state.

3.2.5.3. ndb_mgm_dump_state()

Описание. Эта функция может использоваться, чтобы сбросить в дамп отладочную информацию в журнал кластера. Клиент управления NDB Cluster DUMP это обертка для этой функции.

ndb_mgm_dump_state(), как команда DUMP, может заставить NDB Cluster работать со сбоями или даже терпеть неудачу полностью, если она используется неправильно. Обязательно консультируйтесь с соответствующей документацией перед использованием этой функции. Для получения дополнительной информации о DUMP, списка текущих кодов a listing of current DUMP и их эффектов см. NDB Cluster Management Client DUMP Commands.

Сигнатура.

int ndb_mgm_dump_state
(
  NdbMgmHandle handle,
  int nodeId,
  const int* arguments,
  int numberOfArguments,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция берет следующие параметры:

  • Обработчик сервера управления (NdbMgmHandle).

  • nodeId узла данных кластера.

  • Множество arguments. Первый из них это код DUMP, который будет выполнен. Последующие аргументы могут быть переданы в этом множестве в случае необходимости для передачи команде DUMP.

  • numberOfArguments для передачи.

  • ndb_mgm_reply, который содержит код возврата наряду с ответом или сообщением об ошибке.

Возвращаемое значение. 0 = успех, иначе код ошибки.

Пример. У следующего примера есть тот же самый результат как у выполнения в клиенте управления команды 2 DUMP 1000:

//[...]
#include <mgmapi_debug.h>
//[...]
struct ndb_mgm_reply reply;
int args[1];
int stat, arg_count, node_id;

args[0] = 1000;
arg_count = 1;
node_id = 2;
stat = ndb_mgm_dump_state(h, node_id, args, arg_count, &reply);

3.2.6. Функции для старта и остановки узлов

Резюме

MGM API обеспечивает несколько функций, которые могут использоваться, чтобы начать, остановить и перезапустить один или несколько узлов данных. Эти функции обсуждены в этой секции.

Старт, остановка и перезапуск узлов. Можно начать, остановить и перезапустить узлы кластера, используя следующие функции, которые описаны более подробно в следующих нескольких секциях.

  • Старт узлов. ndb_mgm_start().

  • Остановка узлов. ndb_mgm_stop(), ndb_mgm_stop2(), ndb_mgm_stop3() или ndb_mgm_stop4().

    Обычно вы не можете использовать ни одну из этих функций, чтобы остановить узел, в то время как другие узлы запускаются. Можно отвергнуть это ограничение с использованием ndb_mgm_stop4() с параметром force = 1.

  • Перезапуск узлов. ndb_mgm_restart(), ndb_mgm_restart2(), ndb_mgm_restart3() или ndb_mgm_restart4().

    Обычно вы не можете использовать ни одну из этих функций, чтобы остановить узел, в то время как другие узлы запускаются. Можно отвергнуть это ограничение с использованием ndb_mgm_restart4() с параметром force = 1.

3.2.6.1. ndb_mgm_start()

Описание. Эта функция может использоваться, чтобы запустить один или несколько узлов кластера. Узлы, которые будут запущены, были запущены с опцией no-start (-n), означая, что узел данных был запущен и ждет команды START, которая на самом деле включает узел.

Сигнатура.

int ndb_mgm_start
(
  NdbMgmHandle handle,
  int number,
  const int* list
)

Параметры. ndb_mgm_start() берет 3 параметра:

  • NdbMgmHandle.

  • number узлов, которые будут запущены. Надо использовать 0, чтобы запустить все узлы данных.

  • list node ID узлов, которые будут запущены.

Возвращаемое значение. Количество узлов, которое на самом деле запущено, в случае неудачи ваозвращается -1.

3.2.6.2. ndb_mgm_stop()

Описание. Эта функция останавливает один или несколько узлов данных.

Сигнатура.

int ndb_mgm_stop
(
  NdbMgmHandle handle,
  int number,
  const int* list
)

Параметры. ndb_mgm_stop() берет 3 параметра: вызов этой функции эквивалентен запросу ndb_mgm_stop2(handle, number, list, 0).

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

Возвращаемое значение. Сколько узлов на самом деле остановлено, в случае неудачи -1.

3.2.6.3. ndb_mgm_stop2()

Описание. Аналог ndb_mgm_stop(), эта функция останавливает один или несколько узлов данных. Однако это предлагает способность определить действительно ли выключение узлов правильно.

Сигнатура.

int ndb_mgm_stop2
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int abort
)

Параметры. ndb_mgm_stop2() берет 4 параметра:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

  • abort определяет, как узлы будут остановлены. 1 указывает, что узлы немедленно отключатся, 0, что узлы остановятся аккуратно.

Возвращаемое значение. Сколько узлов на самом деле остановлено, в случае неудачи -1.

3.2.6.4. ndb_mgm_stop3()

Описание. Аналог ndb_mgm_stop() и ndb_mgm_stop2(), эта функция останавливает один или несколько узлов данных. Как ndb_mgm_stop2(), предлагает способность определить, должны ли узлы остановиться правильно. Кроме того, это предусматривает способ проверить, требуется ли разъединение до остановки узла.

Сигнатура.

int ndb_mgm_stop3
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int abort,
  int* disconnect
)

Параметры. ndb_mgm_stop3() берет 5 параметров:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • A list node ID для остановки.

  • abort определяет, как узлы будут остановлены. 1 указывает, что узлы немедленно отключатся, 0, что узлы остановятся аккуратно.

  • Если disconnect вернет 1 (true), это означает, что вы должны разъединить связь, прежде чем можно будет применить команду, чтобы остановить. Например, разъединение требуется, останавливая сервер управления, с которым связан обработчик.

Возвращаемое значение. Сколько узлов на самом деле остановлено, в случае неудачи -1.

3.2.6.5. ndb_mgm_stop4()

Описание. Аналогично прочим ndb_mgm_stop *(), эта функция останавливает один или несколько узлов данных. Как ndb_mgm_stop2(), это предлагает способность определить, должны ли узлы остановиться правильно, как ndb_mgm_stop3() это предусматривает способ проверить, требуется ли разъединение до остановки узла. Кроме того, возможно вынудить узел остановиться, даже если это заставило бы кластер стать нежизнеспособным.

Сигнатура.

int ndb_mgm_stop4
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int abort,
  int force,
  int* disconnect
)

Параметры. ndb_mgm_stop4() берет 6 параметров:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

  • abort определяет, как узлы будут остановлены. 1 указывает, что узлы немедленно отключатся, 0, что узлы остановятся аккуратно.

  • force определяет, действие, которое будет выполнено, если остановка данного узла вызвала бы неполную группу. 1 заставляет узел и весь кластер быть остановленным в таких случаях, 0 означает, что узел не будет остановлен.

    force = 1 также позволяет остановить узел даже в то время, как другие узлы запускаются (Bug #58451).

  • Если disconnect вернет 1 (true), это означает, что вы должны разъединить связь, прежде чем можно будет применить команду, чтобы остановить. Например, разъединение требуется, останавливая сервер управления, с которым связан обработчик.

Возвращаемое значение. Сколько узлов на самом деле остановлено, в случае неудачи -1.

3.2.6.6. ndb_mgm_restart()

Описание. Эта функция может использоваться, чтобы перезапустить один или несколько узлов данных.

Сигнатура.

int ndb_mgm_restart
(
  NdbMgmHandle handle,
  int number,
  const int* list
)

Параметры. ndb_mgm_restart() берет 3 параметра:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

Вызов этой функции равнозначен:

ndb_mgm_restart2(handle,
                 number,
                 list, 0, 0, 0);

См. раздел 3.2.6.7.

Возвращаемое значение. Сколько узлов на самом деле остановлено, в случае неудачи -1.

3.2.6.7. ndb_mgm_restart2()

Описание. Аналог ndb_mgm_restart(), эта функция может использоваться, чтобы перезапустить один или несколько узлов данных, но ndb_mgm_restart2() предоставляет дополнительные возможности перезапуска, включая начальный перезапуск, ожидание запуска и непосредственный (принудительный) перезапуск.

Сигнатура.

int ndb_mgm_restart2
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int initial
  int nostart,
  int abort
)

Параметры. ndb_mgm_restart2() берет 6 параметров:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

  • Если initial = true (1), тогда каждый узел подвергается начальному перезапуску, то есть его файловая система удалена.

  • Если nostart = true, тогда узлы на самом деле не запущены, а вместо этого оставлены готовыми к команде запуска.

  • Если abort = true, тогда узлы немедленно перезапущены, обойдя любой аккуратный перезапуск.

Возвращаемое значение. Сколько узлов на самом деле перезапущено, в случае неудачи -1.

3.2.6.8. ndb_mgm_restart3()

Описание. Аналог ndb_mgm_restart2(), эта функция может использоваться, чтобы вызвать начальный перезапуск, ожидание перезапуска и непосредственный (принудительный) перезапуск на одном или более узлах данных, но ndb_mgm_restart3() предоставляет дополнительные возможности проверки, требуется ли разъединение до перезапуска.

Сигнатура.

int ndb_mgm_restart3
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int initial
  int nostart,
  int abort,
  int* disconnect
)

Параметры. ndb_mgm_restart3() берет 7 параметров:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

  • Если initial = true (1), тогда каждый узел подвергается начальному перезапуску, то есть его файловая система удалена.

  • Если nostart = true, тогда узлы на самом деле не запущены, а вместо этого оставлены готовыми к команде запуска.

  • Если abort = true, тогда узлы немедленно перезапущены, обойдя любой аккуратный перезапуск.

  • Если disconnect вернет 1 (true), это означает, что вы должны разъединить связь, прежде чем можно будет применить команду перезапуска. Например, разъединение требуется, останавливая сервер управления, с которым связан обработчик.

Возвращаемое значение. Сколько узлов на самом деле перезапущено, в случае неудачи -1.

3.2.6.9. ndb_mgm_restart4()

Описание. Аналог ndb_mgm_stop3(), но возможно вынудить узел перезапуститься, даже если это вызвало бы перезапуск всего кластера.

Сигнатура.

int ndb_mgm_restart4
(
  NdbMgmHandle handle,
  int number,
  const int* list,
  int initial
  int nostart,
  int abort,
  int force,
  int* disconnect
)

Параметры. ndb_mgm_restart4() берет 7 параметров:

  • NdbMgmHandle.

  • number число узлов для остановки. 0 остановит все узлы.

  • list node ID для остановки.

  • Если initial = true (1), тогда каждый узел подвергается начальному перезапуску, то есть его файловая система удалена.

  • Если nostart = true, тогда узлы на самом деле не запущены, а вместо этого оставлены готовыми к команде запуска.

  • Если abort = true, тогда узлы немедленно перезапущены, обойдя любой аккуратный перезапуск.

  • force определяет действие, которое будет выполнено, если потеря данного узла из-за перезапуска вызвала бы неполный кластер.

    1 заставляет узел и весь кластер быть перезапущенным в таких случаях, 0 значит, что узел не будет перезапущен.

    force = 1 также позволяет перезапустить узел даже в то время, как другие узлы запускаются (Bug #58451).

  • Если disconnect вернет 1 (true), это означает, что вы должны разъединить связь, прежде чем можно будет применить команду перезапуска. Например, разъединение требуется, останавливая сервер управления, с которым связан обработчик.

Возвращаемое значение. Сколько узлов на самом деле перезапущено, в случае неудачи -1.

3.2.7. Функции регистрации событий кластера

Резюме

Эта секция покрывает функции, доступные в MGM API для управления выводом регистрации кластера.

3.2.7.1. ndb_mgm_get_clusterlog_severity_filter()

Описание. Эта функция используется, чтобы получить фильтр важности регистрации кластера.

Сигнатура.

int ndb_mgm_get_clusterlog_severity_filter
(
  NdbMgmHandle handle,
  struct ndb_mgm_severity* severity,
  unsigned int size
)

Параметры.

  • NdbMgmHandle .

  • Вектор severity из семи элементов (NDB_MGM_EVENT_SEVERITY_ALL), каждый из которых это структура ndb_mgm_severity, где каждый элемент содержит 1, если индикатор позволен и 0 иначе. Уровень важности сохранен в ndb_mgm_clusterlog_level, например, ошибочный уровень сохранен в NDB_MGM_EVENT_SEVERITY_ERROR. Первый элемент (NDB_MGM_EVENT_SEVERITY_ON) в векторе указывает, отключена ли регистрация кластера или позволена.

  • size размер вектора (NDB_MGM_EVENT_SEVERITY_ALL).

Возвращаемое значение. Номер уровня важности или -1 в случае ошибки.

3.2.7.2. ndb_mgm_set_clusterlog_severity_filter()

Описание. Эта функция используется, чтобы установить фильтр важности регистрации.

Сигнатура.

int ndb_mgm_set_clusterlog_severity_filter
(
  NdbMgmHandle handle,
  enum ndb_mgm_event_severity severity,
  int enable,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция берет 4 параметра:

  • Сервер управления handle .

  • Уровень важности severity.

  • Флаг enable для включения или выключения фильтра, 1 включить, 0 выключить.

  • Указатель на структуру ndb_mgm_reply для ответного сообщения.

Возвращаемое значение. -1 в случае неудачи.

3.2.7.3. ndb_mgm_get_clusterlog_loglevel()

Описание. Эта функция используется, чтобы получить категорию регистрации и информацию об уровне, ориентирована на многопотоковое исполнение.

Сигнатура.

int ndb_mgm_get_clusterlog_loglevel
(
  NdbMgmHandle handle,
  struct ndb_mgm_loglevel* loglevel,
  unsigned int size
)

Параметры. ndb_mgm_get_clusterlog_loglevel() берет следующие параметры:

  • Обработчик handle ( NdbMgmHandle).

  • Вектор loglevel (уровень регистрации событий), состоящий из двенадцати элементов, каждый из которых структура ndb_mgm_loglevel представляет уровень регистрации соответствующей категории.

  • Размер size вектора (MGM_LOGLEVELS).

Возвращаемое значение. Эта функция возвращает количество возвращенных уровней или -1 в случае ошибки.

3.2.7.4. ndb_mgm_set_clusterlog_loglevel()

Описание. Эта функция используется, чтобы установить категорию регистрации и уровни для регистрации кластера.

Сигнатура.

int ndb_mgm_set_clusterlog_loglevel
(
  NdbMgmHandlehandle,
  int id,
  enum ndb_mgm_event_category category,
  int level,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция берет 5 параметров:

  • An NdbMgmHandle.

  • id затронутого узла.

  • Событие category это одно из значений, перечисленных в разделе 3.3.7.

  • Уровень регистрации level.

  • Указатель на структуру ndb_mgm_reply для сообщения reply.

Возвращаемое значение. В случае ошибки эта функция вернет -1.

3.2.8. Функции резервного копирования

Резюме

Эта секция покрывает функции, обеспеченные в MGM API для старта и остановки резервных копий.

3.2.8.1. ndb_mgm_start_backup()

Описание. Эта функция используется, чтобы начать резервную копию кластера NDB.

Сигнатура.

int ndb_mgm_start_backup
(
  NdbMgmHandlehandle,
  int wait,
  unsigned int* id,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция требует 4 параметров:

  • Обработчик handle (NdbMgmHandle).

  • Флаг wait со следующими возможными значениями:

    • 0: Не ждите подтверждения резервной копии.

    • 1: Ждите начала резервной копии.

    • 2: Ждите окончания резервной копии.

  • id резервной копии.

    Никакой id резервной копии не возвращен, если wait = 0.

  • Указатель на структуру ndb_mgm_reply, чтобы обработать reply.

Возвращаемое значение. В случае неудачи функция вернет -1.

3.2.8.2. ndb_mgm_abort_backup()

Описание. Эта функция используется, чтобы остановить резервную копию кластера.

Сигнатура.

int ndb_mgm_abort_backup
(
  NdbMgmHandle handle,
  unsigned int id,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция берет 3 параметра:

  • NdbMgmHandle.

  • id резервной копии, которая будет прервана.

  • Указатель на структуру ndb_mgm_reply.

Возвращаемое значение. В случае ошибки эта функция вернет -1.

3.2.9. Однопользовательские функции

Резюме

MGM API позволяет программисту поместить кластер в однопользовательский режим и возвратить его к нормальному режиму из приложения. Эта секция покрывает функции, которые используются для этих операций.

3.2.9.1. ndb_mgm_enter_single_user()

Описание. Эта функция используется, чтобы войти в однопользовательский режим в данном узле.

Сигнатура.

int ndb_mgm_enter_single_user
(
  NdbMgmHandle handle,
  unsigned int id,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция берет 3 параметра:

  • An NdbMgmHandle.

  • id узла, который будет использоваться в однопользовательском режиме.

  • Указатель на структуру ndb_mgm_reply для сообщения reply.

Возвращаемое значение. Вернет -1 в случае неудачи.

3.2.9.2. ndb_mgm_exit_single_user()

Описание. Эта функция используется, чтобы выйти из однопользовательского режима и возвратиться к нормальному функционированию.

Сигнатура.

int ndb_mgm_exit_single_user
(
  NdbMgmHandle handle,
  struct ndb_mgm_reply* reply
)

Параметры. Эта функция требует 2 аргументов:

Возвращаемое значение. Вернет -1 в случае ошибки.

3.3. Типы данных MGM API

Резюме

Эта секция обсуждает типы данных, определенные MGM API.

Типы, описанные в этой секции, все определяются в файле /storage/ndb/include/mgmapi/mgmapi.h, за исключением Ndb_logevent_type, ndb_mgm_event_severity, ndb_mgm_logevent_handle_error и ndb_mgm_event_category, которые определяются в /storage/ndb/include/mgmapi/ndb_logevent.h.

3.3.1. Тип ndb_mgm_node_type

Описание. Это используется, чтобы классифицировать различные типы узлов в NDB Cluster.

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.1. Значения и описания типа ndb_mgm_node_type.

Значение Описание
NDB_MGM_NODE_TYPE_UNKNOWNUnknown
NDB_MGM_NODE_TYPE_APIУзел API (узел SQL)
NDB_MGM_NODE_TYPE_NDB Узел данных
NDB_MGM_NODE_TYPE_MGM Узел управления

3.3.2. Тип ndb_mgm_node_status

Описание. Этот тип описывает статус узла кластера.

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.2. Тип ndb_mgm_node_status.

Значение Описание
NDB_MGM_NODE_STATUS_UNKNOWN Статус узла неизвестен
NDB_MGM_NODE_STATUS_NO_CONTACT С узлом нельзя связаться
NDB_MGM_NODE_STATUS_NOT_STARTED Узел еще не выполнил протокол запуска
NDB_MGM_NODE_STATUS_STARTING Узел выполняет протокол запуска
NDB_MGM_NODE_STATUS_STARTED Узел работает
NDB_MGM_NODE_STATUS_SHUTTING_DOWN Узел закрывается
NDB_MGM_NODE_STATUS_RESTARTING Узел перезапускается
NDB_MGM_NODE_STATUS_SINGLEUSER Узел в однопользовательском режиме
NDB_MGM_NODE_STATUS_RESUME Узел находится в режиме восстановления
NDB_MGM_NODE_STATUS_CONNECTED Узел соединен

3.3.3. Тип ndb_mgm_error

Описание. Значения для этого типа коды ошибок, которые могут быть произведены API-функциями MGM. Они могут быть найдены в разделе 3.5.

См. раздел 3.2.2.1.

3.3.4. Тип Ndb_logevent_type

Описание. Это типы событий регистрации, доступных в MGM API, сгруппированные категорией событий. См. раздел 3.3.7.

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.3. Тип Ndb_logevent_type

Тип Описание Категория
NDB_LE_Connected Узел соединился NDB_MGM_EVENT_CATEGORY_CONNECTION
NDB_LE_Disconnected Узел был разъединен NDB_MGM_EVENT_CATEGORY_CONNECTION
NDB_LE_CommunicationClosed Связь с узлом была закрыта NDB_MGM_EVENT_CATEGORY_CONNECTION
NDB_LE_CommunicationOpened Связь с узлом была начата NDB_MGM_EVENT_CATEGORY_CONNECTION
NDB_LE_ConnectedApiVersion Версия API, используемая узлом API, в случае сервера MySQL (узел SQL), это совпадает с SELECT VERSION() NDB_MGM_EVENT_CATEGORY_CONNECTION
NDB_LE_GlobalCheckpointStarted Была начата глобальная контрольная точка NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_GlobalCheckpointCompleted Была закончена глобальная контрольная точка NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_LocalCheckpointStarted Узел начал местную контрольную точку NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_LocalCheckpointCompleted Узел закончил местную контрольную точку NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_LCPStoppedInCalcKeepGci Локальная контрольная точка была прервана, но последняя глобальная контрольная точка была сохранена NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_LCPFragmentCompleted Копирование фрагмента таблицы было закончено NDB_MGM_EVENT_CATEGORY_CHECKPOINT
NDB_LE_NDBStartStarted Узел начал запуск NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NDBStartCompleted Узел закончил процесс запуска NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_STTORRYRecieved Узел получил сигнал STTORRY, указывающий, что чтение данных конфигурации идет полным ходом, посмотрите Configuration Read Phase (STTOR Phase -1) и STTOR Phase 0 NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_StartPhaseCompleted Фаза начала узла была закончена NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_CM_REGCONF Узел получил сигнал CM_REGCONF, см. STTOR Phase 1 NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_CM_REGREF Узел получил сигнал CM_REGREF, см. STTOR Phase 1 NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_FIND_NEIGHBOURS Узел обнаружил свои соседние узлы в кластере NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NDBStopStarted Узел начинает закрываться NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NDBStopCompleted Закрытие узла закончено NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NDBStopForced Узел вынужден закрыться (обычно указывает на серьезную проблему) NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NDBStopAborted Начал закрываться, но был вынужден продолжить работу, это происходит, например, когда команда STOP была дана в клиенте управления для узла таким образом, что кластер больше не был бы в состоянии держать все доступные данные, если бы узел был закрыт NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_StartREDOLog Redo-регистрация начата NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_StartLog Регистрация началась NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_UNDORecordsExecuted Узел прочитал и выполнил все записи из журнала отката NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_StartReport Узел выпускает отчет о начале NDB_MGM_EVENT_CATEGORY_STARTUP
NDB_LE_NR_CopyDict Узел копирует словарь данных NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NR_CopyDistr Узел копирует информацию о распределении данных NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NR_CopyFragsStarted Узел копирует фрагменты таблицы NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NR_CopyFragDone Узел закончил копирование фрагмента таблицы NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NR_CopyFragsCompleted Узел закончил копирование всех необходимых фрагментов таблицы NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NodeFailCompleted Все (остающиеся) узлы были оповещены о сбое узла данных NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_NODE_FAILREP Узел данных потерпел неудачу NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_ArbitState Это событие используется, чтобы сообщить относительно текущего состояния арбитража NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_ArbitResult Это событие используется, чтобы сообщить относительно результата арбитража узла NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_GCP_TakeoverStarted Узел пытается стать главным узлом (чтобы принять на себя ответственность за GCP) NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_GCP_TakeoverCompleted Узел стал главным и принял на себя ответственность за GCP NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_LCP_TakeoverStarted Узел пытается стать главным узлом (чтобы принять на себя ответственность за LCP) NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_LCP_TakeoverCompleted Узел стал главным (и принял на себя ответственность за LCP) NDB_MGM_EVENT_CATEGORY_NODE_RESTART
NDB_LE_TransReportCounters Это указывает на сообщение о действии транзакций, которое дано приблизительно один раз в 10 секунд NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_OperationReportCounters Указывает на отчет о количестве операций, выполненных этим узлом (обеспечен приблизительно один раз в 10 секунд) NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_TableCreated Была составлена новая таблица NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_UndoLogBlocked Регистрация отмен заблокирована, потому что буфер регистрации близок к переполнению NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_JobStatistic ... NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_SendBytesStatistic Указывает среднее число байтов, переданных за операцию этим узлом NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_ReceiveBytesStatistic Указывает среднее число байтов, полученных за операцию этим узлом NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_MemoryUsage Команда DUMP 1000 была дана этому узлу, и это сообщает о своем использовании памяти NDB_MGM_EVENT_CATEGORY_STATISTIC
NDB_LE_TransporterError Ошибка транспортера произошла, см. NDB Transporter Errors NDB_MGM_EVENT_CATEGORY_ERROR
NDB_LE_TransporterWarning Потенциальная проблема происходит в транспортере, см. NDB Transporter Errors NDB_MGM_EVENT_CATEGORY_ERROR
NDB_LE_MissedHeartbeat Указывает, что узел данных пропустил сигнал синхронизации, ожидаемый от другого узла данных NDB_MGM_EVENT_CATEGORY_ERROR
NDB_LE_DeadDueToHeartbeat Узел данных пропустил по крайней мере 3 сигнала синхронизации от другого узла данных и сообщает, что больше не может общаться с тем узлом данных NDB_MGM_EVENT_CATEGORY_ERROR
NDB_LE_WarningEvent Указывает на предупреждающее сообщение NDB_MGM_EVENT_CATEGORY_ERROR
NDB_LE_SentHeartbeat Сигнал синхронизации узла послали NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_CreateLogBytes ... NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_InfoEvent Указывает на информационное сообщение NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_SingleUser Кластер вошел или вышел из однопользовательского режима NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_EventBufferStatus Этот тип события указывает на потенциально чрезмерное использование буфера событий NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_EventBufferStatus2 Обеспечивает улучшенное сообщение о статусе буфера событий, добавлен в NDB 7.5.1 NDB_MGM_EVENT_CATEGORY_INFO
NDB_LE_BackupStarted Резервная копия была начата NDB_MGM_EVENT_CATEGORY_BACKUP
NDB_LE_BackupFailedToStart Резервная копия не началась NDB_MGM_EVENT_CATEGORY_BACKUP
NDB_LE_BackupCompleted Резервная копия была закончена успешно NDB_MGM_EVENT_CATEGORY_BACKUP
NDB_LE_BackupAborted Происходящая резервная копия была прервана пользователем NDB_MGM_EVENT_CATEGORY_BACKUP

3.3.5. Тип ndb_mgm_event_severity

Описание. Это важность событий журнала, используемая, чтобы отфильтровать регистрацию кластера через ndb_mgm_set_clusterlog_severity_filter() и отфильтровать события через ndb_mgm_listen_event().

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.4.

Значение Описание
NDB_MGM_ILLEGAL_EVENT_SEVERITY Недействительная важность событий определяется
NDB_MGM_EVENT_SEVERITY_ON Регистрация кластера позволена
NDB_MGM_EVENT_SEVERITY_DEBUG Используемый только для развития кластера NDB
NDB_MGM_EVENT_SEVERITY_INFO Информационные сообщения
NDB_MGM_EVENT_SEVERITY_WARNING Условия, которые не являются ошибками как таковыми, но это могло бы потребовать специальной обработки
NDB_MGM_EVENT_SEVERITY_ERROR Неокончательное состояние ошибки, которое должно быть исправлено
NDB_MGM_EVENT_SEVERITY_CRITICAL Критические состояния, такие как ошибки устройства или памяти
NDB_MGM_EVENT_SEVERITY_ALERT Условия, которые требуют пристального внимания, такие как повреждения кластера
NDB_MGM_EVENT_SEVERITY_ALL Все уровни важности

См. разделы 3.2.7.2 и 3.2.1.1.

3.3.6. Тип ndb_logevent_handle_error

Описание. Этот тип используется, чтобы описать ошибки событий регистрации.

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.5.

Значение Описание
NDB_LEH_NO_ERROR Нет ошибок
NDB_LEH_READ_ERROR Ошибка чтения
NDB_LEH_MISSING_EVENT_SPECIFIER Недействительная, неполная или пропущенная спецификация событий регистрации
NDB_LEH_UNKNOWN_EVENT_TYPE Неизвестный тип события регистрации
NDB_LEH_UNKNOWN_EVENT_VARIABLE Неизвестная переменная событий регистрации
NDB_LEH_INTERNAL_ERROR Внутренняя ошибка
NDB_LEH_CONNECTION_ERROR Ошибка связи или потерянная связь с сервером управления

NDB_LEH_CONNECTION_ERROR добавлен в NDB 7.4.13 и NDB 7.5.4 (BUG #19474782).

3.3.7. Тип ndb_mgm_event_category

Описание. Это категории событий регистрации, на которые ссылаются в разделе 3.3.4. Они также используются API-функциями MGM ndb_mgm_set_clusterlog_loglevel() и ndb_mgm_listen_event().

Перечисляемые значения. Возможные значения, наряду с описаниями, показаны в следующей таблице:

Таблица 3.6.

Некатегоризированные события регистрации (уровень важности WARNING, ERROR, CRITICAL или ALERT)
Значение Описание
NDB_MGM_ILLEGAL_EVENT_CATEGORY Недействительная категория событий регистрации
NDB_MGM_EVENT_CATEGORY_STARTUP События регистрации, происходящие во время запуска
NDB_MGM_EVENT_CATEGORY_SHUTDOWN События регистрации, происходящие во время закрытия
NDB_MGM_EVENT_CATEGORY_STATISTIC Статистические данные событий
NDB_MGM_EVENT_CATEGORY_CHECKPOINT События регистрации, связанные с контрольными точками
NDB_MGM_EVENT_CATEGORY_NODE_RESTART События регистрации, происходящие во время перезапуска узла
NDB_MGM_EVENT_CATEGORY_CONNECTION События регистрации, касающиеся связей между узлами кластера
NDB_MGM_EVENT_CATEGORY_BACKUP События регистрации, касающиеся резервных копий
NDB_MGM_EVENT_CATEGORY_CONGESTION События регистрации, касающиеся перегруженности
NDB_MGM_EVENT_CATEGORY_INFO Некатегоризированные события регистрации (уровень важности INFO)
NDB_MGM_EVENT_CATEGORY_ERROR

См. разделы 3.2.7.4 и 3.2.1.1.

3.4. Структуры MGM API

Резюме

Эта секция покрывает программные структуры, доступные в MGM API.

3.4.1. Структура ndb_logevent

Описание. Эта структура моделирует событие кластера регистрации и используется для того, чтобы сохранить и восстановить информацию о событии регистрации.

Определение. ndb_logevent имеет 8 участников, первые 7 из которых показаны в следующем списке:

  • void* handle: NdbLogEventHandle, установленный ndb_logevent_get_next(). Этот обработчик используется только в целях сравнения.

  • type: Говорит, который это тип события ( Ndb_logevent_type).

  • unsigned time : Время, в которое событие регистрации было зарегистрировано в сервере управления.

  • category: Категория событий регистрации ( ndb_mgm_event_category).

  • severity: Важность событий регистрации ( ndb_mgm_event_severity).

  • unsigned level: Уровень событий регистрации. Это значение в диапазоне от 0 до 15 включительно.

  • unsigned source_nodeid: ID узла, который сообщил об этом событии.

Восьмой элемент структуры содержит данные, определенные для события регистрации, и зависит от его типа. Это определяется как союз многих структур данных, каждая соответствующая типу события регистрации. Которую структуру использовать определяется значением type в следующей таблице:

Таблица 3.7.

Значение Ndb_logevent_type Структура
NDB_LE_Connected Connected:
unsigned node
NDB_LE_Disconnected Disconnected:
unsigned node
NDB_LE_CommunicationClosed CommunicationClosed:
unsigned node
NDB_LE_CommunicationOpened CommunicationOpened:
unsigned node
NDB_LE_ConnectedApiVersion ConnectedApiVersion:
unsigned node
unsigned version
NDB_LE_GlobalCheckpointStarted GlobalCheckpointStarted:
unsigned gci
NDB_LE_GlobalCheckpointCompleted GlobalCheckpointCompleted:
unsigned gci
NDB_LE_LocalCheckpointStarted LocalCheckpointStarted:
unsigned lci
unsigned keep_gci
unsigned restore_gci
NDB_LE_LocalCheckpointCompleted LocalCheckpointCompleted:
unsigned lci
NDB_LE_LCPStoppedInCalcKeepGci LCPStoppedInCalcKeepGci:
unsigned data
NDB_LE_LCPFragmentCompleted LCPFragmentCompleted:
unsigned node
unsigned table_id
unsigned fragment_id
NDB_LE_UndoLogBlocked UndoLogBlocked:
unsigned acc_count
unsigned tup_count
NDB_LE_NDBStartStarted NDBStartStarted:
unsigned version
NDB_LE_NDBStartCompleted NDBStartCompleted:
unsigned version
NDB_LE_STTORRYRecieved STTORRYRecieved:
[NONE]
NDB_LE_StartPhaseCompleted StartPhaseCompleted:
unsigned phase
unsigned starttype
NDB_LE_CM_REGCONF CM_REGCONF:
unsigned own_id
unsigned president_id
unsigned dynamic_id
NDB_LE_CM_REGREF CM_REGREF:
unsigned own_id
unsigned other_id
unsigned cause
NDB_LE_FIND_NEIGHBOURS FIND_NEIGHBOURS:
unsigned own_id
unsigned left_id
unsigned right_id
unsigned dynamic_id
NDB_LE_NDBStopStarted NDBStopStarted:
unsigned stoptype
NDB_LE_NDBStopCompleted NDBStopCompleted:
unsigned action
unsigned signum
NDB_LE_NDBStopForced NDBStopForced:
unsigned action
unsigned signum
unsigned error
unsigned sphase
unsigned extra
NDB_LE_NDBStopAborted NDBStopAborted:
[NONE]
NDB_LE_StartREDOLog StartREDOLog:
unsigned node
unsigned keep_gci
unsigned completed_gci
unsigned restorable_gci
NDB_LE_StartLog StartLog:
unsigned log_part
unsigned start_mb
unsigned stop_mb
unsigned gci
NDB_LE_UNDORecordsExecuted UNDORecordsExecuted:
unsigned block
unsigned data1
unsigned data2
unsigned data3
unsigned data4
unsigned data5
unsigned data6
unsigned data7
unsigned data8
unsigned data9
unsigned data10
NDB_LE_NR_CopyDict NR_CopyDict:
[NONE]
NDB_LE_NR_CopyDistr NR_CopyDistr:
[NONE]
NDB_LE_NR_CopyFragsStarted NR_CopyFragsStarted:
unsigned dest_node
NDB_LE_NR_CopyFragDone NR_CopyFragDone:
unsigned dest_node
unsigned table_id
unsigned fragment_id
NDB_LE_NR_CopyFragsCompleted NR_CopyFragsCompleted:
unsigned dest_node
NDB_LE_NodeFailCompleted NodeFailCompleted:
unsigned block
unsigned failed_node
unsigned completing_node
Для block и completing_node, 0 понимается как все.
NDB_LE_NODE_FAILREP NODE_FAILREP:
unsigned failed_node
unsigned failure_state
NDB_LE_ArbitState ArbitState:
unsigned code
unsigned arbit_node
unsigned ticket_0
unsigned ticket_1
NDB_LE_ArbitResult ArbitResult:
unsigned code
unsigned arbit_node
unsigned ticket_0
unsigned ticket_1
NDB_LE_GCP_TakeoverStarted GCP_TakeoverStarted:
[NONE]
NDB_LE_GCP_TakeoverCompleted GCP_TakeoverCompleted:
[NONE]
NDB_LE_LCP_TakeoverStarted LCP_TakeoverStarted:
[NONE]
NDB_LE_TransReportCounters TransReportCounters:
unsigned trans_count
unsigned commit_count
unsigned read_count
unsigned simple_read_count
unsigned write_count
unsigned attrinfo_count
unsigned conc_op_count
unsigned abort_count
unsigned scan_count
unsigned range_scan_count
NDB_LE_OperationReportCounters OperationReportCounters:
unsigned ops
NDB_LE_TableCreated TableCreated:
unsigned table_id
NDB_LE_JobStatistic JobStatistic:
unsigned mean_loop_count
NDB_LE_SendBytesStatistic SendBytesStatistic:
unsigned to_node
unsigned mean_sent_bytes
NDB_LE_ReceiveBytesStatistic ReceiveBytesStatistic:
unsigned from_node
unsigned mean_received_bytes
NDB_LE_MemoryUsage MemoryUsage:
int gth
unsigned page_size_kb
unsigned pages_used
unsigned pages_total
unsigned block
NDB_LE_TransporterError TransporterError:
unsigned to_node
unsigned code
NDB_LE_TransporterWarning TransporterWarning:
unsigned to_node
unsigned code
NDB_LE_MissedHeartbeat MissedHeartbeat:
unsigned node
unsigned count
NDB_LE_DeadDueToHeartbeat DeadDueToHeartbeat:
unsigned node
NDB_LE_WarningEvent WarningEvent:
[NOT YET IMPLEMENTED]
NDB_LE_SentHeartbeat SentHeartbeat:
unsigned node
NDB_LE_CreateLogBytes CreateLogBytes:
unsigned node
NDB_LE_InfoEvent InfoEvent: Пока не сделано
NDB_LE_EventBufferStatus (NDB 7.5.0 и ранее) EventBufferStatus::
unsigned usage
unsigned alloc
unsigned max
unsigned apply_gci_l
unsigned apply_gci_h
unsigned latest_gci_l
unsigned latest_gci_h
NDB_LE_EventBufferStatus2 (NDB 7.5.1 и позже) EventBufferStatus2:
unsigned usage
unsigned alloc
unsigned max
unsigned latest_consumed_epoch_l
unsigned latest_consumed_epoch_h
unsigned latest_buffered_epoch_l
unsigned latest_buffered_epoch_h
unsigned ndb_reference
unsigned report_reason
report_reason одно из NO_REPORT, COMPLETELY_BUFFERING, PARTIALLY_DISCARDING, COMPLETELY_DISCARDING, PARTIALLY_BUFFERING, BUFFERED_EPOCHS_OVER_THRESHOLD, ENOUGH_FREE_EVENTBUFFER или LOW_FREE_EVENTBUFFER, см. Event Buffer Reporting in the Cluster Log
NDB_LE_BackupStarted BackupStarted:
unsigned starting_node
unsigned backup_id
NDB_LE_BackupFailedToStart BackupFailedToStart:
unsigned starting_node
unsigned error
NDB_LE_BackupCompleted BackupCompleted:
unsigned starting_node
unsigned backup_id
unsigned start_gci
unsigned stop_gci
unsigned n_records 
unsigned n_log_records
unsigned n_bytes
unsigned n_log_bytes
NDB_LE_BackupAborted BackupAborted:
unsigned starting_node
unsigned backup_id
unsigned error
NDB_LE_SingleUser SingleUser:
unsigned type
unsigned node_id
NDB_LE_StartReport StartReport:
unsigned report_type
unsigned remaining_time
unsigned bitmask_size
unsigned bitmask_data[1]

3.4.2. Структура ndb_mgm_node_state

Описание. Предоставляет информацию о статусе узла кластера.

Определение. Эта структура содержит следующих участников:

  • int node_id : ID узла кластера.

  • enum ndb_mgm_node_type node_type: Тип узла.

    См. раздел 3.3.1.

  • enum ndb_mgm_node_status node_status: Статус узла.

    См. раздел 3.3.2.

  • int start_phase : Фаза начала.

    Это действительно только если node_type = NDB_MGM_NODE_TYPE_NDB и node_status = NDB_MGM_NODE_STATUS_STARTING.

  • int dynamic_id: ID для синхронизации и поглощения главного узла.

    Действительно только для узлов данных (ndbd).

  • int node_group: группа узлов, к которой принадлежит узел.

    Действительно только для узлов данных (ndbd).

  • int version : Число внутренней версии.

  • int connect_count: Сколько раз этот узел соединился или разъединился с сервером управления.

  • char connect_address[]: IP-адрес этого узла, как он виден другим узлам в группе.

  • int mysql_version: Номер версии MySQL, выраженный как целое число (например: 80020). Применяется только к узлам SQL.

  • int is_single_user: ID API или SQL-узла, имеющего эксклюзивный доступ, когда кластер находится в однопользовательском режиме. Иначе не применяется. Добавлено в NDB 8.0.17.

3.4.3. Структура ndb_mgm_cluster_state

Описание. Предоставляет информацию о статусе всех узлов кластера. Эта структура возвращена ndb_mgm_get_status().

Определение. У этой структуры есть следующие два участника:

  • int no_of_nodes: число элементов массива node_states.

  • struct ndb_mgm_node_state node_states[]: массив, содержащий статусы узлов.

    Каждый элемент этого массива является структурой ndb_mgm_node_state.

См. раздел 3.2.5.1.

3.4.4. Структура ndb_mgm_reply

Описание. Содержит информацию об ответе, состоящую из кода ответа и соответствующего сообщения, от сервера управления.

Определение. Эта структура содержит двух участников, как показано здесь:

  • int return_code: Для успешной операции это значение 0, иначе это содержит код ошибки.

    Для кодов ошибок посмотрите раздел 3.3.3.

  • char message[256]: содержит текст ответа или сообщения об ошибке.

См. разделы 3.2.2.1 и 3.2.2.2.

3.5. Ошибки MGM API

Следующие разделы перечисляют значения ошибок MGM по типам. Есть шесть типов ошибок MGM:

  1. ошибки запроса

  2. ошибки распределения ID узлов

  3. сервисные ошибки

  4. резервные ошибки

  5. ошибки однопользовательского режима

  6. общие ошибки использования

Есть только одна общая ошибка использования.

3.5.1. Ошибки запроса

Это ошибки, произведенные отказами соединиться с сервером управления.

Таблица 3.8.

Значение Описание
NDB_MGM_ILLEGAL_CONNECT_STRING Недействительная строка подключения
NDB_MGM_ILLEGAL_SERVER_HANDLE Недействительная обработчик сервера управления
NDB_MGM_ILLEGAL_SERVER_REPLY Недействительный ответ от сервера управления
NDB_MGM_ILLEGAL_NUMBER_OF_NODES Неверный номер узлов
NDB_MGM_ILLEGAL_NODE_STATUS Недействительный статус узла
NDB_MGM_OUT_OF_MEMORY Ошибка распределения памяти
NDB_MGM_SERVER_NOT_CONNECTED Сервер управления не подключен
NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET Не может соединиться с сокетом

3.5.2. Ошибки распределения ID узлов

Эти ошибки следуют из отказа назначить узлу ID.

Таблица 3.9.

Значение Описание
NDB_MGM_ALLOCID_ERROR Универсальная ошибка, может быть возможно повторить и восстановить
NDB_MGM_ALLOCID_CONFIG_MISMATCH Невосстанавливаемая универсальная ошибка

3.5.3. Сервисные ошибки

Эти ошибки следуют из неудачи узла или кластера при запуске, закрытии или перезапуске.

Таблица 3.10.

Значение Описание
NDB_MGM_START_FAILED Неудача запуска
NDB_MGM_STOP_FAILED Неудача закрытия
NDB_MGM_RESTART_FAILED Неудача перезапуска

3.5.4. Ошибки резервирования

Это ошибки, которые следуют из проблем с инициированием или прерыванием резервных копий.

Таблица 3.11.

Значение Описание
NDB_MGM_COULD_NOT_START_BACKUP Не получилось начать резервную копию
NDB_MGM_COULD_NOT_ABORT_BACKUP Не получилось прервать резервную копию

3.5.5. Ошибки однопользовательского режима

Эти ошибки следуют из отказов войти или выйти из однопользовательского режима.

Таблица 3.12.

Значение Описание
NDB_MGM_COULD_NOT_ENTER_SINGLE_USER_MODE Не получилось войти в однопользовательский режим
NDB_MGM_COULD_NOT_EXIT_SINGLE_USER_MODE Не получилось выйти из однопользовательского режима

3.5.6. Общие ошибки использования

Это общий ошибочный тип для ошибок, которые являются не поддающимися классификации.

Таблица 3.13.

Значение Описание
NDB_MGM_USAGE_ERROR Общая ошибка использования

3.6. Примеры MGM API

Эта секция содержит примеры работы с MGM API.

3.6.1. Основной пример регистрации событий MGM API

Этот пример показывает основы обработки регистрации событий, используя MGM API.

Исходный код для этой программы может быть найден в исходном дереве кластера NDB в файле storage/ndb/ndbapi-examples/mgmapi_logevent/main.cpp .

#include <mysql.h>
#include <ndbapi/NdbApi.hpp>
#include <mgmapi.h>
#include <stdio.h>
#include <stdlib.h>

/*
 * export LD_LIBRARY_PATH=../../../../libmysql_r/.libs:../../src/.libs
 */

#define MGMERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_mgm_get_latest_error(h), \
ndb_mgm_get_latest_error_msg(h)); \
exit(-1); \
}

#define LOGEVENTERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_logevent_get_latest_error(h), \
ndb_logevent_get_latest_error_msg(h)); \
exit(-1); \
}

#define make_uint64(a,b) (((Uint64)(a)) + (((Uint64)(b)) << 32))
int main(int argc, char** argv)
{
  NdbMgmHandle h;
  NdbLogEventHandle le;
  int filter[] = {15, NDB_MGM_EVENT_CATEGORY_BACKUP,
                  15, NDB_MGM_EVENT_CATEGORY_CONNECTION,
                  15, NDB_MGM_EVENT_CATEGORY_NODE_RESTART,
                  15, NDB_MGM_EVENT_CATEGORY_STARTUP,
                  15, NDB_MGM_EVENT_CATEGORY_ERROR, 0};
  struct ndb_logevent event;

  if (argc < 2)
  {
     printf("Arguments are <connect_string cluster> [<iterations>].\n");
     exit(-1);
  }

  const char *connectstring = argv[1];
  int iterations = -1;
  if (argc > 2) iterations = atoi(argv[2]);
  ndb_init();
  h= ndb_mgm_create_handle();
  if (h == 0) {
     printf("Unable to create handle\n");
     exit(-1);
  }
  if (ndb_mgm_set_connectstring(h, connectstring) == -1)
  {
     printf("Unable to set connection string\n");
     exit(-1);
  }
  if (ndb_mgm_connect(h,0,0,0)) MGMERROR(h);
  le= ndb_mgm_create_logevent_handle(h, filter);
  if (le == 0) MGMERROR(h);
  while (iterations-- != 0)
  {
    int timeout= 1000;
    int r= ndb_logevent_get_next(le,&event,timeout);
    if (r == 0) printf("No event within %d milliseconds\n", timeout);
    else if (r < 0) LOGEVENTERROR(le)
    else
    {
      switch (event.type) {
        case NDB_LE_BackupStarted:
          printf("Node %d: BackupStarted\n", event.source_nodeid);
          printf("Starting node ID: %d\n", event.BackupStarted.starting_node);
          printf("Backup ID: %d\n", event.BackupStarted.backup_id);
          break;
        case NDB_LE_BackupStatus:
          printf("Node %d: BackupStatus\n", event.source_nodeid);
          printf("Starting node ID: %d\n", event.BackupStarted.starting_node);
          printf("Backup ID: %d\n", event.BackupStarted.backup_id);
          printf("Data written: %llu bytes (%llu records)\n",
                 make_uint64(event.BackupStatus.n_bytes_lo,
                             event.BackupStatus.n_bytes_hi),
                 make_uint64(event.BackupStatus.n_records_lo,
                             event.BackupStatus.n_records_hi));
          printf("Log written: %llu bytes (%llu records)\n",
                 make_uint64(event.BackupStatus.n_log_bytes_lo,
                             event.BackupStatus.n_log_bytes_hi),
                 make_uint64(event.BackupStatus.n_log_records_lo,
                             event.BackupStatus.n_log_records_hi));
          break;
        case NDB_LE_BackupCompleted:
          printf("Node %d: BackupCompleted\n", event.source_nodeid);
          printf("Backup ID: %d\n", event.BackupStarted.backup_id);
          printf("Data written: %llu bytes (%llu records)\n",
                 make_uint64(event.BackupCompleted.n_bytes,
                             event.BackupCompleted.n_bytes_hi),
                 make_uint64(event.BackupCompleted.n_records,
                             event.BackupCompleted.n_records_hi));
          printf("Log written: %llu bytes (%llu records)\n",
                 make_uint64(event.BackupCompleted.n_log_bytes,
                             event.BackupCompleted.n_log_bytes_hi),
                 make_uint64(event.BackupCompleted.n_log_records,
                             event.BackupCompleted.n_log_records_hi));
          break;
        case NDB_LE_BackupAborted:
          printf("Node %d: BackupAborted\n", event.source_nodeid);
          break;
        case NDB_LE_BackupFailedToStart:
          printf("Node %d: BackupFailedToStart\n", event.source_nodeid);
          break;
        case NDB_LE_NodeFailCompleted:
          printf("Node %d: NodeFailCompleted\n", event.source_nodeid);
          break;
        case NDB_LE_ArbitResult:
          printf("Node %d: ArbitResult\n", event.source_nodeid);
          printf("code %d, arbit_node %d\n",
                 event.ArbitResult.code & 0xffff,
                 event.ArbitResult.arbit_node);
          break;
        case NDB_LE_DeadDueToHeartbeat:
          printf("Node %d: DeadDueToHeartbeat\n", event.source_nodeid);
          printf("node %d\n", event.DeadDueToHeartbeat.node);
          break;
        case NDB_LE_Connected:
          printf("Node %d: Connected\n", event.source_nodeid);
          printf("node %d\n", event.Connected.node);
          break;
        case NDB_LE_Disconnected:
          printf("Node %d: Disconnected\n", event.source_nodeid);
          printf("node %d\n", event.Disconnected.node);
          break;
        case NDB_LE_NDBStartCompleted:
          printf("Node %d: StartCompleted\n", event.source_nodeid);
          printf("version %d.%d.%d\n",
                 event.NDBStartCompleted.version >> 16 & 0xff,
                 event.NDBStartCompleted.version >> 8 & 0xff,
                 event.NDBStartCompleted.version >> 0 & 0xff);
          break;
        case NDB_LE_ArbitState:
          printf("Node %d: ArbitState\n", event.source_nodeid);
          printf("code %d, arbit_node %d\n",
                 event.ArbitState.code & 0xffff,
                 event.ArbitResult.arbit_node);
          break;
        default:
          break;
      }
    }
  }
  ndb_mgm_destroy_logevent_handle(&le);
  ndb_mgm_destroy_handle(&h);
  ndb_end(0);
  return 0;
}

3.6.2. Обработка событий MGM API с многократными кластерами

Этот пример иллюстрирует обработку событий регистрации, используя MGM API на многократных кластерах в отдельном приложении.

Исходный код для этой программы может быть найден в исходном дереве NDB Cluster в файле storage/ndb/ndbapi-examples/mgmapi_logevent2/main.cpp .

Этот файл ранее называли mgmapi_logevent2.cpp .

#include <mysql.h>
#include <ndbapi/NdbApi.hpp>
#include <mgmapi.h>
#include <stdio.h>
#include <stdlib.h>

/*
 * export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
 */

#define MGMERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_mgm_get_latest_error(h), \
ndb_mgm_get_latest_error_msg(h)); \
exit(-1); \
}

#define LOGEVENTERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_logevent_get_latest_error(h), \
ndb_logevent_get_latest_error_msg(h)); \
exit(-1); \
}

int main(int argc, char** argv)
{
  NdbMgmHandle h1,h2;
  NdbLogEventHandle le1,le2;
  int filter[] = {15, NDB_MGM_EVENT_CATEGORY_BACKUP,
                  15, NDB_MGM_EVENT_CATEGORY_CONNECTION,
                  15, NDB_MGM_EVENT_CATEGORY_NODE_RESTART,
                  15, NDB_MGM_EVENT_CATEGORY_STARTUP,
                  15, NDB_MGM_EVENT_CATEGORY_ERROR, 0};
  struct ndb_logevent event1, event2;

  if (argc < 3)
  {
     printf("Arguments are <connect_string cluster 1>",
            "<connect_string cluster 2> [<iterations>].\n");
     exit(-1);
  }

  const char *connectstring1 = argv[1];
  const char *connectstring2 = argv[2];
  int iterations = -1;

  if (argc > 3) iterations = atoi(argv[3]);
  ndb_init();
  h1= ndb_mgm_create_handle();
  h2= ndb_mgm_create_handle();
  if (h1 == 0 || h2 == 0)
  {
     printf("Unable to create handle\n");
     exit(-1);
  }
  if (ndb_mgm_set_connectstring(h1, connectstring1) == -1 ||
      ndb_mgm_set_connectstring(h2, connectstring1))
  {
     printf("Unable to set connection string\n");
     exit(-1);
  }
  if (ndb_mgm_connect(h1,0,0,0)) MGMERROR(h1);
  if (ndb_mgm_connect(h2,0,0,0)) MGMERROR(h2);
  if ((le1= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h1);
  if ((le2= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h2);
  while (iterations-- != 0)
  {
    int timeout= 1000;
    int r1= ndb_logevent_get_next(le1,&event1,timeout);
    if (r1 == 0) printf("No event within %d milliseconds\n", timeout);
    else if (r1 < 0) LOGEVENTERROR(le1)
         else
         {
           switch (event1.type) {
             case NDB_LE_BackupStarted:
               printf("Node %d: BackupStarted\n", event1.source_nodeid);
               printf("Starting node ID: %d\n", event1.BackupStarted.starting_node);
               printf("Backup ID: %d\n", event1.BackupStarted.backup_id);
               break;
             case NDB_LE_BackupCompleted:
               printf("Node %d: BackupCompleted\n", event1.source_nodeid);
               printf("Backup ID: %d\n", event1.BackupStarted.backup_id);
               break;
             case NDB_LE_BackupAborted:
               printf("Node %d: BackupAborted\n", event1.source_nodeid);
               break;
             case NDB_LE_BackupFailedToStart:
               printf("Node %d: BackupFailedToStart\n", event1.source_nodeid);
               break;
             case NDB_LE_NodeFailCompleted:
               printf("Node %d: NodeFailCompleted\n", event1.source_nodeid);
               break;
             case NDB_LE_ArbitResult:
               printf("Node %d: ArbitResult\n", event1.source_nodeid);
               printf("code %d, arbit_node %d\n",
                      event1.ArbitResult.code & 0xffff,
                      event1.ArbitResult.arbit_node);
               break;
             case NDB_LE_DeadDueToHeartbeat:
               printf("Node %d: DeadDueToHeartbeat\n", event1.source_nodeid);
               printf("node %d\n", event1.DeadDueToHeartbeat.node);
               break;
             case NDB_LE_Connected:
               printf("Node %d: Connected\n", event1.source_nodeid);
               printf("node %d\n", event1.Connected.node);
               break;
             case NDB_LE_Disconnected:
               printf("Node %d: Disconnected\n", event1.source_nodeid);
               printf("node %d\n", event1.Disconnected.node);
               break;
             case NDB_LE_NDBStartCompleted:
               printf("Node %d: StartCompleted\n", event1.source_nodeid);
               printf("version %d.%d.%d\n",
                      event1.NDBStartCompleted.version >> 16 & 0xff,
                      event1.NDBStartCompleted.version >> 8 & 0xff,
                      event1.NDBStartCompleted.version >> 0 & 0xff);
               break;
             case NDB_LE_ArbitState:
               printf("Node %d: ArbitState\n", event1.source_nodeid);
               printf("code %d, arbit_node %d\n",
                      event1.ArbitState.code & 0xffff,
                      event1.ArbitResult.arbit_node);
               break;
             default:
               break;
           }
         }
    int r2= ndb_logevent_get_next(le1,&event2,timeout);
    if (r2 == 0) printf("No event within %d milliseconds\n", timeout);
    else if (r2 < 0) LOGEVENTERROR(le2)
         else
         {
           switch (event2.type) {
             case NDB_LE_BackupStarted:
               printf("Node %d: BackupStarted\n", event2.source_nodeid);
               printf("Starting node ID: %d\n", event2.BackupStarted.starting_node);
               printf("Backup ID: %d\n", event2.BackupStarted.backup_id);
               break;
             case NDB_LE_BackupCompleted:
               printf("Node %d: BackupCompleted\n", event2.source_nodeid);
               printf("Backup ID: %d\n", event2.BackupStarted.backup_id);
               break;
             case NDB_LE_BackupAborted:
               printf("Node %d: BackupAborted\n", event2.source_nodeid);
               break;
             case NDB_LE_BackupFailedToStart:
               printf("Node %d: BackupFailedToStart\n", event2.source_nodeid);
               break;
             case NDB_LE_NodeFailCompleted:
               printf("Node %d: NodeFailCompleted\n", event2.source_nodeid);
               break;
             case NDB_LE_ArbitResult:
               printf("Node %d: ArbitResult\n", event2.source_nodeid);
               printf("code %d, arbit_node %d\n",
                      event2.ArbitResult.code & 0xffff,
                      event2.ArbitResult.arbit_node);
               break;
             case NDB_LE_DeadDueToHeartbeat:
               printf("Node %d: DeadDueToHeartbeat\n", event2.source_nodeid);
               printf("node %d\n", event2.DeadDueToHeartbeat.node);
               break;
             case NDB_LE_Connected:
               printf("Node %d: Connected\n", event2.source_nodeid);
               printf("node %d\n", event2.Connected.node);
               break;
             case NDB_LE_Disconnected:
               printf("Node %d: Disconnected\n", event2.source_nodeid);
               printf("node %d\n", event2.Disconnected.node);
               break;
             case NDB_LE_NDBStartCompleted:
               printf("Node %d: StartCompleted\n", event2.source_nodeid);
               printf("version %d.%d.%d\n",
                      event2.NDBStartCompleted.version >> 16 & 0xff,
                      event2.NDBStartCompleted.version >> 8 & 0xff,
                      event2.NDBStartCompleted.version >> 0 & 0xff);
               break;
             case NDB_LE_ArbitState:
               printf("Node %d: ArbitState\n", event2.source_nodeid);
               printf("code %d, arbit_node %d\n",
                      event2.ArbitState.code & 0xffff,
                      event2.ArbitResult.arbit_node);
               break;
             default:
               break;
           }
       }
  }
  ndb_mgm_destroy_logevent_handle(&le1);
  ndb_mgm_destroy_logevent_handle(&le2);
  ndb_mgm_destroy_handle(&h1);
  ndb_mgm_destroy_handle(&h2);
  ndb_end(0);
  return 0;
}

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru