MySQL空间清理的几种具体方法

参考链接: Mysql空间清理,最硬核

1.查看文件磁盘占用

1.1 查看磁盘空间占用
df -lh

在这里插入图片描述

1.2 查看目录空间占用

找到mysql的数据目录,可以看到binlog文件占用空间较多

du -sh ./*

在这里插入图片描述

2.Binlog日志清理

2.1.定时自动清理Binlog日志
show variables like '%expire_logs_days%';  --mysql 5.7
show variables like '%binlog_expire_logs_seconds%';  --mysql8.0

# mysql5.7
# 这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
set global expire_logs_days=10;

# mysql8.0
# mysql8开始 expire_logs_days 废弃 启用binlog_expire_logs_seconds设置binlog自动清除日志时间
# 保存时间 以秒为单位;默认2592000 30天
# 14400   4小时;86400  1天;259200  3天;
set global binlog_expire_logs_seconds=86400;

在这里插入图片描述

2.2 手动删除Binlog日志
# 第一步:登陆进入mysql,并使用 show binary logs; 查看日志文件,可以看到与之前服务器内的文件一致。
show binary logs;

在这里插入图片描述

# 查看正在使用的日志文件:show master status;
show master status;
# 当前正在使用的日志文件是binlog.000079,那么删除日志文件的时候应该排除掉该文件。删除日志文件的命令如下
purge binary logs to 'binlog.000079';
# 删除除binlog.000079以外的日志文件,也可以指定其他文件名,例如binlog.000001。删除后就能释放大部分空间。

在这里插入图片描述
在这里插入图片描述

2.3.Slow日志清理

如何开启mysql慢查询日志?

# 步骤一 查看slow日志模式
show variables like 'log_output%';
# 步骤二 查看Slow日志文件位置
show variables like '%slow%';

在这里插入图片描述
在这里插入图片描述

# 步骤三 清空Slow日志
echo "">/var/lib/docker/overlay2/208f8ec99ffb5b103e7593fc54fcce1920faa6b57fb0056c3ffe9d8947031b1f/merged/usr/mysql/data
m/860a723cdf9b-slow.log #因为我是docker启动的mysql所以目录很长
2.3.Error日志清理

mysql开启错误日志的方法
MySQL8.0错误日志Error log介绍

#步骤一 查看error日志位置
show variables like 'log_error';

在这里插入图片描述

#步骤二 查看error日志大小
ll -h ./mysql_error.log
#步骤三 清空error日志
echo "">./mysql_error.log

在这里插入图片描述

3.表清理

  • 大表,指单个数据文件磁盘占用大于100G,或者单个表数据记录量大于1亿。
3.1.查看表占空间和记录数
#查看所有数据库各表容量大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
-- where table_schema='test'
order by data_length desc, index_length desc;

3.1.常规表数据清理
#常规表指没达到大表标准的。
#Delete语法:
Delete from table_name [ where condition];
#Delete 只删除符合条件的数据,不会减少表所占空间。
#Delete 大量数据后,会存在碎片,需要整理回收碎片空间
optimize table table.name; #或者 
alter table table.name engine='innodb'; #(会锁表,注意在业务低谷期执行)

#Truncate语法:
Truncate table table_name;
#Truncate 删除全表数据,回收所占表空间。

#Drop语法:
Drop table table_name;
#Drop 删除全表数据和表结构,回收所占表空间。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值