2 zhaoqiangshun zhaoqiangshun 于 2017.09.01 15:23 提问

php操作mysql InnoDB表,导出并删除日志表里数据,由于数据量过大

有这么一个需求,现在有一个表是系统日志表,由于表数据量太大,现在每天执行一次
定时任务,把表里的数据先导出到本地,然后清空,表里的数据。
在清空表里数据的时候,由于数据量太大,需要点时间,这时有新的日志写入的时候
把新数据写入到另一张同结构的表里,等原日志表删除完以后,就可以往进写日志了,再把副表里写入的数据,导入到主表中。
求大神指点思路,能详细点,非常感谢!

2个回答

mm564335
mm564335   2017.09.01 15:52

定时导出,清空表数据的时候可以根据时间点做过滤进行操作,这样的话不会涉及到新纪录,也不用额外建一张副表做操作了,也省的维护

zhaoqiangshun
zhaoqiangshun 回复兜oo兜: 恩,好的
3 个月之前 回复
mm564335
mm564335 回复西安时光网络: 你们的数据如果过大的话这个优化可能会很慢,具体的你可以测试一下
3 个月之前 回复
mm564335
mm564335 回复西安时光网络: optimize table 用这个释放空间
3 个月之前 回复
zhaoqiangshun
zhaoqiangshun 回复兜oo兜: 做这个功能是这样想的,如果只删除数据的话,删完以后不会释放存储空间。所以要用truncate table直接全表删并释放存储空间,所以你说的这个方法我也想过,不行。因为数据量过大,truncate时,新写入的数据就要写入到另一个表中,防止数据丢失
3 个月之前 回复
mm564335
mm564335 回复西安时光网络: 00:00 嘿嘿
3 个月之前 回复
mm564335
mm564335 回复西安时光网络:假如每天24:00 对数据做备份,你只对24:00 之前的数据做备份操作,备份完成再删除24:00之前的数据
3 个月之前 回复
zhaoqiangshun
zhaoqiangshun 你说的这个我还不太懂
3 个月之前 回复
zhaoqiangshun
zhaoqiangshun   2017.09.01 17:04

我有个思路,在我准备执行导出和删除时,将表锁住,执行完以后,再给表解锁。主表锁住这段时间就给副表写
但是我不知道程序怎么判断表是不是被锁了,因为我想通过判断表是不是被锁住,切换写入的数据表

Csdn user default icon
上传中...
上传图片
插入图片