首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于mysql语句的复制-不安全语句

基于mysql语句的复制-不安全语句
EN

Database Administration用户
提问于 2013-01-02 15:42:37
回答 1查看 2.9K关注 0票数 4

最近,我已经建立了基于语句的复制,并且我的错误日志中充满了这个错误。

121231 21:10:55自警告 =语句以来使用语句格式写入二进制日志的BINLOG_FORMAT不安全语句。插入..。在具有多个唯一键的表上的重复键更新是不安全语句:插入到集群(route_number、vehicle_name、时间、状态、方向、eta)值(11,'223',-1.0,1,-1,99999.0)上的重复键更新route_number = 11,时间= -1.0,状态=1,方向= -1,eta = 99999.0

121231 21:10:55自警告 =语句以来使用语句格式写入二进制日志的BINLOG_FORMAT不安全语句。插入..。在具有多个唯一键的表上重复的键更新是不安全语句:在重复键更新(18、2012、39.70092857098426、7、29.970915、-90.09537、2.2320573776159844、1、‘、'2012-12-31 21:10:55’、1、1)上插入vehicleETA (routes_id、vehicleNum、relEta、relStopID、lat、lng、方位、inETA)值( relEta = 39.70092857098426、relStopID = 7、lat = 29.970915,液化天然气= -90.09537,轴承= 2.2320573776159844,在线=1,msg = '',lastReport =‘2012-31 21:10:55,方向= 1,inETA = 1,GMT = '031052',lastPass =0

Mysql Docs声明这是不安全的,因为:

插入..。在具有多个主键或唯一键的表上的重复键更新语句。当对包含多个主键或唯一键的表执行时,该语句被认为是不安全的,它敏感于存储引擎检查键的顺序,该顺序不是确定性的,MySQL服务器更新的行的选择取决于该顺序。

我只是不明白这意味着什么。有人能给我解释一下吗?我想知道,这是否是一个巨大的问题,将导致数据差异的奴隶,或警告,我可以简单地忽略。不幸的是,这些错误正在快速地填充日志。这些数据是相对短暂的和即时的。

我可以选择

  • 将日志记录模式更改为“混合”
  • 关闭警告(忽略这些警告)

或者我们可以修改查询。这里有什么建议吗?

EN

回答 1

Database Administration用户

发布于 2013-01-02 15:58:04

从长远来看,这可能会导致奴隶之间的差异。我也收到过同样的警告(但是插入延迟了,所以您的里程可能会有所不同),在几个编写密集的表上,数据每周会有几次不同(导致一个宽松的转储和导入)。

在每个mysql服务器上,某些东西的排序并不一定是相同的,因此您可能会以不同的顺序得到相同的数据。这就是“非确定性”的意思,您执行的是完全相同的查询,但可能得到不同的结果。

如果mysql版本支持绑定日志的混合模式,我肯定会使用它。正如您在http://dev.mysql.com/doc/refman/5.1/en/binary-log-formats.html上看到的那样,默认情况下,它没有混合的唯一原因是向后兼容性:

MySQL 5.1.5中增加了对基于行的日志记录的支持。混合日志记录可以从MySQL 5.1.8开始。在MySQL 5.1.12中,混合成为默认的日志记录模式;在5.1.29中,为了与MySQL 5.0兼容,默认状态改为语句。

混合模式使用语句模式绑定日志(默认),除非它知道查询是不确定的,否则它将切换到这些查询的行模式。对于行模式,它只发送更改过的行(如果有的话),所以这再次是确定性的。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/31344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档