【真实经验分享】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;
相关推荐
Jim6003 小时前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL9 小时前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_11 小时前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_3 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横3 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二3 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐4 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle