【真实经验分享】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;
相关推荐
忡黑梨5 分钟前
PostgreSQL 小版本升级实战:14.23 升级到 14.24(源码编译方式)
数据库·postgresql
LMT流氓兔13 分钟前
第五单元——第11课:自动测试“拒绝后绝不能写入”
数据库·人工智能·python·langchain
小朱爱编程12328 分钟前
AI点了两次发布,我多了两篇事故
数据库·人工智能·大模型·软件工程
时间售卖铺1 小时前
MySQL DML 与 DQL 语句详解
运维·数据库·mysql·云原生
codeejun1 小时前
每日一Go·MySQL-9、索引存储结构|页分裂、页合并、索引高度与磁盘
数据库·mysql
Pniubi1 小时前
事务(Spring&MySQL)
数据库·sql·spring
bksczm2 小时前
Shardingsphere安装
mysql·shardingsphere
DBA_G2 小时前
GBase 8a MPP集群个人电脑安装环境浅析
数据库
小林ixn2 小时前
别再 MySQL + Milvus 双写了:PostgreSQL + pgvector 一张表搞定 AI 长期记忆
数据库·postgresql·agent
深盾科技_Virbox2 小时前
换机或重装后软件许可怎么恢复:先核对哪四项
java·服务器·数据库