什么是以及如何从我的数据库中删除表空间错误?

时间:2013-04-15 06:20:12

标签: mysql mysql-workbench

由于loadhading问题,我数据库中的一个表被破坏了。 我放弃了桌子,现在我想再次创建桌子。

我收到错误

  

ERROR 1813:表'zorkifsys_user_accounts'的表空间存在。请在IMPORT之前删除表空间。

SQL声明:

CREATE  TABLE `zorkif`.`sys_user_accounts` (
    `UserID` INT NOT NULL AUTO_INCREMENT ,    
    PRIMARY KEY (`UserID`) ,    
    UNIQUE INDEX `UserID_UNIQUE` (`UserID` ASC)
)

什么是表空间以及如何丢弃此表空间? 我必须在查询中运行任何命令吗? 如何处理这个问题?

13 个答案:

答案 0 :(得分:7)

这对我有用,但我在本地服务器中使用它。

打开安装xampp的目录,例如

C:/xampp/mysql/data/...

选择要删除的表空间的文件夹(类似于数据库名称),然后删除扩展名为idb的文件。仅删除与要创建/删除的表对应的一个文件。

在我的情况下,我的文件是karyawan.idb

希望这适合你。

答案 1 :(得分:2)

重复Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT

<WAMP or XAMPP path >\bin\mysql\mysqlX.X.XX\data\<your database name>

删除整个数据库文件夹&amp;重启apache。

再次创建您的数据库&amp;导入数据库。

有效。

答案 2 :(得分:2)

我花了很长时间才在我的一个生产dbs上解决这个问题。以下步骤实际上非常干净地解决了这个问题:

-> deactivate your app/page - any requests to your db (if you dont have a service mode in your app - build one :P)
-> mysqldump your db (optionally with --routines=true);
-> kill the folder with db name
-> create schema db name;
-> drop schema db name;
-> restart mysql (service mysql restart - or similar depending on your os)
-> create schema db name;
-> mysql import your previously created dump;

答案 3 :(得分:1)

步骤1:将mysql / database / *。ibd备份到另一个文件夹

步骤2:删除所有mysql ib_logfile *

第3步:重启mysql服务

第4步:从shell登录mysql

第5步:运行:

- use database;
- ALTER TABLE table_name DISCARD TABLESPACE; 

(对表空间有问题的所有表重复)

步骤6:将* .ibd从备份文件夹复制到mysql / database /文件夹

步骤7:使用运行查询重复步骤3,4:

- use database;
- ALTER TABLE table_name IMPORT TABLESPACE; 

答案 4 :(得分:1)

例如,打开安装MAMP的目录

Macintosh⁩▸⁨应用程序⁩▸⁨MAMP⁩▸⁨db⁩▸... 选择要删除的表空间的文件夹(类似于数据库名称),然后删除扩展名为idb的文件。仅删除与您要创建/删除的表相对应的一个文件。

例如文件: ⁨Macintosh⁩▸⁨应用程序⁩▸⁨MAMP⁩▸⁨db⁩▸⁨mysql57⁩▸⁨example_db▸amc_customer.ibd

尝试一下。 对我来说有用。

答案 5 :(得分:0)

在创建此表之前,请运行此查询以删除TABLESPACE

DROP TABLESPACE `zorkif`.`sys_user_accounts`

TABLESPACE can contain one or more data files, providing storage space for tables.

答案 6 :(得分:0)

解决方案

但是,更简单的选择是:重启mysql,然后执行帖子开头附近列出的相同的四个步骤。这样,数据字典上的表空间id和文件匹配;因此导入表空间成功。

这可以让你更有信心在恢复过程中处理一些InnoDB“陷阱”甚至是文件传输。

答案 7 :(得分:0)

尝试删除表空间可能会给您带来其他错误。对我来说,我收到以下错误:

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

我的解决方案是删除数据库。这将删除与其相关的所有表空间,并允许您再次创建表。

答案 8 :(得分:0)

解决此问题的步骤:

  1. 将您的架构导出到备份文件
  2. drop schema
  3. 修改导出的SQL脚本,添加所需的“创建表”
  4. 创建相同的架构
  5. 从备份文件导入架构

答案 9 :(得分:0)

如果您在本地主机上遇到此错误,请转到 xamp文件夹,移动到mysql文件夹,移动到数据文件夹,在数据文件夹里面你会看到基于数据库名称的数据库列表,选择给你错误的数据库文件夹,给出的特定表名你错了并重新导入你的数据库。

现在就在我的系统上解决这个问题

答案 10 :(得分:0)

如果您使用的是Mac,请转至Applications-> XAMPP-> xamppfiles-> var-mysql查找数据库名称。您可能必须授予“所有人”的“读写”访问权限。之后,删除相关的.idb文件。重新启动XAMPP,您应该一切顺利。

答案 11 :(得分:0)

以下内容适用于MariaDB 10.3.12:

  • 在另一个数据库中创建另一个具有相同名称的表
  • sudo cp -p otherdb / tablename.frm问题数据库/tablename.frm
  • 删除表问题db.tablename

一切都应该正常工作,并且在此之后要保持清洁。

答案 12 :(得分:0)

就我而言,即使我在导入之前删除了表,也无法丢弃TABLESPACE,因为mysql表示不存在TABLESPACE,如果是这种情况,那是因为该表的索引仍然存在,因此您需要删除那些索引

$builder->add('houseNumber', TextType::class, [
    'label' => 'Huisnummer',
    'attr' => [
        'maxlength' => 8,
    ],
    'constraints' => [
        new NotBlank([
            'groups' => $options['constraint_groups']
        ]),
        new Regex([
            'pattern' => '/^[0-9]+$/',
            'message' => 'Vul alleen het huisnummer in cijfers in.'
        ]),
        new Length([
            'groups' => $options['constraint_groups'],
            'max' => 8
        ])
    ]
])->add('poBox', TextType::class, [
    'label' => 'Postbus',
    'attr' => [
        'maxlength' => 10,
    ],
    'constraints' => [
        new Length([
            'groups' => $options['constraint_groups'],
            'max' => 10
        ])
    ]
]);

此后,不再发生“丢弃表空间”错误,我可以成功导入表