gpt4 book ai didi

mysql - 在 Mysql/Mariadb 中删除 --temporary-- 索引

转载 作者:行者123 更新时间:2023-12-04 15:25:13 25 4
gpt4 key购买 nike

我正在尝试恢复半损坏的 InnoDB 表。我在尝试向表中添加新索引时注意到了这个问题。

ALTER TABLE `<table>` ADD INDEX `<name>`
ERROR 1712 (HY000): Index "TEST008"--temporary-- is corrupted

check table <table> EXTENDED没有接受这个问题。

+---------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+-------+----------+----------+
| <table> | check | status | OK |
+---------------+-------+----------+----------+

我尝试使用删除损坏的索引ALTER TABLE 表 DROP INDEX "TEST008"--temporary--\但它最终以

ERROR 1091 (42000): Can't DROP '"TEST008"--temporary--'; check that column/key exists

我是否被迫使用例如 OPTIMIZE 重新创建表格? ?

最佳答案

您应该检查CHECK TABLE下不会显示的索引状态。

为此,请尝试以下操作

SHOW VARIABLES LIKE 'userstat';
SET GLOBAL USERSTAT = ON;
-- just to get all columns used from the stats table
-- SHOW COLUMNS FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS`

-- get all indices just in case
SELECT * FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS`;

-- get all indices for the table
SELECT * FROM `INFORMATION_SCHEMA`.`INDEX_STATISTICS` WHERE `TABLE_NAME` = 'yourTable';

这将清除索引中的内容和不在表中的内容。

另一件事是,当您添加/删除索引时,最好使用像 \TEST008`` 这样的标记,而不是 "TEST008"。如果这都不起作用...克隆/复制表内容,删除它并重新创建它。

CREATE TEMPORARY TABLE `backupTable`
SELECT * FROM `yourTable`;

有关更多信息,请阅读 Create Temporary table

确保这会发生,因为此内存表可能会因索引大小而失败。如果发生这种情况,您应该增加或更改正在使用的 HASH 索引算法。

如果一切按预期工作添加下一条语句中的临时表行

Note: make sure to add all those missing fields

DROP TABLE IF EXISTS `yourTable`;
CREATE TABLE `yourTable`(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
-- other columns
PRIMARY KEY(`id`)
) Engine=InnoDB; -- or extend this with collation, and other instructions

INSERT INTO `yourTable`
SELECT * FROM `backup`;

这应该可以解决问题。

最后一种解决方案是从文件系统中硬删除 InnoDB 表,但我怀疑是这种情况。

关于mysql - 在 Mysql/Mariadb 中删除 --temporary-- 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62402675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com