如何在Google Cloud Sql副本上创建视图?

5

我成功地从我的外部主库中导出了数据,并在Cloud SQL上创建了一个副本。到目前为止,我对此过程感到非常满意,但在导出过程中,我不得不忽略视图、触发器等。

既然我已经成功创建了一个从库,那么如何重新添加视图等,以便我可以像往常一样运行所有的脚本而不需要更改呢?还是这些只读副本不支持视图、触发器等功能?我的印象是只有导出/导入过程不支持这个功能。


我几乎可以确定你在不能导入视图方面一定犯了错误,但是...看起来你是正确的(https://cloud.google.com/sql/docs/mysql/replication/replication-from-external)...然而作为长期的MySQL DBA,这种限制对我来说毫无意义。 - Michael - sqlbot
1
本能告诉我,您可能需要在主服务器上删除视图,并使用“IF EXISTS”声明来避免当副本尝试删除不存在的视图时破坏复制,然后在主服务器上重新创建它并让其复制。 DROP VIEW IF EXISTS v1; 然后 CREATE VIEW v1 AS SELECT ...。我犹豫是否将其发布为答案,因为它似乎非常奇怪和不必要,但您可以尝试一下看看它是否可行。 - Michael - sqlbot
@Michael-sqlbot 我完全同意你的看法,但我喜欢你的想法。让我试试并回到你那里。这个解决方案可能适用于视图、触发器和存储过程,因为它们都必须从转储中排除(根据此处)。不过有一个问题,为什么我需要 DROP VIEW IF EXISTS?为什么不只是 CREATE VIEW?这将在主服务器上失败,但应该可以在从服务器上成功运行,对吗? - blueether
在大多数情况下,如果查询在主服务器上失败,则不会写入到二进制日志中。虽然也有例外情况(参见https://dba.stackexchange.com/a/47166/11651),但在这些情况下,在复制品与主服务器上遇到*不同的结果*仍然是一个复制错误。当`BINLOG_FORMAT`设置为 ROW 时,作为安全有效结果几乎肯定需要这样设置,触发器/存储过程/函数/事件在复制品上是不必要的,因为主服务器只会为存储程序修改的行编写复制事件,而不是为实际调用它们编写。 - Michael - sqlbot
1个回答

0

打开Google Cloud控制台中的Cloud SQL Instances页面。 找到您想要创建副本的实例,并在其列表的最右侧打开“更多操作”菜单。 选择“创建只读副本”。 如果您没有看到该选项,则该实例是一个副本;您不能创建副本的副本。

如果该实例已启用备份和二进制日志记录,请继续执行第6步。否则,选择“自动化备份”和“启用二进制日志记录”,点击“继续”,然后点击“保存并重启”以重新启动该实例。 启用二进制日志记录会导致该实例重新启动。

在“创建只读副本”页面上,根据需要更新实例ID和任何其他所需的配置选项,包括名称、区域和区域。 点击“创建”。 Cloud SQL会创建必要的备份,并创建副本。 您将返回到主实例的实例页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接