【真实经验分享】MySQL两个线程同时对表新增字段,被异常取消,导致表结构崩溃

某客户同时发起两个线程对表新增字段,被异常取消,导致表结构崩溃

mysql> select count(*) from table_a;

ERROR 1146 (42S02): Table 'database1.table_a' doesn't exist

bash 复制代码
cd $data_dir/db_name/
ll table_a.*
table_a.frm ## 存表结构
table_a.ibd ## 存表数据
1.删除表元数据信息
bash 复制代码
## 备份并挪走 frm 与 ibd 文件

## 使用历史表结构 建一张 新表
create table table_a(id int);

## 若新表建不成功,则是由于旧表的元数据信息仍然保留在数据库里
## 尝试 rename 旧表 
alter table table_a rename to table_a_bak;
drop table table_a;

## 检查数据字典是否还存在该表信息
## 确认 InnoDB 字典里到底有没有这个表的 space ID
SELECT * FROM information_schema.innodb_sys_tables 
WHERE name LIKE 'database1/table_a%';

## 查看表空间文件状态
SELECT * FROM information_schema.innodb_sys_tablespaces 
WHERE name like  'database1/table_a%'
2.用正确的表结构新建表
bash 复制代码
create table table_a(id int);
3.将新表的tablespace下线
bash 复制代码
ALTER TABLE database1.table_a DISCARD TABLESPACE;
4.将旧表的 ibd 文件复制到 $data_dir/db_name/ 路径代替新表的数据,并正确赋权该文件
5.注册该表的数据
bash 复制代码
ALTER TABLE database1.table_a IMPORT TABLESPACE;

SELECT count(*) FROM database1.table_a;
相关推荐
小饼干在学嘎瓦1 小时前
秒杀场景Redis做预扣减,问题在哪里?
数据库·redis·mybatis
码不停蹄的玄黓1 小时前
生产可用的 Redis 分布式锁完整实现
数据库·redis·分布式
咸鱼翻身小阿橙1 小时前
文件读写 + Qt Model/View + 自定义分页+搜索过滤
java·数据库·qt
l1t1 小时前
DeepSeek总结的DuckDB-Iceberg 在 v1.5.3 中的新特性
数据库·duckdb
Database_Cool_1 小时前
数据仓库弹性扩缩容怎么实现?阿里云 AnalyticDB MySQL Serverless 弹性架构详解
数据库·人工智能·阿里云
abcy0712131 小时前
django聚合函数
数据库·sqlite
念越1 小时前
数据库系统概论第6版王珊版:第二章关系代数与第三章SQL期末重点整理
数据库·sql·性能优化
TDengine (老段)1 小时前
TDengine 数据保留与 TTL — 多级存储、过期删除与分层迁移
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
安当加密03011 小时前
等保2.0三级数据库加密:2026检查清单 + TDE部署实战(附脚本)
数据库·网络安全·数据安全·tde·等保2.0·数据库加密·tde透明加密