Подтвердить что ты не робот

Могу ли я создать TRIGGER в DB DB?

Я пытаюсь создать триггер на таблице в моей базе данных Amazon RDS, и я не могу заставить это произойти.

Я попытался создать триггер в таблице в используемом мной клиенте mysql (Navicat) и получил ошибку, для которой мне была нужна привилегия SUPER. После некоторых поисков я обнаружил, что вы можете SET GLOBAL log_bin_trust_function_creators = 1 обойти это. Я пробовал это, используя следующие инструкции: http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ (а затем перезагрузив сервер БД для хорошей меры), но не повезло.

Я также попытался создать триггер и установить переменную через строку mysql commmand, чтобы убедиться, что Navicat не добавляет ничего нежелательного в мои SQL-команды, но это тоже не сработало. Похоже, что от поиска не существует возможности предоставить себе привилегию SUPER.

Итак... создает триггер в RDS?

4b9b3361

Ответ 1

Нет, на самом деле это невозможно, просто требуется слишком много дополнительной работы.

Во-первых, кажется, что невозможно применить Super Privileges к группе параметров по умолчанию. Поэтому мне нужно было создать новую группу параметров DB через консоль или CLI.

Я обнаружил, что ключевым моментом является то, что область по умолчанию не была областью, которую я пыталась использовать, поэтому мне пришлось использовать параметр --region, чтобы применить его к группе в правильном регионе, где я развертывал свою БД Экземпляр

rds-create-db-parameter-group -db -параметр-group-name allow-triggers -description 'группа параметров, чтобы разрешить триггеры -регион вашей области

Затем мне пришлось создать экземпляр БД, который использовал эту группу параметров. (Снова через консоль или CLI)

выстр создать-дб-экземпляр

Затем мне пришлось изменить группу параметров, чтобы позволить log_bin_trust_function_creators достигать только через CLI

rds-modify-db-parameter-group -db-parameter-group-name yourgroupname -region yourRegion -параметры 'name = log_bin_trust_function_creators, value = true, method = instant'

Наконец, мне пришлось изменить созданный экземпляр БД, чтобы разрешить триггеры, а также только CLI.

rds-modify-db-instance -db-instance-identifier your-db-instance-id -db-параметр-group-name allow-triggers -apply-немедленно

Ответ 2

Легко!

Откройте веб-консоль RDS.

Откройте вкладку "Группы параметров".

Создайте новую группу параметров. В диалоговом окне выберите семейство MySQL, совместимое с вашей версией базы данных MySQL, укажите имя и подтвердите.

Выберите только что созданную группу параметров и введите "Редактировать параметры".

Найдите параметр log_bin_trust_function_creators и установите его значение в 1.

Сохраните изменения.

Откройте вкладку "Экземпляры" . Разверните свой экземпляр MySQL и выпустите "Действие экземпляра" с именем "Изменить".

Выберите только что созданную группу параметров и включите "Применить немедленно".

Нажмите "Продолжить" и подтвердите изменения.

Снова откройте вкладку "Экземпляры" . Разверните свой экземпляр MySQL и выпустите "Действие экземпляра" с именем "Изменить".

Не забудьте: откройте вкладку "Экземпляры" . Разверните свой экземпляр MySQL и выпустите "Экземплярное действие" с именем "Перезагрузка".

Через - http://techtavern.wordpress.com/2013/06/17/mysql-triggers-and-amazon-rds/

Ответ 3

В дополнение к модификации группы параметров, о которой уже говорили другие, возникает еще одна проблема, возникающая при использовании дампа базы данных MySQL (через mysqldump) для создания триггеров в экземпляре AWS RDS. Вы можете получить такое сообщение:

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

Это происходит потому, что дамп содержит записи "определителя" с именем пользователя, отличным от имени пользователя основного диска RDS. Одним из решений является замена имени пользователя-определителя вашим именем пользователя RDS-master. Другое решение - не использовать mysqldump для создания вашей базы данных.

Смотрите эту запись в блоге для получения дополнительной информации:

http://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/

Ответ 4

EDIT: Оказывается, Multi-AZ для MySQL использует "физическую репликацию", а не логическую репликацию, поэтому это может быть неверно. По крайней мере, то, что говорится в их документации: https://aws.amazon.com/rds/details/multi-az/ - Я спросил на своих форумах, что это значит, но не получил ответа. Что странно, мой экземпляр RDS Multi-AZ утверждает, что он "мастер в настройке репликации", хотя у меня нет прочитанных реплик.


