Home  >  Article  >  Database  >  关于MySQL主从复制中UUID的警告信息_MySQL

关于MySQL主从复制中UUID的警告信息_MySQL

WBOY
WBOYOriginal
2016-06-01 13:13:211073browse

日期: 2014年5月23日

博客:铁锚

最近在查看MariaDB主从复制服务器 Master 的错误日志时看到很多条警告信息,都是提示 UUID()函数不安全,可能 Slave 产生的值和 Master不一致, 警告信息大致如下:

140522 15:11:10 [Warning] Unsafe statement written to the binary logusing statement format since BINLOG_FORMAT = STATEMENT.Statement is unsafe because it uses a system function that may return a different value on the slave. Statement: insert into t_user(userId,userName) values(uuid(),'FunYoung')
大致翻译为中文如下所示:
140522 15:11:10 [警告] 因为使用的格式是 BINLOG_FORMAT = STATEMENT, 所以写入到二进制日志中的语句可能是不安全的.语句不安全是因为使用了一个系统函数,在 slave从服务器上执行可能会生成不一致的数值.语句如下: insert into t_user(userId,userName) values(uuid(),'FunYoung')
看样子是说,因为slave的 UUID() 函数产生的值可能和Master的不一致,所以使用 BINLOG_FORMAT = STATEMENT这种日志格式是不安全的。

在网上找了一些资料,显示 5.0 版本是绝对有问题的,怎么办呢? 要么修改实现,比如在应用层生成 UUID,要么就采用基于行,而不是基于语句的二进制日志格式。

据说 5.0 以后是不一定的,翻看了一些官方文档,好像 5.6 版本修正了这个问题。 参考链接: 22 Changes in MySQL 5.6.0

还有个是09年的文档,说是当时有这个问题: https://drupal.org/node/502622

我们使用的是MariaDB5.5,应该是兼容 MySQL5.5吧,经排查这个问题系统已经自己解决了。

MariaDB [(none)]> select version();+--------------------+| version()|+--------------------+| 5.5.34-MariaDB-log |+--------------------+1 row in set (0.00 sec)
如果你遇到这个问题,假如还可以升级数据库系统,那就升级到最新版那就没事了。 

如果不能升级DMBS,那么就需要在应用层,或者采用基于行的复制方式了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn