记一次MySQL磁盘满了之后清理的过程

本文记录了一次MySQL磁盘空间满后,从数据库备份、碎片整理到最终解决问题的过程。在尝试多种方法无效后,通过删除并重建`ibdata1`等文件释放了空间。此外,分享了MySQL碎片化的成因、清除优点以及注意事项,并提醒适时进行碎片整理。

昨天使用命令发现磁盘使用率为100%了,还剩几十兆。

一系列神操作

备份数据库,删除实例、删除数据库表、重启mysql服务,结果磁盘空间均没有释放。

怎么办

网上查了很多资源,说要进行磁盘碎片化整理。原因是datafree占据的空间太多啦。具体可以通过这个sql查看。

SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = 'datainfo';

这个是后来的图了,之前的图没有留,当时显示一张表里的data_free都达到了20个G。

图片

网上推荐的做法如下所示,对表格进行碎片化整理。

ALTER TABLE datainfo ENGINE=InnoDB;
ANALYZE TABLE datainfo;

optimize table datainfo;

僵局:

查看数据库版本为5.562不支持inodb

MySQL 占用的磁盘空间通常由多个部分组成,包括数据文件、索引文件、日志文件(如二进制日志、慢查询日志等)以及临时文件。为了有效清理释放磁盘空间,可以从以下几个方面入手: ### 优化数据存储 - **使用 `OPTIMIZE TABLE` 命令**:当大量录被删除后,表中可能存在很多碎片空间。执行 `OPTIMIZE TABLE` 可以重新组织表和相关的索引,从而减少碎片并释放空间[^1]。例如: ```sql OPTIMIZE TABLE your_table_name; ``` - **考虑使用 `TRUNCATE` 而非 `DELETE`**:如果需要清空整个表的数据,使用 `TRUNCATE` 会比 `DELETE` 更高效,因为它不会录每一行的删除操作,并且可以立即释放空间[^4]。注意,`TRUNCATE` 是不可回滚的操作,且会重置自增字段的计数器。例如: ```sql TRUNCATE TABLE your_table_name; ``` ### 清理日志文件 - **清理二进制日志**:MySQL 的二进制日志文件可能会占用大量磁盘空间。可以通过执行 `PURGE BINARY LOGS` 命令来手动清除不再需要的二进制日志文件[^3]。例如,清除所有早于某个日期的日志文件: ```sql PURGE BINARY LOGS BEFORE '2023-01-01'; ``` 或者清除指定文件名之前的日志文件: ```sql PURGE BINARY LOGS TO 'mysql-bin.010'; ``` - **配置自动清理策略**:可以在 MySQL 配置文件中设置 `expire_logs_days` 参数来自动清理过期的二进制日志文件。例如,设置日志文件保留时间为7天: ```ini [mysqld] expire_logs_days=7 ``` ### 管理临时文件和缓存 - **清理临时文件**:MySQL 在运行过程中可能会生成临时文件,特别是在执行大型查询或排序操作时。这些文件通常位于系统的临时目录中,可以定期检查并删除不再需要的临时文件。 - **调整 InnoDB 缓冲池大小**:虽然这不会直接释放磁盘空间,但合理配置 InnoDB 缓冲池的大小可以帮助提高性能,减少不必要的磁盘 I/O 操作。可以通过修改 `innodb_buffer_pool_size` 参数来调整缓冲池的大小。 通过以上方法,可以有效地管理和释放 MySQL 占用的磁盘空间,同时保持数据库的良好性能。在进行任何重大更改之前,建议先备份数据库,以防止意外数据丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值