首頁 >資料庫 >mysql教程 >MySQL 5.5 DBA工具 多进程dump 多进程load 多进程备份还原 Pytho

MySQL 5.5 DBA工具 多进程dump 多进程load 多进程备份还原 Pytho

WBOY
WBOY原創
2016-06-07 17:59:071081瀏覽

需要安装 python MySQL-python gzip : yum install python MySQL-python gzip -y dump 脚本 1. 2.Created on 2012-8-20 3.mysql dump to load 4.@author: tudou@b2c.xiaomi.com 5. 6.import os,time,MySQLdb,multiprocessing 7. 8.mysql_bak=/tmp/mysqlbak 9

需要安装 python MySQL-python gzip : yum install python MySQL-python gzip -y

dump 脚本

1.'''''
2.Created on 2012-8-20
3.mysql dump to load
4.@author: tudou@b2c.xiaomi.com
5.''' 
6.import os,time,MySQLdb,multiprocessing  7. 
8.mysql_bak='/tmp/mysqlbak'  9.mysql_base='/opt/soft/mysql_5.5.25'  10.unix_socket='/tmp/mysql.sock'  11.dump_user='root'  12.dump_pwd='123456'  13.dump_database=['test','mysql']  14. 
15.def start_process():  16.    print ('MySQLdump starting', multiprocessing.current_process().name)  17. 
18.class mysqldump(object):  19.    def __init__(self,conf):  20.        self.conf=conf  21.        self.dumpdir=mysql_bak  22.         
23.    def dump(self):  24.        #create dir   25.        self.dumpdir += '/'+str(time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())))  26.        for dir in dump_database:  27.            os.system('mkdir -p '+self.dumpdir+'/'+dir)  28.            os.system('mkdir -p '+self.dumpdir+'/'+dir+'/schema')  29.        os.system('chmod 777 -R '+self.dumpdir)  30.        #get create table   31.        for dir in dump_database:  32.            self.getschemainfo(dir)  33.        #dump per table   34.        self.getdbinfo()  35.     
36.    def getschemainfo(self,dbconf):  37.        os.system(mysql_base+'/bin/mysqldump -d --add-drop-table -u'+dump_user+' -p'+dump_pwd+' -S'+unix_socket+' '+dbconf+' > '+self.dumpdir+'/'+dbconf+'/schema/schemainfo' )  38.        os.system('gzip '+self.dumpdir+'/'+dbconf+'/schema/schemainfo')  39.        os.system(mysql_base+'/bin/mysqldump -tdRE -u'+dump_user+' -p'+dump_pwd+' -S'+unix_socket+' '+dbconf+' > '+self.dumpdir+'/'+dbconf+'/schema/objectinfo' )  40.        os.system('gzip '+self.dumpdir+'/'+dbconf+'/schema/objectinfo')  41.     
42.    def getdbinfo(self):  43.        con=db(self.conf)  44.        sql="SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA IN ('"+ "','".join(dump_database) +"')"  45.        re = list(con.execute(sql)) 
46.        #inputs=list()   47.        pool_size = multiprocessing.cpu_count() 
48.        pool = multiprocessing.Pool(processes=pool_size,initializer=start_process,) 
49.        for tb in re:  50.            #inputs.append({'dbname':tb[0],'tablename':tb[1]})   51.            pool.apply_async(self.dumplay({'dbname':tb[0],'tablename':tb[1]}))  52.            #self.dumplay({'dbname':tb[0],'tablename':tb[1]})   53.        #print inputs   54.        pool.close() # no more tasks   55.        pool.join()  # wrap up current tasks   56.         
57.    def dumplay(self,dbconf):  58.        loadname=self.dumpdir+"/"+dbconf['dbname']+"/"+dbconf['tablename']+".sql"  59.        con=db(self.conf)  60.        sql="SELECT * FROM `"+dbconf['dbname']+"`.`"+dbconf['tablename']+"` INTO OUTFILE '"+loadname+"'"  61.        #print sql   62.        con.executeNoQuery(sql) 
63.        self.dogzip(loadname)  64.         
65.    def dogzip(self,fileconf):  66.        os.system('gzip '+fileconf)  67.         
68.''''' 69.
70.''' 
71.class MySQLHelper(object):  72.    @staticmethod 
73.    def getConn(conf):  74.        pot = 3306  75.        if(conf.has_key('port')):  76.            pot=conf['port']  77.        dbname='test'  78.        if(conf.has_key('db')):  79.            dbname=conf['db']  80.         
81.        if(conf.has_key('socket')):  82.            return MySQLdb.connect(host=conf['host'],unix_socket=conf['socket'],user=conf['user'],passwd=conf['pwd'],db=dbname)  83.        else:  84.            return MySQLdb.connect(host=conf['host'],port=pot,user=conf['user'],passwd=conf['pwd'],db=dbname)  85.''''' 86.
87.''' 
88.class db (object):  89.    def __init__(self,conf):  90.        self.conn=None  91.        self.conn=MySQLHelper.getConn(conf)  92.     
93.    def execute(self,sql,mod=''):  94.        if(mod=='dict'):  95.            cursor=self.conn.cursor(MySQLdb.cursors.DictCursor)  96.        else:  97.            cursor=self.conn.cursor()  98.        cursor.execute(sql) 
99.        set=cursor.fetchall() 
100.        return set  101.     
102.    def executeNoQuery(self,sql,param={}):  103.        cursor=self.conn.cursor()  104.        try:  105.            if(param=={}):  106.                rownum=cursor.execute(sql) 
107.            else:  108.                rownum=cursor.executemany(sql,param) 
109.            self.conn.commit()  110.            return rownum  111.        finally:  112.            cursor.close() 
113.     
114.    def __del__(self):  115.        if (self.conn!=None):  116.            self.conn.close()  117.             
118.if __name__ == '__main__':  119.    conf={'host':'localhost','socket':unix_socket,'user':dump_user,'pwd':dump_pwd,'db':'information_schema'}  120.    dump=mysqldump(conf); 
121.    dump.dump(); 
122.    print "dump success" 
load 脚本

