【问题标题】:MySQL ALTER TABLE deleted tableMySQL ALTER TABLE 删除表
【发布时间】:2014-07-31 04:21:15
【问题描述】:

我吓坏了。我在一家(非常愚蠢)不备份他们的 MySQL 数据库的公司工作。我必须更改表“项目”中的一列,以提高项目描述的最大字符数。我使用了以下命令:

ALTER TABLE items CHANGE description description varchar(5000) NOT NULL;

但是,在我输入这个命令后,我得到了这个错误:

Error on rename of './company/#sql-b30_400ad' to './company/items' (errno: 150 - Foreign key constraint is incorrectly formed)

现在,桌子完全没有了。有没有办法访问“#sql-b30_400ad”表来恢复它?我知道使用以下方法从该表中删除了一个键:

SET foreign_key_checks = 0;
ALTER TABLE items DROP KEY foreign_key_name;
SET foreign_key_checks = 1;

有什么方法可以撤销发生的事情,或者恢复为 ALTER 命令创建的临时项目表?

编辑:该表使用 InnoDB 引擎

再次编辑:所以我发现,由于我们使用 Amazon Web Service 作为我们的 MySQL 服务器,AWS 每天都会自动备份它,最后一次备份是在我出错前 15 分钟方便地进行。我的裤子现在是棕色和黄色的,但一切都很好,我感谢所有回答的人!

【问题讨论】:

  • 我试过SELECT * FROM #sql-b30_400ad,但它说该表不存在。
  • 对不起,一经删除,就没了。但是check out here。它可能会帮助你。
  • 我怀疑它一旦被删除就已经完成了
  • 如果您在那里工作并修改表,您不能说“他们的 MySQL 数据库”。它也是你的数据库。
  • bugs.mysql.com/bug.php?id=70260 - 但没有任何关于恢复的内容。

标签: php mysql sql database innodb


【解决方案1】:

您可以阅读有关该命令的文档:

check
repair

和工具

mysqlcheck
myisamchk
...

我的建议:但首先,如果数据非常重要,出于安全原因,您可能必须停止磁盘上的任何读/写过程,并且可能会停止磁盘。

将来:始终在进行任何修改之前进行自己的备份,即使对于这些修复/检查命令也是如此

mysqldump 
mysqlhotcopy 

【讨论】:

  • @user2178195 ,这有帮助吗?
  • 这些命令仅适用于 MyISAM 表。他们对 InnoDB 表什么都不做
【解决方案2】:

检查这个 http://www.thegeekstuff.com/2014/04/recover-innodb-mysql/

是生产数据库还是开发数据库,​​如果是开发我不担心,

【讨论】:

    【解决方案3】:

    查看unDROP tool for InnoDB。它允许直接从 InnoDB 表空间读取记录。

    #sql-b30_400ad 是具有新结构的文件。因此,使用 stream_parser 拆分它,然后使用 c_parser 提取记录。请参阅 https://twindb.com/undrop-tool-for-innodb/ ,您的案例与描述非常吻合。

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多