B.4.3.4 MySQL 如何处理完整磁盘

本节介绍 MySQL 如何响应磁盘已满错误(例如“设备上没有剩余空间”)和配额超过的错误(例如“写入失败”或“达到用户块限制”)。

此部分与写入MyISAMtable 有关。它也适用于对二进制日志文件和二进制日志索引文件的写操作,只是对“行”和“记录”的引用应理解为 table 示“事件”。

当出现磁盘已满的情况时,MySQL 将执行以下操作:

  • 它每分钟检查一次,以查看是否有足够的空间来写入当前行。如果有足够的空间,它将 continue 进行,好像什么也没发生。

  • 它每 10 分钟将一个条目写入日志文件,警告磁盘已满。

要缓解此问题,请采取以下措施:

  • 要 continue,您只需要释放足够的磁盘空间即可插入所有记录。

  • 或者,要终止线程,请使用mysqladmin kill。线程在下一次检查磁盘时(在一分钟内)被中止。

  • 其他线程可能正在 await 导致磁盘已满的 table。如果您有多个“锁定”线程,则杀死一个在磁盘已满的情况下 await 的线程将使其他线程 continue 运行。

使用REPAIR TABLEOPTIMIZE TABLE或在LOAD DATA之后或ALTER TABLE语句之后在批处理中创建索引时,上述行为是 exception。所有这些语句都可能会创建大型的临时文件,这些文件如果留给自己使用,会对系统的其余部分造成严重的问题。如果在 MySQL 执行上述任何操作时磁盘已满,它将删除较大的临时文件并将 table 标记为已崩溃。exception 是对于ALTER TABLE,旧 table 保持不变。