mysql清理过期数据


开启事件

修改配置文件my.cnf增加配置项

[mysqld]

event_scheduler=ON

重启服务生效

创建事件

如:

每10分钟执行一次 删除过期60分钟的日志记录

create event e_delete_operation_log on schedule every 10 second do delete from operation_log where tcreated_at < (CURRENT_TIMESTAMP() + INTERVAL -60 MINUTE);

每1天执行一次,删除过期180天的消息记录

create event e_delete_message_history on schedule every 1 day do delete from operation_log where created_at < (CURRENT_TIMESTAMP() + INTERVAL -180 DAY);

启用事件

alter event e_delete_operation_log on completion preserve enable;

关闭事件

alter event e_delete_operation_log on completion preserve disable;

删除事件

drop event if exists  e_delete_operation_log;

清理磁盘碎片

delete语句只是将数据标记为已删除,未删除磁盘占用,

使用一下命令清理数据磁盘占用。

OPTIMIZE TABLE operation_log;

检查和调整 InnoDB 存储引擎的配置:如果使用的是 InnoDB 存储引擎,并希望释放更多的磁盘空间,可以考虑调整一些配置选项。

例如,可以增加 innodb_buffer_pool_size 的值,以便 InnoDB 可以使用更多的内存。

此外,可以考虑调整 innodb_log_file_size 和 innodb_log_buffer_size,这有助于释放与日志文件相关的磁盘空间。

更改这些设置可能需要重新启动 MySQL 服务。


参考:

https://www.jb51.net/database/2918363yl.htm


方案二

1、新建表new_table

2、旧表指定数据导入新表

3、旧表table改名old_table

4、新表改名为table

5、清除旧表old_table  drop和truncate均可

truncate只会清除表数据,drop不光清除表数据还要删除表结构。

当你不再需要该表时,用drop;

当你仍要保留该表,但要删除所有数据表记录时,用truncate;

当你要删除部分记录或者有可能会后悔的话,用delete。

6、清除表磁盘空间 optimizetable table_name;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容