首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入的MySQL Percona集群WSREP

插入的MySQL Percona集群WSREP
EN

Stack Overflow用户
提问于 2021-04-05 10:34:43
回答 1查看 138关注 0票数 0

我对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)

表格(稍微简化一点):

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-25 16:29:48

(但其他用户和身份创建可能发生在其他节点上)

这很可能是你的问题。写入应该转到单个节点。不要负载平衡你的写作。问题是您向node1发送了一封信,向node2发送了另一封信。tx1将在tx2之前执行,并在tx2执行之前更改数据库的“视图”,这将导致所看到的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66951651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档