2016-08-30 5 views
4

Ich versuche, eine Cloud-SQL-Instanz 2. Generation (v5.7) mit einem Datenbank-Dump zu befüllen, der derzeit auf der Cloud der 1. Generation ausgeführt wird. Es hat einige Auslöser:Triggers cloud sql 2. 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 */;; 

Das Ergebnis beim Versuch, die Datenbank zu 2nd gen einzufügen ist:

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) 

Gibt es eine Möglichkeit Auslöser wie diese auf der 2. Generation zu ermöglichen?

Cheers, Andres

Antwort

6

Da einige Auslöser inkonsistente Ergebnisse produzieren kann, wenn die Replikation aktiviert ist, werden sie in der Standardkonfiguration nicht erlaubt.

Sie haben zwei Möglichkeiten:

  • Wenn Sie nicht über die Replikation oder in der Lage zu tun Zeitpunkt Genesung kümmern, können Sie Binary Protokolle deaktivieren.

  • Wenn Sie sicher sind, dass Ihr Trigger sicher ist, können Sie Ihre Instanz bearbeiten und das Flag log_bin_trust_function_creators unter advanced options auf true setzen. Um sicher zu gehen, muss der Trigger sicherstellen, dass er den gleichen Effekt sowohl für den Master als auch für die Replik (en) erzeugt. Sie können eine Erklärung und ein Beispiel für einen unsicheren Trigger im folgenden Beitrag finden: https://dba.stackexchange.com/questions/73447/why-when-does-creating-a-mysql-trigger-require-super-privileges

+0

Das hat nicht funktioniert, ich habe immer noch die gleichen Fehler nach Ersetzen/*! 50017 DEFINER = 'root' @'% '*/by/*! 50017 */ – cputoaster

+0

Tut mir leid, du hast Recht, ich habe nicht nahe genug auf die Fehlermeldung geschaut. Ich habe die Antwort mit mehr aktualisiert Informationen – Vadim

+0

funktioniert jetzt gut.Ich habe ein "now()" im Trigger, was eine etwas andere Zeit auf Master und Slave erzeugt, aber ich denke nicht, dass es ein Problem ist. Ich hoffe, dass Cloud SQL bald mehrere sql_mode Flags unterstützt, so dass man auch sauberen Datumscode schreiben kann. – cputoaster

0

Ich hatte das gleiche Problem. Wie wäre es mit der folgenden Operation? 1. Laden Sie die exportierte .sql-Datei in die Cloud Stage herunter. 2. Verbinden Sie sich mit Cloud SQL als root für CLI 3. import (z. B. source xxx.sql) Es funktionierte gut.

3

Ich stieß auf das gleiche Problem und nach dem Lesen aller Foren, die ich könnte, ist die Lösung, die Variable in der Systemsteuerung von Google Cloud SQL anstelle der Konsole zu setzen.

  1. Geben Sie in der Instanzen Seite: Instances

  2. Instanz auswählen und bearbeiten gehen. (Drücken Sie die Schaltfläche mit den drei Punkten).

  3. Gehen Sie zur letzten Option, Flags von "Marcas de Cloud SQL".

  4. Setzen Sie Ihre Variable in den ON-Status.

    log_bin_trust_function_creators -> ON

  5. musste ich auch ein paar Minuten warten und auf die Cloud Shell eingeben. (Ich habe nicht genug Ruf haben den Link zu geben, aber in Google suchen „Verwenden des MySQL-Client in der Cloud Shell“

2nd Generation Cloud SQL

Verwandte Themen