A.4.3. MySQL处理磁盘满的方式

在本节中,介绍了MySQL响应磁盘满错误的方式(如“设备上无剩余空间”),以及响应超配额错误的方式(如“写入失败”或“达到了用户屏蔽限制”)。

本节介绍的内容与写入MyISAM表有关。它也适用于写入二进制日志文件和二进制索引文件,但对row”和“record”的应用应被视为“event”。

出现磁盘满状况时,MySQL将:

每分钟检查一次,查看是否有足够空间写入当前行。如果有足够空间,将继续,就像什么也未发生一样。

10分钟将1个条目写入日志文件,提醒磁盘满状况。

为了减轻问题,可采取下述措施:

要想继续,仅需有足够的磁盘空间以插入所有记录。

要想放弃线程,必须使用mysqladmin kill。下次检查磁盘时将放弃线程(1分钟)。

其他线程可能会正在等待导致磁盘满状况的表。如果有数个“已锁定”的线程,杀死正在磁盘满状况下等待的某一线程,以便允许其他线程继续。

对前述行为的例外是,当你使用REPAIR TABLEOPTIMIZE TABLE时,或当索引是在LOAD DATA INFILEALTER TABLE语句后、在批操作中创建的。所有这些语句能创建大的临时文件,如果保留这些文件,会导致系统其他部分出现大问题。如果在MySQL执行这类操作的同时磁盘已满,它将删除大的临时文件,并将表标注为崩溃。但对于ALTER TABLE例外,旧表保持不变。

关注编程学问公众号