Autor: shuixian
¿Los procedimientos y funciones almacenados de MySQL 5.1 funcionan en la replicación?
Sí, el comportamiento estándar se realiza en funciones y procedimientos almacenados que se replican desde el servidor MySQL maestro al servidor esclavo.
¿Se pueden copiar los procedimientos almacenados y las funciones creadas en el servidor maestro al servidor esclavo?
Sí, los procedimientos almacenados y las funciones ejecutadas a través de sentencias DDL generales, cuya creación en el servidor maestro se copian al servidor esclavo, por lo que el destino existirá en ambos servidores. También se replican las declaraciones ALTER y DROP para funciones y procedimientos almacenados.
¿Cómo ocurre el comportamiento dentro de funciones y procedimientos almacenados replicados?
MySQL registra cada evento DML que ocurre dentro de los procedimientos y funciones almacenados y replica estas acciones individuales en servidores esclavos. Las llamadas reales a funciones y procedimientos almacenados no se copian.
¿Existen requisitos de seguridad especiales para el uso conjunto de procedimientos almacenados, funciones y replicación?
Sí, debido a que un esclavo tiene permiso para ejecutar cualquier declaración que lea el registro binario del maestro, existen restricciones de seguridad especificadas para los procedimientos almacenados y las funciones utilizadas con la replicación. Si la replicación o el registro binario están habilitados en general (para propósitos de recuperación en un momento dado), entonces el DBA de MySQL tiene dos opciones de seguridad disponibles:
Cualquier usuario que desee crear procedimientos almacenados debe recibir privilegios SUPER.
Alternativamente, un DBA puede establecer la variable del sistema log_bin_trust_routine_creators en 1, lo que permitirá a cualquier persona con permisos estándar CREATE ROUTINE crear procedimientos y funciones almacenados.
¿Cuáles son las restricciones sobre el comportamiento de copiar funciones y procedimientos almacenados?
Las líneas indeterminadas (aleatorias) o basadas en el tiempo incrustadas en procedimientos almacenados no se copian correctamente. Los resultados generados aleatoriamente, por su propia naturaleza, son predecibles y no pueden clonarse de forma fiable. Por lo tanto, el comportamiento aleatorio replicado en el esclavo no reflejará el que ocurre en el maestro. Tenga en cuenta que declarar un procedimiento almacenado o una función DETERMINISTICA o establecer la variable del sistema en 0 en log_bin_trust_routine_creators permitirá que se llamen operaciones de valores aleatorios.
Además, el comportamiento basado en el tiempo no es reproducible en el servidor esclavo porque dicho comportamiento basado en el tiempo no es reproducible en el procedimiento almacenado a través del registro binario utilizado para la replicación, porque el registro binario solo registra eventos DML y no incluye restricciones de tiempo.
Finalmente, si se produce un error en una tabla no interactiva durante una acción DML grande (como una inserción masiva), la tabla no interactiva puede someterse a replicación y el servidor maestro puede actualizarse parcialmente desde la acción DML en la versión replicada. de la mesa no interactiva. Pero debido al error que ocurrió, no hubo actualización en el servidor esclavo. Para el comportamiento DML de la función, el espacio de trabajo se ejecutará con la palabra clave IGNORE para que las actualizaciones que causan errores en el servidor maestro se ignoren y las actualizaciones que no causan errores se copien en el servidor esclavo.