首先,我不是在寻找修复可怕的tablespace exists InnoDB错误发现here的方法,而是在寻找一种防止它的方法!在过去的几周里,我们随机地从数据库中删除了一个表,没有办法重新创建它(因为它给出了一个表空间存在错误)。我们把范围缩小到下表:
CREATE TABLE product_localised (
id INT (10) UNSIGNED NOT NULL AUTO_INCREMENT,
product_id INT (10) UNSIGNED NOT NULL,
language_id INT (10) UNSIGNED NOT NULL,
slug VARCHAR (255) COLLATE utf8_unicode_ci NOT NULL,
title TEXT COLLATE utf8_unicode_ci,
description TEXT COLLATE utf8_unicode_ci,
description_short TEXT COLLATE utf8_unicode_ci,
custom_startselect_content TEXT COLLATE utf8_unicode_ci,
created_at TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
updated_at TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
deleted_at TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY product_localised_product_id_language_id_unique (`product_id`, `language_id`),
KEY product_localised_language_id_foreign (`language_id`),
CONSTRAINT product_localised_language_id_foreign FOREIGN KEY (`language_id`) REFERENCES languages (`id`),
CONSTRAINT product_localised_product_id_foreign FOREIGN KEY (`product_id`) REFERENCES products (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 46727 DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;问题是:有人能看看桌子的结构和钥匙,看看它是否有什么问题吗?!
我们在亚马逊的RDS上托管我们的数据库,并尝试了MySQL 5.5和5.6,启用了innodb_file_per_table。
我们还在UbuntuServer14.04LTS上试用了MySQL 5.5,在MySQL上使用xampp测试了MySQL 5.6。
对以下问题的答复:
考虑移除id并使用(product_id,language_id)作为PK。当然,您不需要20亿种语言,所以请考虑将language_id缩小为SMALLINT而不带符号:
发布于 2016-03-27 22:09:19
根据这个
Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT
这可能有多种原因。
1)要么您的查询正在超时
2)要么有人通过运行set foreign_key_checks=0删除了外键检查
发布于 2016-03-29 22:48:07
看看这些措施是否适用于:
- 2015-08-03 5.7.8 --固定的虫子
失败的ALTER ( http://dev.mysql.com/doc/refman/5.7/en/alter-table.html )表空间操作(丢弃tablespace或导入TABLESPACE )可能产生不正确的内部表空间状态,导致后续语句失败。(Bug #76424,Bug #20748660)
- 2015-03-09 5.7.6里程碑16 -- Bugs固定-- InnoDB
删除了fil_space_t::tablespace_version字段,用于跟踪ALTER ( http://dev.mysql.com/doc/refman/5.7/en/alter-table.html )和ALTER ( http://dev.mysql.com/doc/refman/5.7/en/alter-table.html )操作。tablespace_version字段确保在导入具有相同space_id的表空间时,旧缓冲条目不会发生更改缓冲区合并。外地是多余的,不再需要。(Bug #19710564)
在使用ALTER丢弃其表空间后对表进行操作.丢弃TABLESPACE ( http://dev.mysql.com/doc/refman/5.7/en/alter-table.html )会导致严重的错误。(Bug #17700280)
-2012年-12-11 5.6.9 -固定的虫子- InnoDB
当使用丢弃的TABLESPACE或导入TABLESPACE子句执行ALTER ( http://dev.mysql.com/doc/refman/5.6/en/alter-table.html )语句时,由于文件系统中保留一个临时表空间文件,Windows系统上可能会出现超时错误。(Bug #14776799)
-2012年-12-11 5.6.9 - Bugs固定
在发出ALTER之后..。丢弃TABLESPACE,同一表的联机DDL操作可能会在Windows系统上发生错误:从存储引擎获得错误11。带有http://dev.mysql.com/doc/refman/5.6/en/alter-table.html子句的ALTER ( ALGORITHM=INPLACE )语句还可以创建一个空的.ibd文件( file ),使表空间不再“丢弃”。(Bug #14735917)
http://forums.mysql.com/read.php?22,633145 (表不存在)
http://forums.mysql.com/read.php?20,615512 (MySQL/innodb数据库故障)
http://forums.mysql.com/read.php?22,603093 (数据库不断崩溃-断言失败?)
http://forums.mysql.com/read.php?22,601100 (丢弃TABLESPACE所需的帮助)
http://forums.mysql.com/read.php?10,591035 (在某些表的.ibd文件被删除后,该怎么办?)
http://forums.mysql.com/read.php?22,444342 (数据库崩溃和进程过载)
http://forums.mysql.com/read.php?22,355932 (InnoDB找不到指定的“路径”)
http://forums.mysql.com/read.php?22,290138 (删除数据库后,表“已经存在”)
http://forums.mysql.com/read.php?22,270607 (*.frm文件和减少ibdata文件)
https://stackoverflow.com/questions/36085768
复制相似问题