我已经得到了如图所示的复制配置。一切都会复制到任何地方。其中一张表维护会话数据,其中包含由于过期而必须删除的行。我创建了一个事件,每天检查一次过期会话并删除它们:
DELETE FROM session
WHERE expiration < (UNIX_TIMESTAMP() - 7200);
我的问题是:
- 这是否会导致每个数据库(几乎)同时执行事件并同时尝试复制更新的不稳定情况?
- 如果是这样,是否可以使用 SQL 或其他方式将事件限制为单个数据库实例?
- 活动是完成这项工作的合适工具吗?
请注意,站点 A 和站点 B 在物理上是分开的(美国东海岸和西海岸),因此存在网络延迟。
编辑:这是 MySQL 8.0.36
副本集中的每个 MySQL 实例必须具有唯一的
server_id
(请阅读https://dev.mysql.com/doc/refman/8.0/en/replication-options.html#sysvar_server_id)。上面的数字
1234567
只是一个例子。您可以将其替换为server_id
您的 MySQL 实例之一上使用的。这将使所有行的语句条件
DELETE
为假,除非该事件正在与server_id
.您可能希望通过将值存储在表中并编码事件来使其由数据驱动,
server_id
以便它从该表中读取值。DELETE
然后,您可以通过更新表中的值轻松切换运行该实例的实例。server_id
您还可以通过将该值设置为与任何副本集都不匹配的数字来暂时禁用删除。