天天看点

批量备份,删除MySQL表(python脚本)

                                       批量备份,删除MySQL表(python脚本)

#!/usr/bin/env python

#coding=utf-8

#本脚本主要用来批量删除以RBCN开头命名,以数字结尾的表。先找出此类表,备份,远程拷贝(由于本主机的空间不足),删除本地备份文件,删除库表。

#引入MySQL模块

import MySQLdb

#引入re(正则表达式)模块

import re

#引入os模块(执行系统命令)

import os

#引入pexpect模块(可以实现通过ssh,ftp等程序自动交互)

import pexpect

#指定连接MySQL实例的账户,密码,字符集,及备份目录

User = 'root'

Passwd = '123456'

Db = 'db_test'

Charset = 'gbk'

Cmd = '/usr/bin/mysqldump'

Path = '/tmp/'

#指定关于远程拷贝的相关主机,密码,目录等

Scp_Path = '/usr/bin/scp'

Remote_Host = '172.31.x.x'

Remote_User = 'root'

Remote_Passwd = '123456'

Remote_Path = '/mnt/data/mysqlbackup/table_backup/'

#创建一个连接对象

con = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="123456", db="db_test")

#创建游标,所有的查询,都在连接con的一个模块cursor上面运行的

cursor = con.cursor()

#查看数据库中存在的表名

sql = "SHOW TABLES"

cursor.execute(sql)

#从游标中取出所有记录放入一个元组序列

results = cursor.fetchall()

#通过for循环取出元组每个元素(其还是元组)

for result in results:

    #取出每个元素的值,引用re模块的match方法做匹配,其中\A代表匹配的开始位置,\Z代表匹配的末尾位置,\d代表任意数字。

    m2 = re.match(r"\ARBCN.*\d\Z", result[0])

    #判断m2的值为真,则进行以下处理(也就是匹配到的表)

    if m2:

       print result[0]

       #取出表名

       Table_name = result[0]

       #定义备份此表

       Backup_Cmd = "%s --default-character-set=%s -u%s -p%s %s %s > %s%s" %(Cmd,Charset,User,Passwd,Db,Table_name,Path,Table_name)

       #执行备份,判断如果备份成功,做如下处理

       if os.system(Backup_Cmd) == 0:

          print 'Successful backup',result[0]

          #定义远程拷贝

          #调用pexpect的spawn模块,执行Scp_Cmd命令

          scp = pexpect.spawn(Scp_Cmd)

          #密码验证

          scp.sendline('Remote_Passwd')

          scp.read()

          scp.close()

          #删除本地备份文件

          re_file = "%s%s" %(Path,Table_name)

          os.remove(re_file)

          #删除数据库中此表 

          sql2 = "DROP TABLE %s" %(Table_name)

          cursor.execute(sql2)        

       else:

          print 'Failed'

con.close()

#author:lyk

#time:2013/07/23

#added:此脚本并不完美,如ssh的timeout时间判断,验证远程主机是否已存在备份文件,md5值验证等。本环境为线上内网,所以,,,

本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/1255172,如需转载请自行联系原作者