Mysql

如果複製比 master 晚 600 秒,INSERT 或 UPDATE 查詢包括 NOW() 會相差 600 秒嗎?

  • April 21, 2016

如果slave比master落後600秒,包括在內的查詢NOW()也會有600秒的不同嗎?

例子:

master|mysql> INSERT INTO my_table (hash,my_time) VALUES ('foo',NOW());
### 600s later, does slave get the same query?
slave|mysql> INSERT INTO my_table (hash,my_time) VALUES ('foo',NOW());

如果在 master 和 slave 上執行,以下會產生完全相同的結果嗎?

master|mysql> SELECT my_time FROM my_table WHERE hash = 'foo'; #2016-04-21 09:49:42
slave|mysql> SELECT my_time FROM my_table WHERE hash = 'foo'; #????-??-?? ??:??:??

假設SHOW SLAVE STATUS\G顯示Seconds_Behind_Master: 600,master 和 slave 位於同一個數據中心(相同時區),並且在完成上述操作之前,slave 不會趕上 master。

如果兩者相差 600s,那麼最好的做法是NOW()什麼?

tl;博士

set timestamp二進制日誌在每個事務之前都包含一個命令,以防止這種情況發生。這只會影響 SQL 執行緒的會話範圍,因此執行查詢同時不會報告過去 600 秒的日期。

要查看,您可以執行:

$ sudo mysqlbinlog --base64-output=DECODE-ROWS binlog.XXXXX |head -30

#150613  9:06:38 server id 1  end_log_pos 478584 CRC32 0xd86fcd7b   Query   thread_id=88627 exec_time=0 error_code=0
SET TIMESTAMP=1434179198/*!*/;
BEGIN
...

引用自:https://dba.stackexchange.com/questions/136092