You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud SQL外接源MySQL搭建副本出现UNSUPPORTED_DEFINER报错问询

报错触发原因

该报错是Google Cloud SQL进行外部MySQL实例同步时的校验逻辑导致的:源库中视图、存储过程、触发器、事件等对象绑定了root@localhost作为DEFINER,Cloud SQL默认不允许host为localhost的DEFINER存在,要求修改为%。

无需修改源服务器的可行方案

方案1:Cloud SQL侧开启DEFINER校验跳过配置

直接修改待同步的Cloud SQL实例的数据库标志,不需要调整源端任何配置:

  • 添加参数cloudsql_external_sync_skip_definer_check,值设为on,直接跳过DEFINER合法性校验
  • 同步添加参数log_bin_trust_function_creators,值设为on,避免导入带DEFINER的存储函数时触发权限报错

方案2:本地处理备份文件剔除DEFINER

如果还处于备份导入初始化副本的阶段,在本地终端(不需要登录源服务器操作,仅需本地有数据库客户端工具即可)处理备份文件:

  • 使用mysqldump导出源库备份时,添加--skip-definer参数,导出的SQL文件会自动移除所有对象的DEFINER声明
mysqldump -u[源库用户名] -p[源库密码] -h[源库公网/内网地址] --skip-definer --databases [需要同步的库名] > backup.sql
  • 如果已经导出了备份文件,直接在本地全局替换SQL文件中的DEFINER=root@localhost字符串为空,或者替换为DEFINER=root@%,再导入到Cloud SQL即可

方案3:Cloud SQL侧开启DEFINER自动映射

如果使用的是MySQL 8.0及以上版本的Cloud SQL实例,可以配置DEFINER自动替换规则:

  • 添加参数cloudsql_rewrite_definer_to_host,值设为%,同步过程中所有DEFINER的host字段会自动替换为%,完全不需要修改源端DEFINER配置

以上方案均不需要修改源服务器的root用户host配置,也不会改动源库的任何现有数据。


内容的提问来源于stack exchange,提问作者Jimmy Pauwaert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 21:27:04