【问题标题】:Google Cloud SQL Incorrect Key FileGoogle Cloud SQL 密钥文件不正确
【发布时间】:2015-05-20 01:18:58
【问题描述】:

我曾多次尝试在 Google Cloud SQL 上执行涉及 order by 语句的查询,结果查询失败并出现错误

Incorrect key file for table '/cloudsqltmp/#sql_44f4_1.MYI'; try to repair it

这听起来像是 /cloudsqltmp/ 分区被我的临时表填满了。然而,结果集并没有那么大,并且执行该查询的程序在其他几个场合都这样做过,所以我怀疑该空间实际上被其他人的临时表填满了。我可以通过多次重启实例来清除这一点(我假设它最终给了我一台新机器,或者空间被清理了),但这似乎很不雅。

  1. 如果再次发生这种情况,是否有更好的方法来处理?
  2. 有没有更好的方法来防止这种情况发生?
  3. 如果我对发生的事情的假设是错误的 - 实际发生了什么?

【问题讨论】:

    标签: mysql google-cloud-sql


    【解决方案1】:

    我建议做的是:

    创建一个 Google Compute Engine 实例并在其上运行 MySQL。这样如果你再次遇到这个问题,你可以使用下面的解决方案。

    1) 修改 /tmp 分区以获得更多空间。有一个非常有用的link here 说明如何操作。

    2) 创建一个 CronJob 来清除 /tmp。如果您对 CronJob 不满意,我发现了另一个名为 tmpreaper 的工具。要安装它,请运行sudo apt-get install tmpreaper。也使用 InnoDB 代替 MyISIAM。谷歌推荐using it

    3) 您认为 /tmp 已满是正确的,因为重新启动实例可以解决问题

    希望我的建议对您有所帮助。

    【讨论】:

    • 不幸的是,Cloud SQL 由 Google 管理,所以我自己无法控制 /tmp。因此,虽然这可能对 MySQL 安装有效,但您可以访问 cron 和文件系统,但不幸的是,它在这种情况下无效
    • 我建议切换到 InnoDB 表。谷歌网站提到要使用,因为您可能会在 MySIAM 上遇到性能问题。另外,查看 MySQL website 上的这篇文章。底部的 cmets 提到更改为 InnoDB 解决了该问题。
    • 回复:InnoDB。正如您建议的链接所指出的,InnoDB 表是默认的。我怀疑,由于这些是正在创建的内部临时表,因此它使用的是 MyISAM 并且无法控制。
    猜你喜欢
    • 2019-02-12
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多