当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

通过定时任务执行mysql的定期删除和新建分区,此处是按日分区

发表于: 2012-09-10   作者:酷的飞上天空   来源:转载   浏览:
摘要: 使用python脚本作为命令脚本,linux的定时任务来每天定时执行 #!/usr/bin/python # -*- coding: utf8 -*- import pymysql import datetime import calendar #要分区的表 table_name = 'my_table' #连接数据库的信息 host,user,passwd,db =

使用python脚本作为命令脚本,linux的定时任务来每天定时执行

#!/usr/bin/python
# -*- coding: utf8 -*-
import pymysql
import datetime
import calendar

#要分区的表
table_name = 'my_table'
#连接数据库的信息
host,user,passwd,db = ('127.0.0.1','root','123456','test')
#保留数据的天数
days = 2

#===================================================
'''
#根据月分区,计算出要删除的上月分区名称和下月新增的分区名称
def add_months(dt,months):
    month = dt.month - 1 + months
    year = dt.year + month / 12
    month = month % 12 + 1
    day = min(dt.day,calendar.monthrange(year,month)[1])
    return dt.replace(year=year, month=month, day=day)

today = datetime.datetime.today()
last_date = add_months(today,-1) 
next_date = add_months(today,1)
next_next_date = add_months(next_date,1)

last_p = 'p%s' % last_date.strftime('%Y%m')
next_p = 'p%s' % next_date.strftime('%Y%m')
'''

#===================================================
#根据天分区,根据保留的天数计算出要删除的分区名称和要新增的分区名称
today = datetime.datetime.today()
last_date = today-datetime.timedelta(days)
next_date = today+datetime.timedelta(1)
next_next_date = today+datetime.timedelta(2)

last_p = 'p%s' % last_date.strftime('%Y%m%d')
next_p = 'p%s' % next_date.strftime('%Y%m%d')

sql_add_p = 'alter table %s add partition (partition %s values less than (to_days(\'%s\')))' %(table_name,next_p,next_next_date.strftime('%Y-%m-%d'))
sql_del_p = 'alter table %s drop partition %s' %(table_name,last_p)


#===================================================
#连接数据库,执行删除和新增分区的sql语句
#print sql_add_p
#print sql_del_p
print '==============================================\nstart work:\n%s\n%s' %(sql_add_p,sql_del_p)
conn = pymysql.connect(host,user, passwd, db)
cur = conn.cursor()
cur.execute(sql_add_p)
cur.execute(sql_del_p)
conn.close()

 如果是以前没有分过区的表,则需要先创建一个分区,然后才能执行上面的代码

 

通过定时任务执行mysql的定期删除和新建分区,此处是按日分区

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
先在虚拟机上添加一块硬盘。 查看磁盘分区:sdb还没有分配 新建一个100M的分区:再查看,发现新建成
1. SHOW CREATE TABLE 可以查看创建分区表的CREATE语句 2. SHOW TABLE STATUS 可以查看表是否为分区
非整数列分区 任何使用过分区的人应该都遇到过不少问题,特别是面对非整数列分区时,MySQL 5.1只能
为了更好的演示range分区,首先对mysql server的启动和关闭进行说明: 一,如何启动mysqld? 本人把
在上一篇文章中,我们通过例子重点介绍了基于某列(若存在主键或者唯一键,则该列必须是这些键的子
hash分区的目的是将数据按照某列进行hash计算后更加均匀的分散到各个分区,相比,range和list分区来
为了更好的演示range分区,首先对mysql server的启动和关闭进行说明: 一,如何启动mysqld? 本人把
在上一篇文章中,我们通过例子重点介绍了基于某列(若存在主键或者唯一键,则该列必须是这些键的子
hash分区的目的是将数据按照某列进行hash计算后更加均匀的分散到各个分区,相比,range和list分区来
1. 背景介绍 当 MySQL中一个表的总记录数超过了1000万后,会出现性能的大幅度下降吗?答案是肯定的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号