【问题标题】:Import MySQL dump into Google SQL - unique_checks=0 is non deterministic将 MySQL 转储导入 Google SQL - unique_checks=0 是不确定的
【发布时间】:2018-06-26 12:02:55
【问题描述】:

我目前正在尝试将一个 mysqldump (~60GB),包括触发器和存储过程导入到谷歌云 sql 数据库实例中。

我已使用 terraform 将 log_bin_trust_function_creators 设置为 true/on,并使用 perl 从触发器中删除了 DEFINER 部分。

我尝试使用gcloud sql导入功能和Web控制台(从存储桶导入)导入,每次在stackdriver中弹出相同的错误。

严重性:“错误”
textPayload:“2018-06-26T10:48:42.727799Z 87406 [警告] 使用不确定的 unique_checks=0!”

在转储期间设置 Afaik unique_checks 以加快导入速度。
我在互联网上找不到任何东西。

谁能告诉我错误的含义以及如何解决它?
我想避免再次转储数据库,因为它需要很长时间。

我必须注意,我只是使用了基本的mysqldump,没有here建议的参数,因为我刚刚找到了这篇文章。

最好的问候,

最大

【问题讨论】:

    标签: mysql google-cloud-sql


    【解决方案1】:

    警告(而不是错误!)与数据的导入没有直接关系,而是与在目标 MySQL 环境中如何配置复制有关。

    正如Determination of Safe and Unsafe Statements in Binary Logging 上的 MySQL 文档所说(突出显示是我的):

    MySQL 复制中语句的“安全性”是指是否 该语句及其效果可以使用正确复制 基于语句的格式。如果这句话是真的,我们指的是 声明为安全的;否则,我们将其称为不安全的。

    一般来说,如果一个语句是确定性的,那么它是安全的,如果它是不安全的 不是。

    ...

    对系统变量的引用。 大多数系统变量不是 使用基于语句的格式正确复制。 参见章节 17.4.1.39,“复制和变量”。有关例外情况,请参阅第 5.4.4.3 节,“混合二进制日志记录格式”。

    unique_checks=0 设置一个系统变量,代码可能将其设置在全局级别,这在基于语句的复制中被认为是不安全的。

    要么更改代码以设置unique_checks=0 on session level(推荐),要么将change the binary logging type 设置为mixed

    【讨论】:

    • 我将此解释为错误,因为导入确实因此停止。
    【解决方案2】:

    您必须注意一些Differences between Cloud SQL and standard MySQL functionality。这里的问题很可能出在触发器中。您可以尝试禁用二进制日志。看看this SO post

    但是,正确的方法是在您提到的documentation 之后执行 MySQL 转储。

    如果上述步骤都不起作用,请在 Cloud SQL 实例的日志中发布您遇到的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2016-08-21
      • 2017-05-27
      相关资源
      最近更新 更多