aws triggers amazon-rds
http://s3.amazonaws.com/rds-downloads/RDSCli.zip

triggers - aws - ¿Puedo CREAR TRIGGER en un rds DB?



pgadmin connect to database (7)

Estoy tratando de crear un desencadenante en una tabla en mi base de datos de Amazon RDS, y parece que no puedo hacer que suceda.

Intenté crear un disparador en una tabla en el cliente mysql que uso (Navicat) y obtuve el error de que necesitaba el privilegio SUPER para hacerlo. Después de algunas búsquedas, encontré que podías SET GLOBAL log_bin_trust_function_creators = 1 para evitar esto. Intenté eso usando estas instrucciones: http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ (y luego reiniciando el servidor de base de datos por una buena medida), pero no hubo suerte.

También intenté crear el disparador y configurar la variable a través de la línea de comandos mysql para asegurarme de que Navicat no estaba agregando nada no deseado a mis comandos de SQL, pero eso también falló. También parece que al buscar no hay forma de otorgarte el privilegio SUPER.

Entonces ... ¿es posible crear un disparador en RDS?


¡Es fácil!

Abra la consola web RDS.

Abra la pestaña "Grupos de parámetros".

Crear un nuevo grupo de parámetros. En el cuadro de diálogo, seleccione la familia MySQL compatible con su versión de base de datos MySQL, asígnele un nombre y confirme.

Seleccione el grupo de parámetros recién creado y emita "Editar parámetros".

Busque el parámetro ''log_bin_trust_function_creators'' y establezca su valor en ''1''.

Guarda los cambios.

Abra la pestaña "Instancias". Expanda su instancia de MySQL y emita la "Acción de instancia" llamada "Modificar".

Seleccione el grupo de parámetros recién creado y habilite "Aplicar inmediatamente".

Haga clic en "Continuar" y confirme los cambios.

De nuevo, abre la pestaña "Instancias". Expanda su instancia de MySQL y emita la "Acción de instancia" llamada "Modificar".

No olvides: abre la pestaña "Instancias". Expanda su instancia de MySQL y emita la "Acción de instancia" llamada "Reiniciar".

Vía - http://techtavern.wordpress.com/2013/06/17/mysql-triggers-and-amazon-rds/


AWS explica cómo habilitar funciones y triggers en esta publicación

  1. Cree un grupo de parámetros de DB para su instancia de MySQL: inicie sesión en la Consola de administración de AWS y abra la console Amazon RDS. En el panel de navegación, elija Grupos de parámetros. Seleccione Crear grupo de parámetros. Aparece la ventana Crear grupo de parámetros. Para la familia de grupos de parámetros, elija la familia de grupos de parámetros. Para Nombre del grupo, escriba el nombre del nuevo grupo de parámetros de DB. Para Descripción, escriba una descripción para el nuevo grupo de parámetros de DB. Seleccione Crear. Importante Después de crear un grupo de parámetros de base de datos, debe esperar al menos 5 minutos antes de crear su primera instancia de base de datos que utiliza ese grupo de parámetros de base de datos.

Para obtener más información sobre cómo crear un grupo de parámetros de DB, consulte Trabajar con grupos de parámetros de DB - Crear un grupo de parámetros de DB.

  1. Modifique el grupo de parámetros recién creado y configure el siguiente parámetro: En el panel de navegación, elija Grupos de parámetros. Los grupos de parámetros de DB disponibles aparecen en una lista. En la lista, seleccione el grupo de parámetros que desea modificar. Elija Editar parámetros y configure el siguiente parámetro al valor especificado: log_bin_trust_function_creators = 1 Elija Guardar cambios. Importante Después de modificar un grupo de parámetros de base de datos, debe esperar al menos 5 minutos antes de crear su primera instancia de base de datos que utiliza ese grupo de parámetros de base de datos.

Para obtener información sobre la modificación de un grupo de parámetros de DB, consulte Trabajar con grupos de parámetros de DB - Modificar parámetros en un grupo de parámetros de DB.

  1. Asocie su instancia de RDS DB con el grupo de parámetros de DB nuevo o modificado: En el panel de navegación, elija Instancias. Seleccione la instancia de base de datos que desea asociar con un grupo de parámetros de base de datos. En el menú Acciones de instancia, elija Modificar. En el cuadro de diálogo Modificar instancia de base de datos, en Opciones de base de datos, elija el grupo de parámetros que desea asociar con la instancia de base de datos. Cambiar esta configuración no resulta en una interrupción. El nombre del grupo de parámetros cambia inmediatamente, pero los cambios reales de los parámetros no se aplican hasta que reinicie la instancia sin conmutación por error. Aplicar los cambios reiniciando la instancia.

Además de la modificación del grupo de parámetros que otros ya han mencionado, hay un desafío adicional que surge cuando se usa un volcado de base de datos MySQL (a través de mysqldump) para crear disparadores en una instancia de AWS RDS. Puede recibir un mensaje como este:

ERROR 1227 (42000) at line 875: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Esto sucede porque el volcado contiene entradas "definidoras" con un nombre de usuario diferente al nombre de usuario maestro de RDS. Una solución es reemplazar el nombre de usuario definidor con su nombre de usuario maestro RDS. Otra solución es no usar mysqldump para crear su base de datos.

Vea esta publicación del blog para más información:

percona.com/blog/2014/07/02/…


