MySQL 8.4 发布说明
本节介绍 MySQL 如何响应磁盘空间满错误(例如 “设备上没有剩余空间”),以及配额超限错误(例如 “写入失败” 或 “用户块限制已达”)。
本节与写入 MyISAM
表有关。它也适用于写入二进制日志文件和二进制日志索引文件,但应将对 “行” 和 “记录” 的引用理解为 “事件”。
当磁盘空间满时,MySQL 会执行以下操作
它每分钟检查一次,查看是否有足够的空闲空间来写入当前行。如果有足够的空间,则继续执行,就像没有发生任何事情一样。
每 10 分钟,它会在日志文件中写入一条条目,警告磁盘空间满的情况。
为了缓解这个问题,请采取以下措施
要继续,您只需要释放足够的磁盘空间来插入所有记录。
或者,要中止线程,请使用 mysqladmin kill。 线程将在下次检查磁盘时(一分钟后)中止。
其他线程可能正在等待导致磁盘空间满的表。如果您有多个 “锁定” 线程,杀死正在等待磁盘空间满的线程可以使其他线程继续执行。
对上述行为的例外是,当您使用 REPAIR TABLE
或 OPTIMIZE TABLE
,或在 LOAD DATA
之后或在 ALTER TABLE
语句之后批量创建索引时。所有这些语句都可能创建大型临时文件,如果任其自生自灭,将会给系统其他部分带来很大问题。如果在 MySQL 执行这些操作时磁盘空间满,它会删除大型临时文件并将表标记为已崩溃。例外情况是,对于 ALTER TABLE
,旧表将保持不变。