当前位置 博文首页 > 文章内容

    python 实现mysql自动增删分区的方法

    作者:shunshunshun18 栏目:未分类 时间:2021-04-01 14:43:39

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    连接mysql

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    import time
    import pymysql
    
    class connect_mysql(object):
      def __init__(self, host, dbname):
        self.mysql_config = {
          'host': host,
          'port': 33071,
          'user': 'sysbench',
          'passwd': '970125',
          'db': dbname,
          'charset': 'utf8mb4',
        }
        self.dbname = dbname
    
    
      def select_db(self, sql):
        mysql_conn = pymysql.connect(**self.mysql_config)
        try:
          query = "%s" %(sql)
          cur = mysql_conn.cursor()
          cur.execute(query)
          results = cur.fetchall()
          cur.close()
          mysql_conn.close()
          return results
        except Exception as err:
          print(err)
    
      def excute_db(self, sql):
        mysql_conn = pymysql.connect(**self.mysql_config)
        try:
          cur = mysql_conn.cursor()
          cur.execute(sql)
          mysql_conn.commit()
          cur.close()
          mysql_conn.close()
          return 0
        except Exception as err:
          mysql_conn.rollback()
          print(err)

    增删分区

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    import sys
    import pymysql
    import importlib
    import logging
    from datetime import datetime, timedelta
    from dateutil.relativedelta import relativedelta
    from connect_db_forbatch import connect_mysql
    
    def incr_partition():
      print("新增分区...")
      max_partition_sql = "SELECT REPLACE(partition_name,'p','') FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='%s' and table_name='%s' ORDER BY partition_ordinal_position DESC LIMIT 1;" %(db_name,table_name)
    #  print(max_partition_sql)
      max_partition = connect_mysql(host,db_name).select_db(max_partition_sql)
      max_date = str(max_partition[0][0])
      max_partition_name = (datetime.strptime(max_date, "%Y%m%d") + relativedelta(days=1)).strftime("%Y%m%d")
      max_partition_value = (datetime.strptime(max_date, "%Y%m%d") + relativedelta(days=2)).strftime("'%Y-%m-%d'")
      alter_max_partition_sql = "ALTER TABLE %s.%s ADD PARTITION (PARTITION p%s VALUES LESS THAN (to_days(%s)) ENGINE = InnoDB);" %(db_name,table_name,max_partition_name,max_partition_value)
      print(alter_max_partition_sql)
      connect_mysql(host,db_name).excute_db(alter_max_partition_sql)
    
    def del_partition():
      print("删除分区...")
      min_partition_sql = "SELECT REPLACE(partition_name,'p','') FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='sbtest' and table_name='t1' ORDER BY partition_ordinal_position LIMIT 1;"
    #  print(min_partition_sql)
      min_partition = connect_mysql(host,db_name).select_db(min_partition_sql)
      min_date = str(min_partition[0][0])
      min_partition_name = (datetime.strptime(min_date, "%Y%m%d") + relativedelta(days=0)).strftime("%Y%m%d")
      alter_min_partition_sql = "ALTER TABLE %s.%s DROP PARTITION p%s;" %(db_name,table_name,min_partition_name)
      print(alter_min_partition_sql)
      connect_mysql(host,db_name).excute_db(alter_min_partition_sql)
    
    if __name__ == "__main__":
      host = sys.argv[1]
      db_name = sys.argv[2]
      table_name = sys.argv[3]
      incr_partition()
      del_partition()