2010-05-18 55 views
3

可以將MySQL從實例有當binlog_format設置爲語句相同ID的不同行的價值觀和我們插入類似:binlog_format =語句和CURRENT_TIMESTAMP與MySQL複製

insert into foo values(CURRENT_TIMESTAMP) 

據我瞭解,從讀取SQL語句並執行它,如果複製滯後,可能導致同一行出現差異。對還是錯 ?

我該如何避免這種情況?

謝謝。

回答

5

您的方法在語句級複製中非常安全。 TIMESTAMP寫入二進制日誌,因此即使從站在後面,CURRENT_TIMESTAMP的值也將在主站和從站之間保持一致。出於同樣的原因,您還可以安全地使用NOW()功能。

要避免的功能是SYSDATE(),它不會使用二進制日誌中的TIMESTAMP,因此從屬的值將表示語句何時在從屬服務器上運行,而不是當語句在主服務器上運行時。

+0

好的。得到它了。當使用基於STATEMENT的複製時,所有非確定性函數(無論我們命名函數)都很糟糕。如果我讀得對,我們應該選擇MIXED或完整的ROW複製。前者有我的偏好,但它可以結合兩個世界的優點。謝謝 ! – 2010-05-19 21:48:53

+0

在某些情況下,有些方法可以使非確定性函數適用於語句級複製。我使用MySQL 5.0,因此語句級複製是我唯一的選擇。如果我想從非確定性函數中插入一個值,我只是先將它分配給一個局部變量,並且它被正確地複製。例如,不是'insert into test.uuids values(uuid());''我'set @uuid = uuid();插入test.uuids值(@uuid);'在主DB和從DB上獲得相同的值。 – 2010-05-20 14:54:40