2016 - 2024

感恩一路有你

sql数据库磁盘满了怎么办 MYSQL所在机器磁盘满了以后,写入数据库会阻塞吗?

浏览量:1812 时间:2021-03-16 13:04:10 作者:admin

MYSQL所在机器磁盘满了以后,写入数据库会阻塞吗?

当磁盘空间满了,MySQL就不能再写任何数据了,包括写表数据、binlog、binlog索引等文件。

当然,由于InnoDB可以先将脏数据放入内存,因此不会立即显示无法写入。除非binlog被打开,否则写请求将被阻止。

当MySQL检测到磁盘已满时,它将:

每分钟:检查空间是否可用于写入新数据。当我们发现还有空间的时候,我们会继续写数据,一切照旧。

每十分钟:如果没有剩余空间,将在日志中写入一条记录以报告磁盘空间已满(此时只有几个字节足够)。

我们该怎么办

然后,当我们发现磁盘空间已满时,我们该怎么办?建议:

提高监控系统的检测频率,防止再次发生;

及时删除未使用的文件,释放空间;

如果某个线程因为磁盘满的问题被阻塞,可以先将其杀死,下一分钟再次被检测到时,该线程可能会再次正常工作;

该线程可能会正常工作,因为磁盘已满,某些线程被阻止,而其他线程被阻止。您可以终止被阻止的线程,其他被阻止的线程可以继续工作。

异常

存在异常:

执行修复表或优化表操作时,或执行加载数据填充或更改表后批量更新索引时,这些操作将创建临时文件。当mysqld在这些操作中发现磁盘空间已满时,它会将涉及的表标记为崩溃并删除临时文件(除了Alter table操作外,MySQL会放弃正在执行的操作,删除临时文件并释放磁盘空间)。

注意:当mysqld进程在执行这些命令的过程中意外终止时,生成的临时文件不会自动删除,只能通过手动删除来释放磁盘空间。

mysql表数据量太大,达到了1亿多条数据,除了分库分表之外,还有没有其他的解决方式?

在正常配置下,MySQL只能承载2000万数据(同时读写,表中有大文本字段,单服务器)。现在已经超过1亿,而且还在增加,建议按以下方式处理:

1子表。它可以按时间或一定的规则进行拆分,以便尽可能地查询子表中的数据库。这是最有效的方法。特别是写,放入一个新表,并定期同步。如果记录不断更新,最好将写入的数据放在redis中,并定期同步表3的大文本字段,将它们分隔成一个新的独立表。对于较大的文本字段,可以使用NoSQL数据库

4优化体系结构,或者优化SQL查询,避免联合表查询,尽量不要使用count(*)、in、recursion等性能消耗语句

5使用内存缓存,或者在前端读取时增加缓存数据库。重复读取时,直接从缓存中读取。

以上是一种低成本的管理方法,基本上几个服务器就可以做到,但是管理起来有点麻烦。

当然,如果总的数据量特别大,并且您不关心成本,您可以使用cluster或tidb来清除日志并压缩日志和数据库文件的大小

sql数据库磁盘满了怎么办 linux如何分区 mysql数据库初始化命令

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。