将 MySQL 转储导入 Google SQL - unique_checks=0 是不确定的
Posted
技术标签:
【中文标题】将 MySQL 转储导入 Google SQL - unique_checks=0 是不确定的【英文标题】:Import MySQL dump into Google SQL - unique_checks=0 is non deterministic 【发布时间】: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建议的参数,因为我刚刚找到了这篇文章。
最好的问候,
最大
【问题讨论】:
【参考方案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 实例的日志中发布您遇到的错误。
【讨论】:
以上是关于将 MySQL 转储导入 Google SQL - unique_checks=0 是不确定的的主要内容,如果未能解决你的问题,请参考以下文章
sh 导入未使用--opt或--extended-insert转储的单个MySQL .sql文件(如来自VaultPress转储。显示一些* very * basic