天天看點

批量備份,删除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,如需轉載請自行聯系原作者