我运行生产数据库的每日备份mysqldump备份(mysql版本5.1.66):
mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file
Run Code Online (Sandbox Code Playgroud)
我也在我的开发机器上每天恢复该数据库(mysql版本5.6.12)
mysql --user=username --password=secret databasename < file
Run Code Online (Sandbox Code Playgroud)
我收到错误:第25行的ERROR 1813(HY000):表格的表空间databasename
.tablename
'存在.请在IMPORT之前丢弃表空间.
我的阅读表明这是因为mysql innodb数据库需要命令:
ALTER TABLE tbl_name DISCARD TABLESPACE;
Run Code Online (Sandbox Code Playgroud)
在删除表之前运行 - 似乎删除表不足以摆脱其索引.(我的开发服务器使用innodb_file_per_table选项)
我不想使用'replace'选项,因为我可能在我的开发数据库中有数据已在生产数据库中删除.
在错误之后,表格不可读,但重新启动mysqld会修复它.
所以问题是,是否有任何mysql转储选项可以帮助解决这个问题,还是有另一种方法来导入数据,以防止错误?
提前感谢阅读.
Dav*_*ave 39
听起来你有一个tablename.ibd但没有tablename.frm.
去检查:
cd /var/lib/mysql/database_name
搜索提供错误的表名.
ls tablename.*
你应该看到两个文件:
tablename.ibd tablename.frm
但我猜你不会,只能看到
tablename.ibd
要修复你有几个选择:
--add-drop-database
也:
小智 9
我发现跳过此问题的最简单方法是手动编辑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 ;
Run Code Online (Sandbox Code Playgroud)