程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL主從復制中UUID的警告信息

關於MySQL主從復制中UUID的警告信息

編輯:MySQL綜合教程

日期: 2014年5月23日

博客: 鐵錨

最近在查看MariaDB主從復制服務器 Master 的錯誤日志時看到很多條警告信息,都是提示 UUID()函數不安全,可能 Slave 產生的值和 Master不一致, 警告信息大致如下:

140522 15:11:10 [Warning] 
Unsafe statement written to the binary log
using 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

還有一個更詳細的文章: Beware of MySQL 5.6 server UUID when cloning slaves

我們使用的是MariaDB5.5,應該是兼容 MySQL5.5吧,經排查這個問題系統已經自己解決了。

MariaDB [(none)]> select version();
+--------------------+
| version()          |
+--------------------+
| 5.5.34-MariaDB-log |
+--------------------+
1 row in set (0.00 sec)
如果你遇到這個問題,假如還可以升級數據庫系統,那就升級到最新版那就沒事了。

如果不能升級DMBS,那麼就需要在應用層,或者采用 基於行的復制方式 了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved