我遇到了最奇怪的错误.
有时,在创建或更改表时,我会收到"表已存在"错误.但是,DROP TABLE返回'#1051 - unknown table'.所以我得到了一张我无法创作的桌子,不能放弃.
当我尝试删除数据库时,mysqld崩溃了.有时,创建另一个具有不同名称的数据库会有所帮助,有时则不会.
我使用一个包含约50个表的数据库,所有数据都是InnoDB.不同的表发生此问题.
我在Windows,Fedora和Ubuntu,MySQL 5.1和5.5上体验过这一点.使用PDO,PHPMyAdmin或命令行时的行为相同.我使用MySQL Workbench来管理我的架构 - 我看到了一些相关的错误(背景和内容),但是没有一个与我相关.
不,这不是一个观点,它是一张桌子.所有名称都是小写的.
我尝试了所有我可以谷歌 - 冲洗表,将.frm文件从db移动到db,读取mysql日志,没有任何帮助,但重新安装整个该死的东西.
"显示表格"没有显示任何内容,"描述"表说"表格不存在",没有.frm文件,但"创建表格"仍然以错误结束("创建表格如果不存在"也是如此)删除数据库崩溃了mysql
相关但无益的问题:
编辑:
mysql> use askyou;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table users_has_friends (id int primary key);
ERROR 1050 (42S01): Table '`askyou`.`users_has_friends`' already exists
mysql> drop table users_has_friends;
ERROR 1051 (42S02): Unknown table 'users_has_friends'
Run Code Online (Sandbox Code Playgroud)
等等,都是一样的:表不存在,但不能创建;
mysql> drop database askyou;
ERROR 2013 (HY000): Lost connection to MySQL server during query
Run Code Online (Sandbox Code Playgroud)
名称发生变化,这不是我遇到问题的唯一表/数据库
sre*_*mer 19
当数据目录中缺少数据文件但表定义文件存在时,我已经看到了这个问题,反之亦然.如果您正在使用innodb_file_per_table,请检查数据目录以确保您有.frm相关表的文件和.ibd文件.如果是MYISAM,应该有一个.frm,.MYI和.MYD文件.
通常可以通过手动删除孤立文件来解决此问题.
ESG*_*ESG 14
在这里疯狂猜测,但似乎innodb在表空间中仍然有一个表的条目,可能在ibdata.如果您确实不需要任何数据,或者您有备份,请尝试以下操作:
小智 6
事实证明,修复很容易;至少我的工作对我有用。在另一个 MySQL 实例上创建一个表“zzz”,其中 zzz 是问题表名称。(即,如果该表被称为薛定谔,则无论写成什么,都将其替换为 zzz。)该表的定义是什么并不重要。这是一个临时的假人;将 zzz.frm 文件复制到服务器上表所在的数据库目录,确保文件所有权和权限在文件上仍然正确。在 MySQL 上,您现在可以执行“show tables;”,并且表 zzz 将在那里。mysql> 删除表 zzz; ...现在应该可以工作了。如有必要,清除目录中的所有 zzz.MYD 或 ZZZ.MYI 文件。
我怀疑这是否是对此处问题案例的直接答案,但以下是我如何在 OS X Lion 系统上解决这个确切的感知问题。
我经常为我安排的一些分析作业创建/删除表。在某些时候,我开始在脚本中途出现表已存在错误。服务器重新启动通常可以解决该问题,但这种解决方案太烦人了。
然后我在本地错误日志文件中注意到这一行:
[Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive
Run Code Online (Sandbox Code Playgroud)
这给了我一个想法,也许如果我的表包含大写字母,MySQL 就会被愚弄,认为即使我删除了它们,它们仍然存在。事实证明确实如此,并且改用仅小写字母作为表名使问题消失。
在我的例子中,这可能是一些配置错误的结果,但希望这个错误案例将帮助人们减少浪费时间来寻找解决方案。