Mysql如果複製比 master 晚 600 秒,INSERT 或 UPDATE 查詢包括
如果複製比 master 晚 600 秒,INSERT 或 UPDATE 查詢包括 NOW()
會相差 600 秒嗎?
如果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 ...