Автор: shuixian
Работают ли хранимые процедуры и функции MySQL 5.1 при репликации?
Да, стандартное поведение выполняется в хранимых процедурах и функциях, которые реплицируются с главного сервера MySQL на подчиненный сервер.
Можно ли скопировать хранимые процедуры и функции, созданные на главном сервере, на подчиненный сервер?
Да, хранимые процедуры и функции выполняются с помощью общих операторов DDL, создание которых на главном сервере копируется на подчиненный сервер, поэтому целевой объект будет существовать на обоих серверах. Операторы ALTER и DROP для хранимых процедур и функций также реплицируются.
Как происходит поведение внутри реплицируемых хранимых процедур и функций?
MySQL записывает каждое событие DML, которое происходит внутри хранимых процедур и функций, и копирует эти отдельные действия на подчиненные серверы. Фактические вызовы хранимых процедур и функций не копируются.
Существуют ли какие-либо особые требования безопасности для совместного использования хранимых процедур, функций и репликации?
Да, поскольку ведомое устройство имеет разрешение на выполнение любого оператора, читающего двоичный журнал ведущего устройства, указанные ограничения безопасности существуют для хранимых процедур и функций, используемых при репликации. Если репликация или двоичное ведение журнала включены в целом (для целей восстановления на определенный момент времени), то у администратора базы данных MySQL есть два доступных варианта безопасности:
Любой пользователь, который хочет создавать хранимые процедуры, должен иметь привилегии SUPER.
В качестве альтернативы администратор базы данных может установить системную переменную log_bin_trust_routine_creators равным 1, что позволит любому пользователю со стандартными разрешениями CREATE ROUTINE создавать хранимые процедуры и функции.
Каковы ограничения на поведение копирования хранимых процедур и функций?
Неопределенные (случайные) или временные строки, встроенные в хранимые процедуры, не копируются должным образом. Случайно сгенерированные результаты по самой своей природе предсказуемы и не могут быть надежно клонированы. Следовательно, случайное поведение, реплицируемое на ведомом устройстве, не будет отражать поведение, происходящее на ведущем устройстве. Обратите внимание, что объявление хранимой процедуры или функции DETERMINISTIC или установка системной переменной равным 0 в log_bin_trust_routine_creators позволит вызывать операции со случайными значениями.
Кроме того, поведение на основе времени не воспроизводится на подчиненном сервере, поскольку такое поведение на основе времени не воспроизводится в хранимой процедуре через двоичный журнал, используемый для репликации, поскольку двоичный журнал регистрирует только события DML и не включает ограничение по времени.
Наконец, если ошибка возникает в неинтерактивной таблице во время большого действия DML (например, массовой вставки), неинтерактивная таблица может подвергаться репликации, а главный сервер может быть частично обновлен в результате действия DML в реплицируемой версии. неинтерактивной таблицы. Но из-за возникшей ошибки обновление на подчиненном сервере не произошло. Что касается поведения функции DML, рабочая область будет выполняться с ключевым словом IGNORE, так что обновления, вызывающие ошибки на главном сервере, игнорируются, а обновления, которые не вызывают ошибок, копируются на подчиненный сервер.