删库跑路必备目录
前言
在数据库运维过程中会遇到磁盘空间占用过大情况,这个时候就需要对空间进行扩容或者优化磁盘空间了。
导致空间不足情况及优化方案
索引太多
大字段导致空间不足
空闲表空间太多导致空间不足
可以通过命令show table status like ‘<表名>’;
查看表上空闲的空间,如果空闲空间过多,可以执行命令optimize table ‘<表名>’ ;整理表空间。
InnoDB类型的表是无法使用optimize table命令的。强行使用会返回如下结果:
MySQL5.7已经推荐对于InnoDB的table使用
临时表空间过大导致空间不足
日志过大(Binlog日志、Slow日志、Error日志)
定时自动清理Binlog日志
手动删除Binlog日志
Slow日志清理
Error日志清理
大表清理
select table_schema,table_name,
concat(round((data_length+index_length)/1024/1024/1024,2),'G') as tablesize_gb,
table_rows from information_schema.tables
order by tablesize_gb desc limit 5;
常规表数据清理
扩展
报错处理
未开启二进制文件会报错
查看二进制开启状态
打开mysql 的配置文件my.ini
在mysqld配置项下面加
二进制日志 Binary Log
二进制日志有两个最重要的使用场景:
MySQL删除数据的方式
从执行速度上来说
DELETE
TRUNCATE
执行后立即生效,无法找回
DROP
属于数据库DDL定义语言,同Truncate;
Drop table Tablename
执行后立即生效,无法找回
OPTIMIZE TABLE
OPTIMIZE TABLE通过制作原来的表的一个临时副本来工作
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有 VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
OPTIMIZE