首页 > 解决方案 > 无法在 Mariadb Galera 集群上添加或更新子行错误

问题描述

当我在我的网络服务器上运行性能测试时,大约 2% 的请求返回此错误:

Cannot add or update a child row: a foreign key constraint fails.

这是我的设置的简要说明

Web 服务器(centos 7 上的 .net core 2)-> Ha 代理(循环模式)-> 在多主集群中设置 3 个 MariaDb 服务器

网络服务器代码的简化版本是:

  1. 接收来自客户端的请求
  2. 在表 A 中插入一行
  3. 用表 A 的外键在表 B 中插入一行。

注意:由于我使用 .net Core(带有 EF),因此与数据库的连接在每次插入之间打开和关闭。

是否有可能在第二个查询被触发之前数据没有传播到每个节点?当我将 haproxy 切换到源模式(来自同一主机的所有连接将转到同一数据库服务器)时,我不再收到此错误。但是我没有得到拥有多主集群的好处。

我怎样才能避免这个问题?

谢谢您的帮助

标签: mariadbhaproxyef-core-2.0galera

解决方案


这闻起来像是关键读取问题的变体。这可能会解决它:

SET SESSION wsrep_sync_wait = 7;
do your statements
SET SESSION wsrep_sync_wait = 0;

推荐阅读