AWS看起来好像是通过在主服务器上执行的副本上执行相同的命令来处理RDS MySQL复制。但是,由于产量较大,我们的复制品目前滞后约24小时。
复制过程如何处理如下命令:
create table x as select * from y where ts > curdate()
它需要做一些相当聪明的事情,或者由于curdate()
在执行时具有不同的值而在master和replica上创建的表会有所不同吗?
答案 0 :(得分:1)
嗯。在这里回答我自己的问题。
https://dev.mysql.com/doc/refman/5.7/en/replication-rbr-safe-unsafe.html上的MySQL手册可以这样说:
声明不安全。声明如下 特征被认为是不安全的:
包含可能返回不同的系统函数的语句 奴隶的价值。这些函数包括FOUND_ROWS(),GET_LOCK(), IS_FREE_LOCK(),IS_USED_LOCK(),LOAD_FILE(),MASTER_POS_WAIT(), PASSWORD(),RAND(),RELEASE_LOCK(),ROW_COUNT(),SESSION_USER(), SLEEP(),SYSDATE(),SYSTEM_USER(),USER(),UUID()和UUID_SHORT()。
非确定性功能不被视为不安全。虽然这些 功能不是确定性的,它们被视为安全的目的 记录和复制:CONNECTION_ID(),CURDATE(), CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP(),CURTIME(),, LAST_INSERT_ID(),LOCALTIME(),LOCALTIMESTAMP(),NOW(), UNIX_TIMESTAMP(),UTC_DATE(),UTC_TIME()和UTC_TIMESTAMP()。
然后它说
有关更多信息,请参见第16.4.1.15节“复制和系统” 功能”。
该链接部分没有具体解释为什么curdate()是安全的,但它确实解释了NOW()
是安全的,因为the binary log includes the timestamp. This means that the value as returned by the call to this function on the master is replicated to the slave
。据推测,其他与日期相关的命令的工作方式相同。对我来说足够好了。