Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает, как записать полусинхронные плагины сервера репликации, используя плагины в качестве
примера, найденные в plugin/semisync
каталог исходных дистрибутивов MySQL. Тот
каталог содержит исходные файлы для основных и ведомых названных плагинов rpl_semi_sync_master
и rpl_semi_sync_slave
. Информация здесь покрывает только, как установить сменную
платформу. Для получения дополнительной информации о том, как плагины реализуют функции репликации, см.
источник.
Чтобы записать полусинхронный плагин репликации, включайте следующий заголовочный файл в сменный исходный файл. Другой MySQL или общие заголовочные файлы могли бы также быть необходимы.
#include <mysql/plugin.h>
plugin.h
определяет MYSQL_REPLICATION_PLUGIN
тип
плагина сервера и структуры данных должны были объявить плагин.
Для основной стороны, semisync_master_plugin.cc
содержит этот общий дескриптор для
названного плагина rpl_semi_sync_master
:
mysql_declare_plugin(semi_sync_master){ MYSQL_REPLICATION_PLUGIN, &semi_sync_master_plugin, "rpl_semi_sync_master", "He Zhenxing", "Semi-synchronous replication master", PLUGIN_LICENSE_GPL, semi_sync_master_plugin_init, /* Plugin Init */ semi_sync_master_plugin_deinit, /* Plugin Deinit */ 0x0100 /* 1.0 */, semi_sync_master_status_vars, /* status variables */ semi_sync_master_system_vars, /* system variables */ NULL, /* config options */ 0, /* flags */}mysql_declare_plugin_end;
Для ведомой стороны, semisync_slave_plugin.cc
содержит этот общий дескриптор для
названного плагина rpl_semi_sync_slave
:
mysql_declare_plugin(semi_sync_slave){ MYSQL_REPLICATION_PLUGIN, &semi_sync_slave_plugin, "rpl_semi_sync_slave", "He Zhenxing", "Semi-synchronous replication slave", PLUGIN_LICENSE_GPL, semi_sync_slave_plugin_init, /* Plugin Init */ semi_sync_slave_plugin_deinit, /* Plugin Deinit */ 0x0100 /* 1.0 */, semi_sync_slave_status_vars, /* status variables */ semi_sync_slave_system_vars, /* system variables */ NULL, /* config options */ 0, /* flags */}mysql_declare_plugin_end;
И для основных и для ведомых плагинов, у общего дескриптора есть указатели на специфичный для типа дескриптор, инициализацию и функции deinitialization, и к состоянию и системным переменным, реализованным плагином. Для получения информации о переменной установке см. Раздел 22.2.4.2.2, "Состояние Плагина сервера и Системные Переменные". Следующие комментарии обсуждают специфичный для типа дескриптор и инициализацию и функции deinitialization для основного плагина, но применяются так же к ведомому плагину.
semi_sync_master_plugin
элемент дескриптора начальника управления указывает на
специфичный для типа дескриптор, который состоит только из специфичного для типа номера версии API:
struct Mysql_replication semi_sync_master_plugin= { MYSQL_REPLICATION_INTERFACE_VERSION};
Инициализация и deinitialization объявления функции похожи на это:
static int semi_sync_master_plugin_init(void *p);static int semi_sync_master_plugin_deinit(void *p);
Функция инициализации использует указатель, чтобы зарегистрировать транзакцию и двоичное журналирование "наблюдатели" с сервером. После успешной инициализации сервер заботится о вызове наблюдателей в подходящее время. (Для получения дополнительной информации на наблюдателях, см. исходные файлы.) Функция deinitialization очищает, вычеркивая из списка наблюдателей. Каждая функция возвращается 0 для успеха или 1, если ошибка происходит.
Чтобы скомпилировать и установить сменный объектный файл библиотеки, используйте инструкции в Разделе
22.2.4.3, "Компилируя и Устанавливая Сменные Библиотеки". Чтобы использовать файлы библиотеки, они
должны быть установлены в сменном каталоге (каталог, названный plugin_dir
системная переменная). Для rpl_semi_sync_master
и rpl_semi_sync_slave
плагины, они компилируются и устанавливаются, когда Вы
создаете MySQL из источника. Они также включаются в двоичные дистрибутивы. Процесс сборки производит совместно
использованные библиотеки объектов с именами semisync_master.so
и semisync_slave.so
(суффикс мог бы отличаться в зависимости от Вашей платформы).