版本
mysql:8.0.23
复现步骤
1、删除表
DROP TABLE IF EXISTS `xxx_demo`;
2、新建表
CREATE TABLE `xxx_demo` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'demo表' ROW_FORMAT = Dynamic;
3、报错信息
1813 - Tablespace exists.
解决方案
删除mysql数据目录下的 .ibd 文件,重新使用DDL创建即可
1、查看mysql的数据目录下,是否存在对应的 .ibd 文件
ls | grep xxx_demo
2、停止mysql服务,删除对应.ibd文件,再重新启动
# 停止mysql
docker-compose stop# 备份 ibd 文件
cp xxx.demo.ibd xxx.demo.ibd.back# 删除对应的文 ibd 文件
rm -rf xxx.demo.ibd# 重新启动mysql
docker-compost start
3、重新执行DDL语句新建表即可
PS:没有试过不停mysql行不行,感兴趣的可以自行尝试下