Python mysql에서 천만 개의 대량의 데이터를 대량으로 삭제하는 스크립트 공유

장면 묘사
온라인 mysql 데이터베이스에 매일 통계 결과가 저장되어 있고 매일 1천여만 개가 있습니다. 이것은 우리가 예상하지 못한 것입니다. 통계 결과가 왜 이렇게 많습니까?운비가 찾아와 보니 디스크가 200G를 차지했고 마지막으로 운영에 대해 물었다. 최근 3일간의 데이터만 보존할 수 있고 앞의 데이터는 삭제할 수밖에 없었다.지우다
이것은 온라인 데이터베이스이기 때문에 안에 많은 다른 데이터 테이블이 저장되어 있기 때문에 이 테이블의 데이터를 직접 삭제하면 안 되고 다른 테이블에 영향을 미칠 수 있다.매번 하루만 데이터를 삭제하려고 해도 렉이 걸려요. 어쩔 수 없어요. 파이썬 스크립트를 써서 대량으로 삭제하세요.
구체적인 사고방식은 다음과 같다.
  • 매번 하루의 데이터만 삭제한다
  • 하루의 데이터를 삭제하고 매번 50000개를 삭제한다
  • 하루의 데이터를 삭제하고 다음 날의 데이터를 삭제하기 시작한다.
  • Python 코드
    
    # -*-coding:utf-8 -*-
    
    import sys
    
    #  Python Module
    sys.path.append('/var/lib/hadoop-hdfs/scripts/python_module2')
    import keguang.commons as commons
    import keguang.timedef as timedef
    import keguang.sql.mysqlclient as mysql
    
    def run(starttime, endtime, regx):
     tb_name = 'statistic_ad_image_final_count'
     days = timedef.getDays(starttime,endtime,regx)
     #  
     for day in days:
      print '%s  '%(day)
      mclient = getConn()
      sql = '''
      select 1 from %s where date = '%s' limit 1
      '''%(tb_name, day)
      print sql
      result = mclient.query(sql)
      #  , 
      while result is not ():
       sql = 'delete from %s where date = "%s" limit 50000'%(tb_name, day)
       print sql
       mclient.execute(sql)
       sql = '''
       select 1 from %s where date = '%s' limit 1
       '''%(tb_name, day)
       print sql
       result = mclient.query(sql)
      print '%s  '%(day)
      mclient.close()
    
    #  mysql  
    def getConn():
     return mysql.MysqlClient(host = '0.0.0.0', user = 'test', passwd = 'test', db= 'statistic')
    
    if __name__ == '__main__':
     regx = '%Y-%m-%d'
     yesday = timedef.getYes(regx, -1)
     starttime = '2019-08-17'
     endtime ='2019-08-30'
     run(starttime, endtime, regx)
    이상은Python이 mysql에서 천만 개의 대량의 데이터를 대량으로 삭제하는 스크립트의 상세한 내용입니다. 더 많은python이 MySQL 데이터를 삭제하는 것에 관한 자료는 저희 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기