版本
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行不行,感興趣的可以自行嘗試下