【BUG反馈】Mysql租户下,如果表含有唯一索引,执行ALTER TABLE `TableName` MODIFY COLUMN `Id` int(10) NOT NULL AUTO_INCREMENT 触发4016 - Internal error

【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】OceanBase_CE 4.3.0.1
【问题描述】Mysql租户下,如果表含有唯一索引,执行ALTER TABLE TableName MODIFY COLUMN Id int(10) NOT NULL AUTO_INCREMENT 触发4016 - Internal error

提供一下:
1、show create table xxx \G

2、rs 节点:select svr_ip from dba_ob_servers where with_rootserver=‘yes’;

rootservice.log 日志附件

CREATE TABLE ttt (
Id int(10) NOT NULL AUTO_INCREMENT,
AK varchar(255) DEFAULT NULL,
PRIMARY KEY (Id),
UNIQUE KEY AK (AK) BLOCK_SIZE 16384 LOCAL
) AUTO_INCREMENT = 1 AUTO_INCREMENT_MODE = ‘ORDER’ DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
2.
127.0.0.1
3.
rootservice.log 日志太大,怎么提取您想要的内容,有没有关键词

已提供内容

感谢反馈,在ob4.3.1上也能复现出来。

  • 原表结构
    Id int(10) NOT NULL AUTO_INCREMENT

  • ddl 这个变更和原表结构没有任何变化,确认是执行这个sql吗,这样执行的目的是?
    ALTER TABLE ttt MODIFY COLUMN Id int(10) NOT NULL AUTO_INCREMENT;

因为我们系统是基于NetCore开发的,又因为OB官方没有提供EfCore的驱动,使用的是MySQL的Pomelo.EntityFrameworkCore.MySql.dll驱动,这个驱动的版本升级后自动会产生这个SQL,其实业务上没啥用,但是我们绕不过去。

如果没有唯一索引,这个语句随便重复执行是没问题的,就是一旦有同一张表的其他列含有唯一索引,这个语句必失败。

按照上面的描述在ob4.3.0.1上测试没有复现呢

CREATE TABLE t6 (
c1 int,
c2 int,
c3 int,
UNIQUE KEY idx_t6_c2 (c2)
) ;

ALTER TABLE t6 MODIFY COLUMN c1 int(10) NOT NULL AUTO_INCREMENT;

你把c1设为主键,在执行alter就会重现这个错误

将c1 设置为主键,在ob4301上仍然没有复现。

请把复现完整的执行报错语句和rs节点 rootservice.log 压缩后发一下

rootservice.zip (48.8 KB)
CREATE TABLE ttt2 (
Id int(10) NOT NULL AUTO_INCREMENT,
AK varchar(255) DEFAULT NULL,
PRIMARY KEY (Id ),
UNIQUE KEY AK (AK ) BLOCK_SIZE 16384 LOCAL
) AUTO_INCREMENT = 1 AUTO_INCREMENT_MODE = ‘ORDER’ DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0;

ALTER TABLE ttt2 MODIFY COLUMN Id int(10) NOT NULL AUTO_INCREMENT;

执行结果
4016 - Internal error

上面贴的这个sql昨天已经回复过了,在ob431也能复现,只是这里给出的sql 执行ddl前后 的属性是一样的。

能否提供一个其他可复现的sql文本呢?

没了,我们这样的表有好几百个,都是一样的模式一样的问题。

那这种能复现的问题修复大概要多久呢,我们这边好几十家客户都得给他们做备用方案

稍等,还在确认。