2016-08-30 3 views
4

Я пытаюсь заполнить экземпляр sql sql 2-го поколения (v5.7) с дампом базы данных, который в настоящее время работает на облаке SQL первого поколения. Она имеет несколько триггеров:Triggers cloud sql 2nd generation

/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`%`*/ /*!50003 TRIGGER `resourcetypetransaction_AFTER_INSERT` AFTER INSERT ON `resourcetypetransaction` FOR EACH ROW 
    BEGIN 
    INSERT INTO `resourcetypetransactionlog` SELECT * 
              FROM `resourcetypetransaction` 
              WHERE id = NEW.id; 
    END */;; 

В результате при попытке вставить базу данных для 2-го поколения является:

shinkansen:sql ameyer$ cat gae_2016-08-30T08\:21\:33.sql | mysql -u root -pxxxx -h xxxx napoleon; 
mysql: [Warning] Using a password on the command line interface can be insecure. 
ERROR 1419 (HY000) at line 1067: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 

Есть ли способ включить триггера, как это на 2-го поколения?

Приветствия, Андрес

ответ

6

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

У вас есть два варианта:

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

  • В противном случае, если вы уверены, что ваш триггер безопасен, вы можете отредактировать свой экземпляр и установить флаг log_bin_trust_function_creators в true под advanced options. Чтобы быть в безопасности, триггер должен гарантировать, что он будет генерировать тот же эффект как для мастера, так и для реплик (ов). Вы можете найти объяснение и пример небезопасного триггера в следующем посте: https://dba.stackexchange.com/questions/73447/why-when-does-creating-a-mysql-trigger-require-super-privileges

+0

Это не сработало, я до сих пор та же ошибка после заменяя/*! 50017 DEFINER = 'root' @'% '*/by/*! 50017 */ – cputoaster

+0

Извините, вы правы. Я не выглядел достаточно близко к сообщению об ошибке. Я обновил ответ более информация – Vadim

+0

сейчас работает нормально.У меня есть «now()» в триггере, который создаст немного другое время на главном и подчиненном, но я не думаю, что это проблема. Я надеюсь, что Cloud SQL будет поддерживать несколько флагов sql_mode в ближайшее время, поэтому можно написать код чистой даты. – cputoaster

0

У меня была такая же проблема. Как насчет следующей операции? 1. Загрузите экспортированный .sql-файл в Cloud Strage 2.connect to Cloud SQL как root на CLI 3. Импорт (например, source xxx.sql). Он работал хорошо.

3

Я столкнулся с той же проблемой, и после прочтения всех форумов, которые я мог, решение состоит в том, чтобы установить переменную в панели управления из Google Cloud SQL вместо консоли.

  1. Введите в Page Экземпляры: Instances

  2. Выберите экземпляр и нажмите изменить. (Нажмите кнопку трех точек).

  3. Перейти к последней опции, Флаги «Marcas de Cloud SQL».

  4. Включите переменную в состояние ВКЛ.

    log_bin_trust_function_creators -> ON

  5. мне пришлось подождать пару минут и ввести в облаке Shell. (Я не хватает репутации, чтобы войти в канал, но посмотреть в гугле для «Использование клиента MySQL в облаке Shell»

2nd Generation Cloud SQL

Смежные вопросы