【问题标题】:Google CloudSQL 2nd Generation create Function not workingGoogle CloudSQL 第二代创建功能不起作用
【发布时间】:2017-01-07 12:27:50
【问题描述】:

对于 Google CloudSQL 第二代实例,启用了故障转移复制。之后,当尝试导入数据库时​​,它不允许创建过程。收到以下错误。

错误代码:1419。您没有超级权限和二进制文件 日志记录已启用(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)

带有故障转移的CloudSQL真的不支持功能吗?

示例执行查询

DELIMITER ;;
CREATE FUNCTION `stutzen`(amount INT) RETURNS int(11)
    DETERMINISTIC
BEGIN
    DECLARE charges FLOAT DEFAULT 1.0;
    SELECT valuesettings INTO charges FROM dreamer_tbl WHERE namesettings='stutzen.co';
    RETURN FLOOR((amount / 100) * charges) ;
END ;;
DELIMITER ;

【问题讨论】:

    标签: mysql google-cloud-platform google-cloud-sql


    【解决方案1】:

    那不是存储过程,那是用户定义的函数。 您需要将此 UDF 重写为存储过程,这样才可以工作。

    【讨论】:

    • Google Cloud SQL 不支持用户定义函数?
    【解决方案2】:

    Google Cloud SQL 支持存储过程和函数。

    在您的情况下,问题似乎是您正在尝试导入具有某种需要 SUPER 权限的例程的 sql 文件,这是不允许的。

    【讨论】:

    • 你在哪里找到这些信息的?据我所知,不支持用户定义函数,请参见此处:cloud.google.com/sql/docs/features#differences
    • 嗨@MarkVincze,你是对的,cloud sql 支持存储过程和函数,但不支持用户定义函数。我想说的是,Arvindwill 函数可以写成函数(因此没必要写成存储函数)。感谢您的更正,我将编辑答案。 ;)
    【解决方案3】:

    我尝试使用 SET GLOBAL log_bin_trust_function_creators,它应该允许创建没有 SUPER 权限的函数,但在 Cloud SQL 中也不允许设置该变量。设置它需要超级权限。

    【讨论】:

    • 你应该从你的 cloudsql 实例的谷歌设置界面设置它。他们有一组特定的变量可以改变。
    【解决方案4】:

    你应该运行:

    gcloud sql instances patch [INSTANCE_NAME] --database-flags
    log_bin_trust_function_creators=ON
    

    如上所述here

    【讨论】:

      【解决方案5】:

      您只需将 'log_bin_trust_function_creators' 设置为 ON

      为此,请打开https://console.cloud.google.com

      选择 SQL

      选择您的实例

      选择编辑

      数据库信号

      添加: log_bin_trust_function_creators on

      general_log on

      保存

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2012-10-13
        • 2017-04-18
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        • 2022-01-26
        相关资源
        最近更新 更多