0

0

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

php中文网

php中文网

发布时间:2016-06-07 17:59:07

|

1218人浏览过

|

来源于php中文网

原创

需要安装 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" 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

28

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

23

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

27

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

16

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

164

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

309

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 842人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号