加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

这样做数据清理,可以避免引发MySQL故障

发布时间:2018-10-17 05:41:16 所属栏目:建站 来源:DBAplus社群
导读:副标题#e# 【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道 通常来说,性能监控类业务场景具有数据导入量大、表空间增长快的特点,为了避免磁盘空间被占满,并提高SQL执行效率,要定期对历史数据进行清理。根据数据采集频率和保留周期的不

Step 2:用新的分区表替换原有旧表。这里需要注意的是,执行rename操作会对perf_biz_vm表的元数据进行修改,需提前检查有无对此表的Delete、Update、Insert事务与DDL操作,否则冲突会产生元数据锁(Metadata Lock)。

我们的做法是提前将业务侧的定时器停掉,并在业务低谷时执行如下语句,将旧表和新表通过rename的方式互换,让新表纳入使用。期间若有业务调用,则会短暂断开业务。

  1. rename table perf_biz_vm to perf_biz_vm_old; 
  2. rename table perf_biz_vm_new to perf_biz_vm; 

Step 3:查看到新表有数据写入,云监控页面数据显示正常,说明业务恢复。云主机监控数据的保存周期是两天,因此需要将旧表两天前的数据拷贝到新表,该步骤通过脚本来完成,可参考以下脚本:

代码如下:

  1. #!/bin/bash  
  2. function insert{  
  3. end_time="$1 $2"  
  4. start_time="$3 $4"  
  5. mysql -u'user' -p'passwd' << !  
  6. use monitor_alarm_openstack;  
  7. set innodb_flush_log_at_trx_commit=0;  
  8. start transaction;  
  9. insert into perf_biz_vm select * from perf_biz_vm_old where create_time < '$end_time' and create_time > '$start_time';  
  10. commit;  
  11. select TABLE_ROWS from information_schema.tables where TABLE_SCHEMA ="monitor_alarm" and TABLE_NAME="perf_biz_vm";  
  12. !  
  13. }  
  14. base_time="2018-02-27 2:00:00"  
  15. while true  
  16. do  
  17. #end_time=$(date -d "-1hour $base_time" +%Y-%m-%d" "%H:%M:%S)  
  18. end_time=$base_time  
  19. start_time=$(date -d "-1hour $end_time" +%Y-%m-%d" "%H:%M:%S)  
  20. #base_time=$end_time  
  21. base_time=$start_time  
  22. echo "Cur_time: $(date +%Y%m%d" "%H%M%S)" | tee -a 1.log  
  23. echo "Range: $end_time $start_time" | tee -a 1.log  
  24. insert ${end_time} ${start_time} | tee -a 1.log  
  25. sleep 2  
  26. done 

Step 4:编写存储过程用于定期创建新的分区,并删除几天前旧的分区:

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读