Spec-Zone .ru
спецификации, руководства, описания, API
|
Репликация вызванных функций, таких как определяемые пользователем функции (UDFs) и сохраненные программы (хранимые процедуры и функции, триггеры, и события) обеспечивает следующие характеристики:
Эффекты функции всегда тиражируются.
Следующие операторы тиражируются, используя основанную на операторе репликацию:
Однако, эффекты функций создаваемое, измененное, или отброшенное использование этих операторов тиражируются, используя построчную репликацию.
Попытка тиражировать вызванные функции, используя основанную на операторе репликацию производит Оператор предупреждения, не безопасно войти в систему формат оператора. Например, попытка тиражировать UDF с основанной на операторе репликацией генерирует это предупреждение, потому что это в настоящий момент не может быть определено сервером MySQL, детерминирован ли UDF. Если Вы абсолютно уверены, что эффекты вызванной функции детерминированы, можно безопасно игнорировать такие предупреждения.
В случае CREATE EVENT
и ALTER EVENT
:
Состояние события устанавливается в SLAVESIDE_DISABLED
на ведомом устройстве независимо от определенного состояния (это не применяется к DROP EVENT
).
Ведущее устройство, на котором создавалось событие, идентифицируется на
ведомом устройстве его ID сервера. ORIGINATOR
столбец в INFORMATION_SCHEMA.EVENTS
и originator
столбец в mysql.event
храните эту информацию. См. Раздел
20.7," INFORMATION_SCHEMA EVENTS
Таблица", и
Раздел
13.7.5.19,"SHOW EVENTS
Синтаксис", для
получения дополнительной информации.
Реализация функции находится на ведомом устройстве в возобновимом состоянии так, чтобы, если ведущее устройство перестало работать, ведомое устройство могло использоваться в качестве ведущего устройства без потери обработки событий.
Определить, есть ли какие-либо запланированные события на сервере MySQL, которые создавались на различном
сервере (который действовал как ведущее устройство репликации), запрос INFORMATION_SCHEMA.EVENTS
таблица способом, подобным тому, что показывают
здесь:
SELECT EVENT_SCHEMA, EVENT_NAME FROM INFORMATION_SCHEMA.EVENTS WHERE STATUS = 'SLAVESIDE_DISABLED';
Альтернативно, можно использовать SHOW
EVENTS
оператор, как это:
SHOW EVENTS WHERE STATUS = 'SLAVESIDE_DISABLED';
Продвигая ведомое устройство репликации, имеющее такие события ведущему устройству репликации, следует включить
каждому использованию события ALTER EVENT
, где event_name
ENABLEDevent_name
имя события.
Если больше чем одно ведущее устройство было включено в создание событий на этом ведомом устройстве, и Вы хотите
идентифицировать события, которые создавались только на данном ведущем устройстве, имеющем ID сервера master_id
, измените предыдущий запрос на EVENTS
таблица, чтобы включать ORIGINATOR
столбец, как показано здесь:
SELECT EVENT_SCHEMA, EVENT_NAME, ORIGINATOR FROM INFORMATION_SCHEMA.EVENTS WHERE STATUS = 'SLAVESIDE_DISABLED' AND ORIGINATOR = 'master_id
'
Можно использовать ORIGINATOR
с SHOW EVENTS
оператор подобным способом:
SHOW EVENTS WHERE STATUS = 'SLAVESIDE_DISABLED' AND ORIGINATOR = 'master_id
'
Прежде, чем включить событиям, которые были тиражированы от ведущего устройства, следует отключить MySQL Event
Scheduler на ведомом устройстве (использование оператора такой как SET GLOBAL
event_scheduler = OFF;
), выполните любого необходимого ALTER EVENT
операторы, перезапустите сервер, затем повторно включите
Планировщику События на ведомом устройстве позже (использующий оператор такой как SET
GLOBAL event_scheduler = ON;
)-
Если Вы позже понижаете в должности новое ведущее устройство назад к тому, чтобы быть ведомым устройством
репликации, следует отключить вручную все события, включенные ALTER EVENT
операторы. Можно сделать это, храня в отдельной таблице имена
события от SELECT
оператор, показанный ранее, или использование ALTER
EVENT
операторы, чтобы переименовать события с общим префиксом такой как replicated_
идентифицировать их.
Если Вы переименовываете события, то, понижая в должности этот сервер назад к тому, чтобы быть ведомым
устройством репликации, можно идентифицировать события, запрашивая EVENTS
таблица, как показано здесь:
SELECT CONCAT(EVENT_SCHEMA, '.', EVENT_NAME) AS 'Db.Event' FROM INFORMATION_SCHEMA.EVENTSWHERE INSTR(EVENT_NAME, 'replicated_') = 1;