B.4.3.4 MySQL 如何处理完整磁盘
本节介绍 MySQL 如何响应磁盘已满错误(例如“设备上没有剩余空间”)和配额超过的错误(例如“写入失败”或“达到用户块限制”)。
此部分与写入MyISAM
table 有关。它也适用于对二进制日志文件和二进制日志索引文件的写操作,只是对“行”和“记录”的引用应理解为 table 示“事件”。
当出现磁盘已满的情况时,MySQL 将执行以下操作:
-
它每分钟检查一次,以查看是否有足够的空间来写入当前行。如果有足够的空间,它将 continue 进行,好像什么也没发生。
-
它每 10 分钟将一个条目写入日志文件,警告磁盘已满。
要缓解此问题,请采取以下措施:
-
要 continue,您只需要释放足够的磁盘空间即可插入所有记录。
-
或者,要终止线程,请使用mysqladmin kill。线程在下一次检查磁盘时(在一分钟内)被中止。
-
其他线程可能正在 await 导致磁盘已满的 table。如果您有多个“锁定”线程,则杀死一个在磁盘已满的情况下 await 的线程将使其他线程 continue 运行。
使用REPAIR TABLE或OPTIMIZE TABLE或在LOAD DATA之后或ALTER TABLE语句之后在批处理中创建索引时,上述行为是 exception。所有这些语句都可能会创建大型的临时文件,这些文件如果留给自己使用,会对系统的其余部分造成严重的问题。如果在 MySQL 执行上述任何操作时磁盘已满,它将删除较大的临时文件并将 table 标记为已崩溃。exception 是对于ALTER TABLE,旧 table 保持不变。