mysql占用大量磁盘空间问题原因及解决方法

MySQL2021-04-16 13:55:40220条
我们使用mysql或者是其他的数据的时候总是会遇到数据库占用大量磁盘空间,导致磁盘空间不足,从而导致其他问题(例如:数据库重启后无法启动;数据库无法写入数据等)。 要解决这一个问题,方法就是对数据库的某些不必要的文件进行删除。在mysql数据库中占用大量磁盘空间的一般是binlog日志,因为它里面记录着数据库中数据的变动,所以它会随着时间的积累不断的变大,其存在的意义在于便于以后根据日志对数据的基于时间或位置的恢复和报错处理。

解决方法

1. 手动删除

1.1 查看是否mysql的binlog日志是否过大

由于mysql的安装版本或安装方式,其binlog日志所在的位置或日志名称都不同,需根据自己的情况,查看日志大小。
(一般位置为/var/lib//mysql//usr/local/mysql/var/

cd /mysql/data/   
du -sh \*

上图为本人实际binlog日志所在位置。由上图可知,的确是mysql的binlog日志过大,占用了磁盘空间。

1.2 删除日志文件

有两种情况

情况1:该数据库未做主从

(1)删除日志

数据库中执行:
reset master;

如该数据库有主从也可使用此命令,但是易导致主从同步失败。

情况2:该数据库已做主从

(1)查看主库和每个从库正在使用的binlog是哪个文件

show master status;

show slave status\G;


(2)删除指定的日志序号之前或日期之前的日志索引中的所有二进制日志

purge master logs to’mysql-bin.000003’;
purge master logs before’2018-08-29 12:00:00’;

注意:

不可删除正在使用的binlog

时间和文件名不可写错(要依据自己的真实情况)

1.3 reset master与purge binary logs区别

reset master:删除所有的binglog日志文件,并将日志索引文件清空,重新开始新的日志文件。
purge binary logs:基于某时间点的删除日志

2. 系统定期删除binlog文件

2.1 查看当前的日志保存天数

show variables like ‘expire_logs_days’;

这里写图片描述

2.2 设置只保留3天的binlog

(临时,重启mysql这个参数会失败)

set global expire_logs_days = 3;

(永久,my.cnf中添加,重启后生效)

expire_logs_days = 3

注意:

默认值为0,表示“没有启用自动删除”

过期时间设置的要适当

3. 禁用binlog

如使用主从,禁止此操作

3.1 将my.cnf中的下列注释掉

#log-bin=mysql-bin   
#binlog_format=mixed

3.2 重启mysql

systemctl restart mysql (centos 7)   
/etc/init.d/mysql restart (centos 6)
评论啦~
暂无评论,快来抢沙发吧!