Поскольку вопрос уже рассмотрен, это комментарий больше, чем ответ:

Я удивлен, что никто не учитывает почему эта функция недоступна по умолчанию. Амазонка не отключила бы это, чтобы заставить людей жить тяжелее.

В репликации ведущего/ведомого может быть опасно использовать хранимые процедуры и триггеры, которые изменяют данные (как при выполнении запросов, отличных от SELECT).

Пожалуйста, прочитайте ниже, прежде чем отключать это ограничение в настройке ведущего/ведомого, что Amazon RDS - это когда вы используете Multi-AZ (и вы должны, по крайней мере, для производства).

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

Ответ 5

Я следовал выше, но это не сработало для меня. Я потратил почти день, чтобы понять, почему он не работает, и теперь я знаю, почему. Я перечисляю шаги, которые я выполнил, чтобы заставить его работать.

Созданная группа параметров mysql, использующая веб-консоль aws (убедитесь, что она должна иметь тот же семейство, что и группа параметров по умолчанию. Ранее я создал группу параметров, но у нее было другое семейство, и поэтому она не работала..

Использование значения веб-консоли aws от log_bin_trust_function_creators до 1

Применить новую группу параметров. Это еще один важный шаг.

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

Вам нужно RDSCli - http://s3.amazonaws.com/rds-downloads/RDSCli.zip

Затем проверьте, связана ли группа параметров с вашим экземпляром db

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

И затем перезагрузитесь, прежде чем пытаться создать триггер

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

Не забудьте установить ниже переменную окружения, прежде чем пытаться выполнить команды.

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)

Благодаря http://blog.iprofs.nl/2013/03/20/rds-database-triggers-for-mysql/ для полной информации.

Ответ 6

AWS излагает, как включить функции и triggers в this разместить

  • Создайте группу параметров DB для вашего экземпляра MySQL: Войдите в консоль управления AWS и откройте Amazon RDS console. В навигационной панели выберите "Группы параметров". Выберите "Создать группу параметров". Появится окно Создать группу параметров. Для группы Parameter Group выберите семейство групп параметров. Для имени группы введите имя новой группы параметров DB. Для Описание введите описание для новой группы параметров DB. Выберите "Создать". Важный После создания группы параметров DB вы должны подождать не менее 5 минут, прежде чем создавать свой первый экземпляр DB, который использует эту группу параметров DB.

Дополнительные сведения о создании группы параметров базы данных см. в разделе Работа с группами параметров базы данных - Создание группы параметров DB.

  1. Измените вновь созданную группу параметров и установите следующий параметр: В навигационной панели выберите "Группы параметров". Доступные группы параметров DB отображаются в списке. В списке выберите группу параметров, которую вы хотите изменить. Выберите "Изменить параметры" и установите следующий параметр в указанное значение: log_bin_trust_function_creators = 1 Выберите Сохранить изменения. Важный После изменения группы параметров DB вы должны подождать не менее 5 минут, прежде чем создавать свой первый экземпляр БД, который использует эту группу параметров DB.

Сведения о модификации группы параметров DB см. в разделе "Работа с группами параметров DB" - "Изменение параметров в группе параметров базы данных".

  1. Свяжите свой экземпляр RDS DB с новой или измененной группой параметров DB: В навигационной панели выберите Экземпляры. Выберите экземпляр БД, который вы хотите связать с группой параметров DB. В меню "Действия экземпляра" выберите "Изменить". В диалоговом окне "Изменить экземпляр БД" в разделе "Параметры базы данных" выберите группу параметров, которую вы хотите связать с экземпляром DB. Изменение этого параметра не приводит к отключению. Имя группы параметров изменяется немедленно, но фактические изменения параметров не применяются, пока вы не перезагрузите экземпляр без переключения. Примените изменения, перезагрузив экземпляр.

Ответ 7

Для меня это работало как подсказка @foxybagga , но мне нужно было обновить сгенерированный дамп sql (из mysqlworkbench), чтобы CURRENT_USER был как DEFINER

т

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 */ ;

Надеюсь, это поможет кому-то иметь такую ​​же проблему.