No, en realidad no es imposible, solo requiere demasiado trabajo extra.

En primer lugar, parece que es imposible aplicar Super Privilegios al grupo de parámetros predeterminado. Entonces, lo que tenía que hacer era crear un nuevo grupo de Parámetros de DB a través de la Consola o la CLI.

Lo que encontré fue que la clave es que la región predeterminada no era la región que intentaba usar, así que tuve que usar un parámetro --region para aplicarlo al grupo en la región correcta donde estaba implementando mi instancia de base de datos

rds-create-db-parámetro-grupo --db-parámetro-grupo-nombre permitir-desencadenadores -descripción ''grupo de parámetros para permitir desencadenantes'' - región de su región

Luego tuve que crear una instancia de base de datos que utilizara ese grupo de parámetros. (Nuevamente a través de la consola o CLI)

rds-create-db-instance

Luego tuve que modificar el grupo de parámetros para permitir que log_bin_trust_function_creators solo se pueda lograr a través de la CLI

rds-modify-db-parámetro-grupo --db-parámetro-nombre-grupo su nombre de grupo --región suRegión - nombre de los parámetros = log_bin_trust_function_creators, value = true, method = inmediato ''

Por último, tuve que modificar la instancia de base de datos creada para permitir activadores, también solo CLI.

rds-modify-db-instance --db-instance-identifier su-db-instance-id --db-parámetro-nombre-grupo permiso-desencadenadores --apply-inmediatamente


Para mí, funcionó como sugiere la answer @ foxybagga, pero necesitaba actualizar el volcado de sql generado (desde mysqlworkbench) para tener CURRENT_USER como DEFINER

es decir:

DELIMITER ;; /*!50003 CREATE*/ /*!50017 DEFINER=CURRENT_USER*/ /*!50003 TRIGGER `sod_db`.`date` BEFORE INSERT ON `sod_db`.`CashOut` FOR EACH ROW BEGIN SET NEW.created = NOW(); END */;; DELIMITER ; /*!50003 SET sql_mode = @saved_sql_mode */ ; /*!50003 SET character_set_client = @saved_cs_client */ ; /*!50003 SET character_set_results = @saved_cs_results */ ; /*!50003 SET collation_connection = @saved_col_connection */ ;

Espero que esto ayude a alguien que está teniendo el mismo problema.


Seguí lo anterior pero no funcionó para mí. Pasé casi un día para averiguar por qué no funciona y ahora sé por qué. Estoy enumerando los pasos que he seguido para que funcione.

Creé el grupo de parámetros mysql usando la consola web aws (asegúrese de que tenga la misma familia que el grupo de parámetros predeterminado. Anteriormente, había creado un grupo de parámetros, pero tenía una familia diferente y, por lo tanto, no funcionó. Este es un paso crítico

Usando el valor de cambio de la consola web de aws de log_bin_trust_function_creators a 1

Aplicar nuevo grupo de parámetros. Este es otro paso crítico.

rds-modify-db-instance –I $AWS_ACCESS_KEY –S $AWS_SECRET_KEY –region $EC2_REGION / –db-instance-identifier $DB_INSTANCE / –db-parameter-group-name $DB_GROUPNAME / –apply-immediately

Necesita RDSCli de - http://s3.amazonaws.com/rds-downloads/RDSCli.zip

Luego verifique si el grupo de parámetros está asociado con su instancia de db

rds-describe-db-instances / –I $AWS_ACCESS_KEY / –S $AWS_SECRET_KEY / –region $EC2_REGION

Y luego reinicie antes de intentar crear un disparador

rds-reboot-db-instance / –I $AWS_ACCESS_KEY / –S $AWS_SECRET_KEY / –region $EC2_REGION / –db-instance-identifier $DB_INSTANCE

Recuerde establecer la siguiente variable de entorno antes de probar los comandos anteriores.

export AWS_ACCESS_KEY=’*****’ export AWS_SECRET_KEY=’*****’ export EC2_REGION=’region’ export AWS_RDS_BIN=”$AWS_RDS_HOME/bin” export PATH=$PATH:$AWS_RDS_BIN export JAVA_HOME=c:/jdk1.6_25 (in most cases this is already set)

Gracias a http://blog.iprofs.nl/2013/03/20/rds-database-triggers-for-mysql/ por todos los detalles.


EDITAR: Resulta que Multi-AZ para MySQL usa "replicación física" y no replicación lógica, por lo que puede no ser correcto. Al menos, eso es lo que dice su documentación: https://aws.amazon.com/rds/details/multi-az/ - He preguntado en sus foros qué significa esto, pero no obtuve una respuesta. Lo extraño es que mi instancia de RDS Multi-AZ afirma que es un "maestro en una configuración de replicación", aunque no tengo réplicas de lectura.

Como la pregunta ya se ha abordado, este es un comentario más que una respuesta:

Me sorprende que nadie tenga en cuenta por qué esta característica no está disponible por defecto. Amazon no lo inhabilitaría solo para hacer más difícil la vida de las personas.

En una replicación maestro / esclavo puede ser peligroso usar procedimientos almacenados y desencadenadores que modifican datos (como en consultas que no son SELECT ).

Lea a continuación antes de deshabilitar esta restricción en una configuración de maestro / esclavo, qué Amazon RDS es cuando usa Multi-AZ (y debería, al menos para la producción).

http://dev.mysql.com/doc/refman/5.6/en/stored-programs-logging.html