我正在尝试使用当前在第一代云SQL上运行的数据库转储来填充第二代云sql实例(v5.7)。它有一些触发器:
/*!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 */;;
尝试将数据库插入第二代时的结果是:
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)
有没有办法在第二代启用这样的触发器?
干杯, 安德烈
答案 0 :(得分:11)
由于某些触发器在启用复制时会产生不一致的结果,因此默认配置中不允许使用它们。
您有两种选择:
如果您不关心复制或能够进行即时恢复,则可以禁用二进制日志。
否则,如果您确定触发器是安全的,则可以编辑实例并在log_bin_trust_function_creators
下将advanced options
标记设置为true。为了安全起见,触发器必须保证它将对主服务器和副本服务器产生相同的效果。您可以在以下帖子中找到解释和不安全触发器的示例:https://dba.stackexchange.com/questions/73447/why-when-does-creating-a-mysql-trigger-require-super-privileges
答案 1 :(得分:3)
我遇到了同样的问题,在阅读完所有论坛之后,解决方案是在控制面板中设置变量,而不是从控制面板中设置Google Cloud SQL而不是控制台。
在实例页面中输入:Instances
选择您的实例并转到修改。 (点击三个点按钮)。
转到最后一个选项,“Marcas de Cloud SQL”的标志。
将您的变量置于ON状态。
log_bin_trust_function_creators -> ON
我还需要等几分钟才能进入Cloud Shell。 (我没有足够的声誉进入链接,但在google中查看“在云壳中使用mysql客户端”
答案 2 :(得分:0)
我遇到了同样的问题。以下操作怎么样? 1.在Cloud Strage上下载导出的.sql文件2.在CLI上以root身份连接到Cloud SQL 3. import(例如source xxx.sql)它运行良好。