我对WSREP错误有一个问题,我不明白。如果有人能解释一下发生了什么以及如何解决问题,我会很高兴的。
我的应用程序有一个账户创建端点。在端点中,有几个对DB的请求,检查帐户是否已经存在,并在必要时创建一个新帐户。新的“帐户”有两个部分-用户和身份。在事务中没有创建用户和相应的标识,但两个DB请求都应用于集群的一个和同一个节点(但其他用户和标识创建可能发生在其他节点上)。
由于某些原因,有时我在身份创建(insert)上会出现WSREP (检测到死锁/冲突)错误。我确信对于相同的数据没有任何冲突的insert请求,因为之后我在DB中没有标识。为什么会发生这种事?会不会是一些索引/外键问题?
我在这里完全不知所措。任何帮助都是非常感谢的!
配置:mysqld Ver 5.7.23-23-57 for Linux on x86_64 (Percona XtraDB Cluster (GPL), Release rel23, Revision f5578f0, WSREP version 31.31, wsrep_31.31)
表格(稍微简化一点):
create table users
(
id bigint auto_increment
primary key,
profile json null,
is_active tinyint(1) default 1 null,
is_email_confirmed tinyint(1) default 0 null,
is_phone_confirmed tinyint(1) default 0 null,
created_at datetime default CURRENT_TIMESTAMP null,
modified_at datetime null,
email varchar(200) null,
);
create index ix_users_email
on users (email);
create index ix_users_phone_number
on users (phone_number);
create table identities
(
id bigint auto_increment
primary key,
user_id bigint null,
provider_id bigint null,
email varchar(200) null,
password varchar(200) null,
first_name varchar(200) null,
last_name varchar(200) null,
last_login datetime(6) null,
created_at datetime(6) default CURRENT_TIMESTAMP(6) null,
modified_at datetime(6) default CURRENT_TIMESTAMP(6) null,
is_deleted tinyint(1) default 0 null,
constraint identities_ibfk_1
foreign key (user_id) references users (id),
);
create index provider_id
on identities (provider_id);
create index user_id
on identities (user_id);发布于 2022-05-25 16:29:48
(但其他用户和身份创建可能发生在其他节点上)
这很可能是你的问题。写入应该转到单个节点。不要负载平衡你的写作。问题是您向node1发送了一封信,向node2发送了另一封信。tx1将在tx2之前执行,并在tx2执行之前更改数据库的“视图”,这将导致所看到的错误。
https://stackoverflow.com/questions/66951651
复制相似问题