定义器错误,而建立一个副本在谷歌云sql与外部源mysql



我们正在google cloud sql中建立一个托管在其他地方的MySQL的副本。

当检查复制失败的原因时,我们得到这个:

{
"kind": "sql#externalSyncSettingErrorList",
"errors": [
{
"kind": "sql#externalSyncSettingError",
"type": "UNSUPPORTED_DEFINER",
"detail": "Definer user root@localhost not supported. Please update host to '%'."
}
]
}

我没有将根目录上的主机更改为'%'…关于如何在不触及源服务器的情况下解决这个问题,有什么建议吗?

以下示例演示如何在Linux、macOS或Windows Subsystem for Linux (WSL)中删除DEFINER:

删除

sed -i -e 's/DEFINER=`root`@`localhost`//g' dump.sql

查找并替换

sed -i -e 's/DEFINER=`root`@`localhost`/DEFINER=`masteruser`@`%`/g' dump.sql

注:请替换masteruser的值

然后在副本上恢复(google cloud sql)。

您必须分析源代码中的所有定义器。您可以运行以下SQL:

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

如果你看到某些东西(过程,函数,视图,触发器,事件)有一个定义器,其中host等于localhost(例如root@localhost),将这些定义器更改为另一个用户。我的源数据库root@localhost和root@10。%,两个用户具有相同的特权,然后我简单地将定义器更改为root@10。使用phpMyAdmin.

相关内容

  • 没有找到相关文章

最新更新