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

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数据库自动备份与清理脚本

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

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

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

    MYSQL

    4.14 TcX 二进制代码 4.15 安装后期(post-installation)的设置与测试 4.15.1 运行mysql_install_db 的问题 4.15.2 启动 MySQL 服务器的问题 4.15.3 自动启动和停止 MySQL 4.15.4 选项文件 ...

    基于ajax,jQuery实现从Mysql数据库获取数据实现省市区三级联动

    基于ajax,jQuery实现从Mysql数据库获取数据实现省市区三级联动,选择完省才能选择市,同理于市区,换选其他省市时,可自动清除已选择的市、区。使用eclipse+Mysql开发,压缩文件内有说明。

    MySQL中文参考手册.chm

    4.13 OS/2 注意事项 4.14 TcX 二进制代码 4.15 安装后期(post-installation)的设置与测试 4.15.1 运行mysql_install_db 的问题 4.15.2 启动 MySQL 服务器的问题 4.15.3 自动启动和停止...

    MySQL中文参考手册

    + 4.15.3 自动启动和停止 MySQL + 4.15.4 选项文件 o 4.16 升级和降级(downgrading)时有什么特别要做的事情吗? + 4.16.1 从一个 3.22 版本升级到 3.23 + 4.16.2 从一个 3.21 版本升级到 3.22 + 4.16.3 从...

    【YouDianCMS v9.1】 开源五合一建站系统+友点企业网站管理系统+数据自动同步.zip

    YouDianCMS即友点企业网站管理系统集电脑站+手机站+微信站+APP+小程序五合一,数据自动同步,降低人力维护成本;共用一个管理后台,只要一个虚拟主机,有效节约空间投资。系统采用开源技术PHP+MYSQL开发,开源且具有...

    【YouDianCMS v9.1】 开源五合一建站系统+友点企业网站管理系统+数据自动同步

    YouDianCMS即友点企业网站管理系统集电脑站+手机站+微信站+APP+小程序五合一,数据自动同步,降低人力维护成本;共用一个管理后台,只要一个虚拟主机,有效节约空间投资。系统采用开源技术PHP+MYSQL开发,开源且具有...

    mysql数据库my.cnf配置文件

    # 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘 # 默认值1是为了保证完整的ACID。当然,你可以将这个...

    MySQL命令大全

    MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    自动化上线部署系统

    这是一个Python语言编写的自动化上线部署系统,只需做很少的配置就可以立即使用。 系统将整个发布过程分成两个部分:checkout 和 deploy checkout 此部分做代码的检出动作,并且在代码的检出前后可以分别做一些...

    一键安装mysql数据库脚本.zip

    此资源为centos7环境下通过脚本一键安装mysql的shell脚本,数据库安装前需要将mysql-5.7*.tar.gz文件、my.cnf.bak、startmysql.sh、stopmysql.sh拷贝...clean.sh为安装时出错时清理数据目录脚本,安装完成后删除即可。

    mysql笔记,mysql优化图解

    1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF ☞ 数据库的分类 关系型数据库: mysql/oracle/db2/...

    帝国备份王2008开源版下载 (MYSQL专用备份工具)

    不同编码数据库之间可直接备份与恢复,系统自动识别数据编码; 系统支持完整备份,即使备份与恢复两个数据表结构不一致,也可备份与恢复; 支持数据表编码转换。 3、安全性 备份文件均生成*.php文件,并且采用登陆...

    用批处理实现自动备份和清理mysql数据库的代码

    也很简单,就用windows自带的“任务计划”功能,设定一个时间,让系统定时跑脚本,不就实现了自动备份数据库的功能了吗?不过到现在已经有很多的mysql备份软件,例如我比较喜欢使用的是护卫神的好备份软件。下载地址...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    PHP和MySQL Web开发第4版pdf以及源码

    12.2.1 从操作系统角度来保护MySQL 12.2.2 密码 12.2.3 用户权限 12.2.4 Web问题 12.3 获取更多关于数据库的信息 12.3.1 使用SHOW获取信息 12.3.2 使用DESCRIBE获取关于列的信息 12.3.3 用EXPLAIN理解查询...

    MYSQL常用命令大全

    MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    数据库设计和自动安装工具BDB V2.2(for Oracle/MS SQLServer/MySQL/Access/SQLAnywhere/Sybase)

    系统会自动进行语法、数据类型转换。 3、数据库迁移:在不同数据库平台间进行数据库结构(包括数据表、索引、约束、 视图和存储过程对象)和数据迁移。 4、查询分析、数据表查询、数据编辑功能。提供专用的...

Global site tag (gtag.js) - Google Analytics