MySQL 5.6执行DDL报错ERROR 1050 (42S01): Table 'sms/#sql-ib752' already exist

执行ALTER TABLE增加字段的时候报错:


mysql> ALTER TABLE who_sku_relation ADD COLUMN red_line_price DECIMAL(10,2) NOT NULL DEFAULT '0.00';
ERROR 1050 (42S01): Table 'sms/#sql-ib75227' already exists


报错原因:

在alter table的过程中,MySQL宕机,会在数据目录里存在数据变更的中间表,中间表是以“#sql-”开头的临时表。

临时表不手动删除掉,无法在相应的表上执行 ALTER TABLE 语句。


在数据目录里面查看临时表的信息,找不到 .frm表结构文件和 .ibd数据文件。


$ ls -l | grep  '#sql-ib75227*' | wc -l


解决方法:

手动创建 .frm表结构文件和 .ibd数据文件,之后删除临时表。


创建一张测试表。


mysql> use test
mysql> create table test.tmp like sms.who_sku_relation;
Query OK, 0 rows affected (0.00 sec)


将测试表的 .frm 表结构文件拷贝成临时表的 .frm 表结构文件和 .ibd 数据文件。


$ cp ../test/tmp.frm  "#sql-ib75227.frm"
$ cp ../test/tmp.frm  "#sql-ib75227.ibd"
$ ls -l \#sql-ib75227*
-rw-r----- 1 tungsten mysql 15007 Sep 29 21:23 #sql-ib75227.frm
-rw-r----- 1 tungsten mysql 15007 Sep 29 21:25 #sql-ib75227.ibd


在数据库中 DROP 临时表,并在原来增加表结构出错的表上执行结构变更。


mysql> drop table `#mysql50##sql-ib75227`;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE who_sku_relation ADD COLUMN red_line_price DECIMAL(10,2) NOT NULL DEFAULT '0.00';
ERROR 1813 (HY000): Tablespace for table 'sms/#sql-ib75227' exists. Please DISCARD the tablespace before IMPORT.


删除掉数据文件中残留的临时表数据文件。


$ ls -l \#sql-ib75227*
-rw-r----- 1 tungsten mysql 15007 Sep 29 21:25 #sql-ib75227.ibd
$ rm "#sql-ib75227.ibd"


执行数据库表结构变更


mysql> ALTER TABLE who_sku_relation ADD COLUMN red_line_price DECIMAL(10,2) NOT NULL DEFAULT '0.00';
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-2215370/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26506993/viewspace-2215370/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值