无法在 Mariadb Galera 集群上添加或更新子行错误
Cannot add or update a child row error on Mariadb Galera cluster
当我 运行 在我的网络服务器上进行性能测试时,大约 2% 的请求 return 这个错误:
Cannot add or update a child row: a foreign key constraint fails.
这是我的设置的简要说明
web 服务器(centos 7 上的 .net core 2)-> Ha Proxy(roundrobin 模式)-> 在多主集群中设置 3 个 MariaDb 服务器
网络服务器代码的简化版本是:
- 收到客户请求
- 在tableA中插入一行
- 在 table B 中插入一行,外键指向 table A。
注意:由于我使用 .net Core(带有 EF),因此每次插入之间都会打开和关闭与数据库的连接。
是否有可能在触发第二个查询之前数据没有传播到每个节点?当我将 haproxy 切换到源模式时(来自同一主机的所有连接将转到同一数据库服务器)我不再收到此错误。但是我没有得到多主集群的好处。
如何避免这个问题?
感谢帮助
这听起来像是 critical read 问题的变体。这可能会解决它:
SET SESSION wsrep_sync_wait = 7;
do your statements
SET SESSION wsrep_sync_wait = 0;
当我 运行 在我的网络服务器上进行性能测试时,大约 2% 的请求 return 这个错误:
Cannot add or update a child row: a foreign key constraint fails.
这是我的设置的简要说明
web 服务器(centos 7 上的 .net core 2)-> Ha Proxy(roundrobin 模式)-> 在多主集群中设置 3 个 MariaDb 服务器
网络服务器代码的简化版本是:
- 收到客户请求
- 在tableA中插入一行
- 在 table B 中插入一行,外键指向 table A。
注意:由于我使用 .net Core(带有 EF),因此每次插入之间都会打开和关闭与数据库的连接。
是否有可能在触发第二个查询之前数据没有传播到每个节点?当我将 haproxy 切换到源模式时(来自同一主机的所有连接将转到同一数据库服务器)我不再收到此错误。但是我没有得到多主集群的好处。
如何避免这个问题?
感谢帮助
这听起来像是 critical read 问题的变体。这可能会解决它:
SET SESSION wsrep_sync_wait = 7;
do your statements
SET SESSION wsrep_sync_wait = 0;