`
CtripMySQLDBA
  • 浏览: 57159 次
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL数据自动清理系统

阅读更多

MySQL数据自动清理系统

一、 目标

1.   以时间字段为条件,自动清理一定时间之前的数据

2.   支持每次小批量分批清理

3.   支持自定义执行清理的时间窗

4.   支持简单的主从表的关系数据删除

 二、清理数据方法

1.   通过分区表

适用于用于删除的条件的时段字段不会修改的日志表类型

1)  支持的分区方法

a)  分区单位:天 / 月

b)   分区字段类型: datetime / timestamp

2)   实现方法

       通过存储过程实现清理逻辑,删除旧的分区,生成新分区

2. 直接按时间字段删除

适用于用于删除的条件的时间字段有修改情况的表

1)  支持的用于删除的条件字段类型

a)  datetime / timestamp

b)  unix_timestamp(支持到毫秒级)

2)  实现方法

在脚本中实现清理逻辑,小批量删除数据

二、设计

1.   相关流程


(1)

 

 

(图2)

2.  程序逻辑

1)   使用两个线程循环处理,线程 HostInfo 用来取要清理的表列表,线程autoClear用来处理清理表的动作

2)   线程 HostInfo

a)    循环取要处理的服务器列表,放到公共变量 arrHost 中,如果已经存在就不再放入

b)    取完后,休息 30 秒后,再取服务器列表

3)    线程 autoClear

a)    从公共变量 arrHost 中取一个需要清理的表,并将该表的信息从 arrHost 中删除,然后判断该表所在的服务器上是否已经有清理任务在执行,如果有并且任务数超过限制就退出,否则进行数据清理动作并记录下被删除的数据条数。

清理时判断是否在清理的时间窗口,如果不在了,就退出该表的清理过程,合计被删除的记录数,并写入日志。

b)   一个表清理完成后,再从 arrHost 中取下一个表的信息,如果 arrHost 中没有记录就停止 10 秒,再尝试取需要清理的表

 

3.   相关表

1)   主表配置表

CREATE TABLE `autoclear_setting` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `dns` varchar(512) DEFAULT NULL,

  `port` int(11) DEFAULT '55944',

  `priority` int(11) DEFAULT '0',

  `type` int(11) DEFAULT NULL COMMENT '清理类型:1:分区表; 2:直接按时间删除',

  `dbname` varchar(64) DEFAULT NULL,

  `tbname` varchar(64) DEFAULT NULL,

  `colname` varchar(64) DEFAULT NULL COMMENT '清理条件的时间字段: 不支持到毫秒的 unix_timestamp',

  `keep_days` int(11) DEFAULT NULL COMMENT '保留多少天的数据',

  `del_time_step` int(11) DEFAULT NULL COMMENT '删除的时间步长(每次删除多长时间的数据,单位: )',

  `tstep_type` char(1) DEFAULT NULL COMMENT '时间条件字段类型:D/I: date 或者 int 类型(unix_timestamp)',

  `del_row_step` int(11) DEFAULT NULL COMMENT '单次删除记录的条数 limit',

  `punit` char(1) DEFAULT NULL COMMENT '分区表单位: M: D:',

  `pkeepcnt` int(11) DEFAULT NULL COMMENT '保留多少天/月的数据,0表示不删除旧分区',

  `pprecnt` int(11) DEFAULT NULL COMMENT '预分配分区数量',

  `pperunit` char(1) DEFAULT NULL COMMENT '分区使用的单位:D: (to_days)/S:(unix_timeStamp)',

  `clearwindow_start` time DEFAULT NULL COMMENT '清理窗口开始时间',

  `clearwindow_end` time DEFAULT NULL COMMENT '清理窗口结束时间',

  `run_sleep` int(11) DEFAULT NULL COMMENT '单次删除后 sleep 的时间()',

  `status` tinyint(4) DEFAULT NULL COMMENT '状态: 0:正常; 1: 清理中; 2: 不清理',

  `lastsuccess_time` datetime DEFAULT NULL COMMENT '最后完成时间',

  `mintime` varchar(64) DEFAULT NULL COMMENT '清理后最小时间',

  `join_key` varchar(64) DEFAULT NULL COMMENT '关联副表的key',

  `timeunit` char(1) DEFAULT 'S' COMMENT '清理字段为timestamp, S: ; M: 毫秒',

  PRIMARY KEY (`id`),

  KEY `idx_hostname` (`dns`(128))

) ENGINE=InnoDB DEFAULT CHARSET=utf8

2)    从表配置表

CREATE TABLE `autoclear_attach_setting` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `dbname` varchar(64) DEFAULT NULL,

  `tbname` varchar(64) DEFAULT NULL,

  `pid` int(11) DEFAULT NULL COMMENT '对应主表autoclear_settingid',

  `join_key` varchar(64) DEFAULT NULL COMMENT '关联副表的key',

  PRIMARY KEY (`id`),

  KEY `pid` (`pid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

