26

I run a daily backup mysqldump backup of the production database (mysql version 5.1.66):

mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file

I also do a daily restore of that database on my development machine (mysql version 5.6.12)

mysql --user=username --password=secret databasename < file

I get the error: ERROR 1813 (HY000) at line 25: Tablespace for table 'databasename.tablename' exists. Please DISCARD the tablespace before IMPORT.

My reading indicates this is because the mysql innodb database requires the command:

 ALTER TABLE tbl_name DISCARD TABLESPACE;

to be run before the table is dropped -- it seems that dropping the table isn't sufficient to get rid of its indexes. (my development server uses the innodb_file_per_table option)

I don't want to use 'replace' option because i could potentially have data in my development database that was deleted on the production database.

btw after the error the tables are not readable, but restarting mysqld fixes it.

So the question is, is there any mysql dump option that will help fix this issue, or is there another way to import the data that will prevent the error?

thanks in advance for reading.

4

4 回答 4

43

听起来你有一个 tablename.ibd 但没有 tablename.frm。

去检查:

  1. cd 到您的 mysql 数据目录,然后是数据库名称。
    cd /var/lib/mysql/database_name
  2. 搜索给出错误的表名。

    ls 表名。*

    您应该看到两个文件:

    表名.ibd
    表名.frm
    

    但我猜你没有看到

    表名.ibd

要解决此问题,您有几个选择:

  1. 将以下内容添加到 mysqldump,这将导致数据库被删除,清理数据目录,然后再恢复。
    --add-drop-database
  2. 将 tablename.frm 从 prod 复制到 dev,然后发出 delete table 语句。

还:

  • 当您转储到本地主机上的文件时,无需使用 net_buffer_length=5000。
  • 其他备份解决方案 - Percona Xtrabackup
于 2013-07-29T02:29:53.973 回答
12

我发现跳过此问题的最简单方法是手动编辑 phpmyadmin 数据库转储并将有问题的表编辑/更改为INNODB. 我将问题表更改为ENGINE=MyISAM瞧。导入工作。

CREATE TABLE IF NOT EXISTS `home3_acymailing_tag` (
    `tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(250) NOT NULL,
    `userid` int(10) unsigned DEFAULT NULL,
    PRIMARY KEY (`tagid`),
    KEY `useridindex` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
于 2016-12-16T14:07:48.243 回答
2

我在删除模式并再次创建它时也遇到了这个问题。我通过C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name删除之前创建数据库时留下的表来克服这个问题。如果您愿意,也可以删除整个数据库。

于 2014-12-15T10:12:07.583 回答
0

如果您使用的是 XAMPP,那么首先(“停止”) MySQL 然后转到 C:\xampp\mysql\data\dnb,在我的情况下,dnb 是我的数据库名称文件夹。所以然后打开它并删除 .ibd 文件因此你只能在你已经停止 MYsql 时删除它。然后去 phpmyadmin 1 点击 phpmyadmin 。2 单击出现在下面的数据库(在您的情况下,我将更改 server.127.0.0.1) 3 然后检查您要删除的数据库,然后单击删除。4 然后就可以创建同名数据库并成功导入数据库了。在这里你可以看到你如何从 phpmyadmin 中删除数据库

于 2016-01-20T23:15:12.587 回答