1.'''''
2.Created on 2012-8-20
3.mysql dump to load
4.@author: tudou@b2c.xiaomi.com
5.''' 
6.import os,MySQLdb,multiprocessing  7. 
8.mysql_bak='/tmp/mysqlbak/2012-09-18-21-44-34'  9.mysql_base='/opt/soft/mysql_5.5.25'  10.unix_socket='/tmp/mysql.sock'  11.dump_user='root'  12.dump_pwd='123456'  13.dump_database={'test':'test'}#dump_database={'test':'test','mysql':'mysql'}   14. 
15.def start_process():  16.    print ('MySQLinput starting', multiprocessing.current_process().name)  17.#input shcema   18.#load data   19.#input object   20.class mysqlinput(object):  21.    def __init__(self,conf):  22.        self.conf=conf  23.         
24.    def input(self):  25.        os.system('chmod 777 -R '+mysql_bak)  26.        dirnames=os.listdir(mysql_bak) 
27.        for dirname in dirnames:  28.            #print dirname   29.            if dump_database.has_key(dirname):  30.                self.inputschema(dirname)  31.                         
32.        for dirname in dirnames:  33.            if dump_database.has_key(dirname):  34.                self.loadata(dirname)  35. 
36.        for dirname in dirnames:  37.            if dump_database.has_key(dirname):  38.                self.inputobject(dirname)  39.         
40.    def inputschema(self,dbconf):  41.        print "gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/schemainfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p****** -S"+unix_socket  42.        os.system("gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/schemainfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" "+dbconf)  43.         
44.    def loadata(self,dbconf):  45.        pool_size = multiprocessing.cpu_count() 
46.        pool = multiprocessing.Pool(processes=pool_size,initializer=start_process,) 
47.        filenames=os.listdir(mysql_bak+"/"+dbconf)  48.        for filename in filenames:  49.            filepath=mysql_bak+"/"+dbconf+"/"+filename  50.            if os.path.isfile(filepath):  51.                fileconf={'dbname':dbconf,'gzfile':filepath,'filename':filepath,'tablename':filename[0:len(filename)-4]}  52.                c=fileconf['gzfile']  53.                if c[len(c)-3:len(c)]=='.gz':  54.                    fileconf={'dbname':dbconf,'gzfile':filepath,'filename':filepath[0:len(filepath)-3],'tablename':filename[0:len(filename)-7]}  55.                pool.apply_async(self.mygunzip(fileconf))  56.                 
57.        pool.close() # no more tasks   58.        pool.join()  # wrap up current tasks   59.         
60.    def mygunzip(self,fileconf):  61.        c=fileconf['gzfile']  62.        if c[len(c)-3:len(c)]=='.gz':  63.            os.system("gunzip "+fileconf['gzfile'])  64.             
65.        self.loadpertable(fileconf)  66.         
67.    def loadpertable(self,fileconf):  68.        sql="TRUNCATE \`"+fileconf['dbname']+"\`.\`"+fileconf['tablename']+"\`;LOAD DATA INFILE '"+fileconf['filename']+"' INTO TABLE \`"+fileconf['dbname']+"\`.\`"+fileconf['tablename']+"\`;"  69.        print sql  70.        os.system(mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" -e\""+sql+"\"")  71.     
72.    def inputobject(self,dbconf):  73.        print "gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/objectinfo.sql.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p****** -S"+unix_socket  74.        os.system("gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/objectinfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" "+dbconf)  75.             
76.if __name__ == '__main__':  77.    conf={'host':'localhost','socket':unix_socket,'user':dump_user,'pwd':dump_pwd,'db':'information_schema'}  78.    input=mysqlinput(conf); 
79.    input.input(); 
80.    print "load success" 
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn