需要安装 python MySQL-python gzip : yum install python MySQL-python gzip -y
dump 脚本- """""
- Created on 2012-8-20
- mysql dump to load
- @author: tudou@b2c.xiaomi.com
- """
- import os,time,MySQLdb,multiprocessing
-
- mysql_bak="/tmp/mysqlbak"
- mysql_base="/opt/soft/mysql_5.5.25"
- unix_socket="/tmp/mysql.sock"
- dump_user="root"
- dump_pwd="123456"
- dump_database=["test","mysql"]
-
- def start_process():
- print ("MySQLdump starting", multiprocessing.current_process().name)
-
- class mysqldump(object):
- def __init__(self,conf):
- self.conf=conf
- self.dumpdir=mysql_bak
-
- def dump(self):
- #create dir
- self.dumpdir += "/"+str(time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime(time.time())))
- for dir in dump_database:
- os.system("mkdir -p "+self.dumpdir+"/"+dir)
- os.system("mkdir -p "+self.dumpdir+"/"+dir+"/schema")
- os.system("chmod 777 -R "+self.dumpdir)
- #get create table
- for dir in dump_database:
- self.getschemainfo(dir)
- #dump per table
- self.getdbinfo()
-
- def getschemainfo(self,dbconf):
- 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" )
- os.system("gzip "+self.dumpdir+"/"+dbconf+"/schema/schemainfo")
- os.system(mysql_base+"/bin/mysqldump -tdRE -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" "+dbconf+" > "+self.dumpdir+"/"+dbconf+"/schema/objectinfo" )
- os.system("gzip "+self.dumpdir+"/"+dbconf+"/schema/objectinfo")
-
- def getdbinfo(self):
- con=db(self.conf)
- sql="SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_SCHEMA IN (""+ "","".join(dump_database) +"")"
- re = list(con.execute(sql))
- #inputs=list()
- pool_size = multiprocessing.cpu_count()
- pool = multiprocessing.Pool(processes=pool_size,initializer=start_process,)
- for tb in re:
- #inputs.append({"dbname":tb[0],"tablename":tb[1]})
- pool.apply_async(self.dumplay({"dbname":tb[0],"tablename":tb[1]}))
- #self.dumplay({"dbname":tb[0],"tablename":tb[1]})
- #print inputs
- pool.close() # no more tasks
- pool.join() # wrap up current tasks
-
- def dumplay(self,dbconf):
- loadname=self.dumpdir+"/"+dbconf["dbname"]+"/"+dbconf["tablename"]+".sql"
- con=db(self.conf)
- sql="SELECT * FROM `"+dbconf["dbname"]+"`.`"+dbconf["tablename"]+"` INTO OUTFILE ""+loadname+"""
- #print sql
- con.executeNoQuery(sql)
- self.dogzip(loadname)
-
- def dogzip(self,fileconf):
- os.system("gzip "+fileconf)
-
- """""
-
- """
- class MySQLHelper(object):
- @staticmethod
- def getConn(conf):
- pot = 3306
- if(conf.has_key("port")):
- pot=conf["port"]
- dbname="test"
- if(conf.has_key("db")):
- dbname=conf["db"]
-
- if(conf.has_key("socket")):
- return MySQLdb.connect(host=conf["host"],unix_socket=conf["socket"],user=conf["user"],passwd=conf["pwd"],db=dbname)
- else:
- return MySQLdb.connect(host=conf["host"],port=pot,user=conf["user"],passwd=conf["pwd"],db=dbname)
- """""
-
- """
- class db (object):
- def __init__(self,conf):
- self.conn=None
- self.conn=MySQLHelper.getConn(conf)
-
- def execute(self,sql,mod=""):
- if(mod=="dict"):
- cursor=self.conn.cursor(MySQLdb.cursors.DictCursor)
- else:
- cursor=self.conn.cursor()
- cursor.execute(sql)
- set=cursor.fetchall()
- return set
-
- def executeNoQuery(self,sql,param={}):
- cursor=self.conn.cursor()
- try:
- if(param=={}):
- rownum=cursor.execute(sql)
- else:
- rownum=cursor.executemany(sql,param)
- self.conn.commit()
- return rownum
- finally:
- cursor.close()
-
- def __del__(self):
- if (self.conn!=None):
- self.conn.close()
-
- if __name__ == "__main__":
- conf={"host":"localhost","socket":unix_socket,"user":dump_user,"pwd":dump_pwd,"db":"information_schema"}
- dump=mysqldump(conf);
- dump.dump();
- print "dump success"
load 脚本- """""
- Created on 2012-8-20
- mysql dump to load
- @author: tudou@b2c.xiaomi.com
- """
- import os,MySQLdb,multiprocessing
-
- mysql_bak="/tmp/mysqlbak/2012-09-18-21-44-34"
- mysql_base="/opt/soft/mysql_5.5.25"
- unix_socket="/tmp/mysql.sock"
- dump_user="root"
- dump_pwd="123456"
- dump_database={"test":"test"}#dump_database={"test":"test","mysql":"mysql"}
-
- def start_process():
- print ("MySQLinput starting", multiprocessing.current_process().name)
- #input shcema
- #load data
- #input object
- class mysqlinput(object):
- def __init__(self,conf):
- self.conf=conf
-
- def input(self):
- os.system("chmod 777 -R "+mysql_bak)
- dirnames=os.listdir(mysql_bak)
- for dirname in dirnames:
- #print dirname
- if dump_database.has_key(dirname):
- self.inputschema(dirname)
-
- for dirname in dirnames:
- if dump_database.has_key(dirname):
- self.loadata(dirname)
-
- for dirname in dirnames:
- if dump_database.has_key(dirname):
- self.inputobject(dirname)
-
- def inputschema(self,dbconf):
- print "gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/schemainfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p****** -S"+unix_socket
- os.system("gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/schemainfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" "+dbconf)
-
- def loadata(self,dbconf):
- pool_size = multiprocessing.cpu_count()
- pool = multiprocessing.Pool(processes=pool_size,initializer=start_process,)
- filenames=os.listdir(mysql_bak+"/"+dbconf)
- for filename in filenames:
- filepath=mysql_bak+"/"+dbconf+"/"+filename
- if os.path.isfile(filepath):
- fileconf={"dbname":dbconf,"gzfile":filepath,"filename":filepath,"tablename":filename[0:len(filename)-4]}
- c=fileconf["gzfile"]
- if c[len(c)-3:len(c)]==".gz":
- fileconf={"dbname":dbconf,"gzfile":filepath,"filename":filepath[0:len(filepath)-3],"tablename":filename[0:len(filename)-7]}
- pool.apply_async(self.mygunzip(fileconf))
-
- pool.close() # no more tasks
- pool.join() # wrap up current tasks
-
- def mygunzip(self,fileconf):
- c=fileconf["gzfile"]
- if c[len(c)-3:len(c)]==".gz":
- os.system("gunzip "+fileconf["gzfile"])
-
- self.loadpertable(fileconf)
-
- def loadpertable(self,fileconf):
- sql="TRUNCATE `"+fileconf["dbname"]+"`.`"+fileconf["tablename"]+"`;LOAD DATA INFILE ""+fileconf["filename"]+"" INTO TABLE `"+fileconf["dbname"]+"`.`"+fileconf["tablename"]+"`;"
- print sql
- os.system(mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" -e""+sql+""")
-
- def inputobject(self,dbconf):
- print "gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/objectinfo.sql.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p****** -S"+unix_socket
- os.system("gunzip -cd "+mysql_bak+"/"+dbconf+"/schema/objectinfo.gz | "+mysql_base+"/bin/mysql -u"+dump_user+" -p"+dump_pwd+" -S"+unix_socket+" "+dbconf)
-
- if __name__ == "__main__":
- conf={"host":"localhost","socket":unix_socket,"user":dump_user,"pwd":dump_pwd,"db":"information_schema"}
- input=mysqlinput(conf);
- input.input();
- print "load success"
Oracle with子句MySQL保存中文乱码的原因和解决办法相关资讯 MySQL基础知识
- MySQL增加普通用户后无法登陆问题 (12/15/2012 19:35:24)
- MySQL连接查询精解 (12/11/2012 09:19:27)
- MySQL备份与恢复的三种方法总结 (12/05/2012 12:15:32)
| - MySQL 多表 update sql语句总结 (12/11/2012 09:52:37)
- Ubuntu下更改MySQL数据库文件的目 (12/08/2012 21:29:31)
- MySQL游标循环示例 (12/05/2012 07:05:56)
|
本文评论 查看全部评论 (0)