3)   日志表

CREATE TABLE `autoclear_log` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `dns` varchar(512) DEFAULT NULL,

  `dbname` varchar(64) DEFAULT NULL,

  `tbname` varchar(64) DEFAULT NULL,

  `starttime` datetime DEFAULT NULL,

  `endtime` datetime DEFAULT NULL COMMENT '完成时间',

  `rowcount` int(11) DEFAULT '0' COMMENT '删除的行数',

  `isattach` tinyint(4) DEFAULT '0' COMMENT '0/1: 是否副表',

  `info` text COMMENT '返回信息',

  PRIMARY KEY (`id`),

  KEY `idx_hostname` (`dns`(128)),

  KEY `idx_starttime` (`starttime`),

  KEY `idx_tbname` (`tbname`),

  KEY `idx_rowcount` (`rowcount`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

 

分享到:
评论
1 楼 王恒-Henry 2014-05-22  
帅哥,有时间聊一下数据库技术吗,有时间加我QQ:506437736.

相关推荐

    mysql实现自动创建与删除分区

    MySQL数据库在大数据处理中扮演着重要...总之,通过结合存储过程和事件,我们可以实现在MySQL中自动管理时间分区,以适应不断增长的数据量和查询需求。这不仅简化了数据库维护,也有助于优化性能,提高数据管理效率。

    MySQL数据库自动备份与清理脚本

    1、mysql数据库自动备份与清理2、支持mysql 5.7与mysql 8.03、基于mysql enterprise backup备份4、支持备份数据通过ftp上传或通过rsync上传5、支持自定义备份数据定期清理

    mysql历史数据同步到clickhouse 已测试

    - **定期清理旧数据**: 根据业务需求设定数据保留策略,定期清理过期数据,保持ClickHouse高效运行。 综上所述,将MySQL历史数据同步到ClickHouse涉及到多个步骤,包括选择合适的同步方法、优化数据模型、考虑性能...

    Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份).zip

    "Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份)"的资源提供了一个解决方案,它是一个批处理脚本(MysqlAutoBackup.bat),能够自动化执行MySQL的备份过程,同时生成备份日志并清理历史备份。...

    mysql自动实现备份脚本

    通过理解和定制这个“mysql自动实现备份脚本”,你可以建立一个稳定且可靠的MySQL数据库备份系统,确保在面对各种风险时,你的数据始终得到妥善保护。同时,定期检查和更新备份策略以适应业务变化是非常必要的。

    MySQL分区表自动创建及删除存储过程

    这在处理大量历史数据时尤其有用,例如,可以定期清理过期的数据分区。 "EVENT_AUTO_CREATE_DROP_PARTITION.sql"可能是定义了一个事件调度器(event scheduler)的脚本。MySQL事件调度器允许在预定义的时间执行特定...

    mysql 自动备份数据库脚本

    MySQL数据库在日常运营中起着至关重要的作用,因此定期备份是...以上就是关于"mysql 自动备份数据库脚本"的相关知识点,通过理解并正确运用这些概念,可以构建一个稳定、高效的数据库自动备份系统,确保数据的安全。

    MYSQL服务器自动备份脚本(可设置保留天数)

    总结起来,这个MySQL服务器自动备份脚本涵盖了数据库的导出、压缩、过期备份的清理以及计划任务的配置,是一个全面且实用的解决方案。通过定期执行这样的脚本,你可以确保在任何数据丢失的情况下都有恢复点可用,...

    使用VBA将excel的数据存放到mysql数据库里面,并将内容显示到sheet数据表

    本教程将详细介绍如何使用VBA将Excel数据存入MySQL数据库,并将结果回显到Sheet数据表中。 首先,我们需要安装MySQL ODBC驱动程序,这将允许VBA通过ODBC数据源与MySQL数据库进行通信。安装完成后,在“控制面板”的...

    hsql数据转移mysql

    7. **最佳实践**:遵循数据库设计的最佳实践,例如规范化、适当的索引策略,以及定期进行数据清理和归档,可以降低迁移的复杂性和风险。 以上就是关于“hsql数据转移mysql”的详细解析,这个过程涉及到数据库管理、...

    linux下 MYSQL 自动备份工具

    在Linux环境中,MySQL数据库的自动备份是系统管理中不可或缺的一部分,尤其对于那些依赖大量数据运行的企业来说更是如此。为了确保数据安全,定期备份是必要的预防措施,以防数据丢失或损坏。"linux下 MYSQL 自动...

    python自动备份mysql数据库,并删除七天前文件

    本示例涉及的主题是使用Python来自动备份MySQL数据库,并且定期清理过期的备份文件,以保持存储空间的有效利用。下面将详细介绍这个过程以及相关的知识点。 首先,我们需要了解Python在数据库操作中的角色。Python...

    mysql 百万级数据测试

    综上所述,"MySQL 百万级数据测试"涵盖了数据库导入、备份恢复、数据建模、索引优化、关系处理、自动化测试以及分区策略等多个方面。这些都是在处理大量数据时必须考虑的关键因素,以确保数据库系统能高效、稳定地...

    MySQL自动备份

    本文将详细介绍如何利用Shell脚本配合Cron定时任务来实现MySQL数据库的自动备份,并自动清理一定时间之前的备份文件。 ### 1. Shell脚本实现MySQL备份 首先,我们来看一下如何通过Shell脚本来实现MySQL数据库的...

    JSP+MYSQL小区人口管理系统

    5. 系统维护:此部分涵盖了系统的备份、恢复、权限设置以及数据清理等功能。确保系统的稳定运行,并保护敏感数据的安全。 二、技术架构解析 JSP作为服务器端脚本语言,它结合了HTML、Java代码和JavaBean,使得动态...

    一键彻底卸载 MySQL 脚本针对 Windows 系统的脚本工具提供简便快捷的方法来完全卸载 MySQL 数据

    通过一键彻底卸载 MySQL 脚本+,用户可以方便地卸载 MySQL 并确保数据库和相关文件完全删除,从而提供更好的系统清理和准备环境的能力。无论是开发者、系统管理员还是普通用户,都可以受益于这个简单而强大的工具,...

    MySQL数据库自动备份、还原bat

    ### MySQL数据库自动备份与还原批处理脚本详解 在日常的数据库管理工作中,数据库的备份与恢复是一项极为重要的任务。良好的备份策略不仅能确保数据的安全性,还能在数据丢失或损坏时快速恢复业务运行。本文将详细...

    自动备份mysql数据库

    在IT行业中,数据备份是一项非常重要的任务,尤其对于运行MySQL数据库的应用系统来说更是如此。本文将详细介绍如何通过编写批处理脚本来实现MySQL数据库的自动备份功能。这不仅能够提高数据安全性,还可以减少手动...

    linux mysql自动备份工具

    本篇文章将详细讲解如何在Linux系统中设置一个自动的MySQL备份工具,以便实现数据的自动备份,降低因系统故障或人为错误导致的数据丢失风险。 首先,我们需要了解备份MySQL数据库的基本原理。MySQL提供了多种备份...

    MySQL bin-log 日志清理方式

    自动清理方法可以通过修改配置文件和在 MySQL 内设置参数来实现,例如设置 expire_logs_days 参数来指定日志保留的天数。手动清理方法可以通过执行 PURGE 命令来清理指定的bin-log 文件或清理某个时间点之前的所有...

Global site tag (gtag.js) - Google Analytics