我对我不理解的 WSREP 错误有疑问。如果有人解释发生了什么以及如何解决它,我会很高兴。
我的应用程序有一个用于创建帐户的端点。在端点中,有几个请求 DB 检查帐户是否已经存在,并在必要时创建一个新帐户。新的“账户”有两部分——用户和身份。用户和相应身份的创建不会发生在事务中,但两个数据库请求都应用于集群的同一个节点(但其他用户和身份创建可能发生在其他节点上)。
出于某种原因,有时我会在身份创建(插入)时遇到 WSREP(检测到死锁/冲突)错误。我确信没有任何冲突的插入请求具有相同的数据,因为之后我在 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);