#!/usr/bin/env python
#-*- encoding: utf8 -*-

import time
import os
import mysql.connector

#定义一些全局变量  
work_dir="/data1/dbacrontab/tmptranfiles/"
mysqldump_data_list=[]
mysqldump_struc_list=[]
mysqldump_datastruc_list=[]
mysqldump_config_list=[]

# 此函数用来打印输出日志        
def print_log(mylogprint):
    my_log_day = time.strftime("%Y-%m-%d")
    my_log_time = time.strftime("%Y-%m-%d %H:%M:%S")
    my_log_file = work_dir+'log_'+my_log_day+'.log'
    with open(my_log_file,"aw") as f:
        f.write(my_log_time+' '+mylogprint)

# 此函数用来导出数据
def export_mysqldump(getdbconfig,exportdbconfig):
    # status='1'表示此表需要导出,status='0'表示此表不需要导出。
    # export_data='1'表示导出数据和结构,export_data='0'表示不导出数据,只导出结构。
    sql_export_data = "select distinct  ALIAS,SCHEMA_NAME,TABLE_NAME,export_data,status,1_133_status as status_1_133  from dbaconfig.cf_export_tables "
    cnn = mysql.connector.connect(**getdbconfig)    
    cursor = cnn.cursor()
    cursor.execute(sql_export_data)
     
    export_user=exportdbconfig['user']
    export_password=exportdbconfig['password']
    export_port=exportdbconfig['port']
                
    for (ALIAS,SCHEMA_NAME,TABLE_NAME,export_data,status,status_1_133) in cursor:                                    
        mysqldump_name=work_dir+ALIAS+'-'+SCHEMA_NAME+'-'+TABLE_NAME+'.sql'                     
        ifexport_data=str(export_data)
        ifstatus=str(status)
        ifstatus_1_133=str(status_1_133)
       
        # 导出数据和结构
        if ifstatus == '1' and ifexport_data == '1':
            mysqldump_nodata= " "
            mysqldumcmd="mysqldump -h%s   -u%s -p%s -P%s --replace %s  --single-transaction --skip-add-locks --complete-insert %s %s  > %s " % (ALIAS,export_user,export_password,export_port,mysqldump_nodata,SCHEMA_NAME,TABLE_NAME,mysqldump_name)
            os.system(mysqldumcmd)
            mysqldump_data_list.append(mysqldump_name)
            print_log("export data: from_service=%s, from_database=%s, from_table=%s  \n" % (ALIAS,SCHEMA_NAME,TABLE_NAME))
            
        # 不导出数据,只导出结构
        if ifstatus == '1' and ifexport_data == '0':
            mysqldump_nodata= "-d"
            mysqldumcmd="mysqldump -h%s   -u%s -p%s -P%s --replace %s  --single-transaction --skip-add-locks --complete-insert %s %s  > %s " % (ALIAS,export_user,export_password,export_port,mysqldump_nodata,SCHEMA_NAME,TABLE_NAME,mysqldump_name)
            os.system(mysqldumcmd)
            mysqldump_struc_list.append(mysqldump_name)
            print_log("export only structure: from_service=%s, from_database=%s, from_table=%s  \n" % (ALIAS,SCHEMA_NAME,TABLE_NAME))
            
        # 导出config_mobp2p数据库数据
        if ifstatus_1_133 == '1':
            mysqldump_nodata= " "
            mysqldumcmd="mysqldump -h%s   -u%s -p%s -P%s --replace %s  --single-transaction --skip-add-locks --complete-insert %s %s  > %s " % (ALIAS,export_user,export_password,export_port,mysqldump_nodata,SCHEMA_NAME,TABLE_NAME,mysqldump_name)
            os.system(mysqldumcmd)
            mysqldump_config_list.append(mysqldump_name)    
            print_log("export config_mobp2p data: from_service=%s, from_database=%s, from_table=%s  \n" % (ALIAS,SCHEMA_NAME,TABLE_NAME))     
 
            
# 此函数用来导入数据
def import_from_mysqldump(mysqldump_file,importdbconfig):
    import_host=importdbconfig['host']
    import_user=importdbconfig['user']
    import_password=importdbconfig['password']
    import_port=importdbconfig['port']
    
    for dumpsql in  mysqldump_file:        
        print_log("import_data: %s \n" % (dumpsql))    
        mysqlimport=" mysql -h%s -u%s -p%s -P%s mobp2p  < %s  " % (import_host,import_user,import_password,import_port,dumpsql)
        os.system(mysqlimport)

# 定义合并两个list函数
def merge_list(list_1,list_2,list_all):
    for item in list_1:
        list_all.append(item)
    for item in list_2:
        list_all.append(item)    
    return list_all

# 定义导出列表数据库相关信息,根据dbaconfig.cf_export_tables可判断要导出那些表
getdbconfig_13_105={
'host':'xxxx',
'user':'xxxx',
'password':'xxxx',
'port':'xxxx',
'database':'xxxx'
}

# 定义要导出数据库信息
exportdbconfig_exp={
'user':'xxxx',
'password':'xxxx',
'port':'xxxx',
}

# 定义要导入数据库信息
importdbconfig_13_106={
'host':'xxxx',
'user':'xxxx',
'password':'xxxx',
'port':'xxxx'
}

print_log("==================== 开始导出数据 ====================\n")        
export_mysqldump(getdbconfig_13_105,exportdbconfig_exp)
print_log("==================== 数据导出完毕 ====================\n")

# 把 mysqldump_data_list 、 mysqldump_struc_list 两个列表合并成 mysqldump_datastruc_list 一个列表
merge_list(mysqldump_data_list,mysqldump_struc_list,mysqldump_datastruc_list)

# 根据列表 mysqldump_datastruc_list 内容,导入数据到 importdbconfig_13_106
print_log("==================== 开始导入数据到 10.30.13.106 ====================\n")
import_from_mysqldump(mysqldump_datastruc_list,importdbconfig_13_106)
print_log("==================== 导入数据到 10.30.13.106 完毕 ====================\n")

# 根据列表 mysqldump_config_list 内容,导入数据到 importdbconfig_13_106
print_log("==================== 开始导入config_mobp2p数据库数据到 10.30.13.106 ====================\n")
import_from_mysqldump(mysqldump_config_list,importdbconfig_13_106)
print_log("==================== 导入数据到 10.30.13.106 完毕 ====================\n")

MySQL数据导出导入任务脚本的更多相关文章

  1. MySQL数据导出导入【转】

    MySQL基础 关于MySQL数据导出导入的文章,目的有二: 1.备忘 2.供开发人员测试 工具 mysqlmysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$US ...

  2. 关于MySQL数据导出导入

    工具 mysqlmysqldump 应用举例 导出 导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --d ...

  3. 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

  4. 涂抹mysql笔记-数据导出导入

    数据导出导入<>利用CSV存储引擎加载数据:CSV存储引擎基于CSV格式文件存储数据,CSV格式是纯文本格式的文件,以逗号分隔取值.CSV引擎表的所有列值不能为空.Excel可以直接打开有 ...

  5. Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...

  6. 【原创】SQLServer将数据导出为SQL脚本的方法

    最近很多同学问到一个问题,如何将MSSQLServer的数据库以及里面的数据导出为SQL脚本,主要问的是MSSQLServer2000和2005,因为2008的管理器已经有了这个功能,2000和200 ...

  7. [转]Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

    本文转自:http://www.cnblogs.com/wuhuacong/archive/2012/03/09/2387680.html Oracle中对数据对象和数据的管理,无疑都是使用PL/SQ ...

  8. 不同版本的SQL Server之间数据导出导入的方法及性能比较

    原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...

  9. 在sqlServer中把数据导出为insert脚本

    有时候为了把数据导出为insert脚本,不得不用一些小工具,或者通过自己写存储过程来完成这一操作.其实SqlServer本身就有这种功能.以下是详细步骤:

随机推荐

  1. Checkpoint & cache & persist

    checkpoint checkpoint(检查点)是Spark为了避免长链路,大计算量的Rdd不可用时,需要长时间恢复而引入的.主要就是将通过大量计算而获得的这类Rdd的数据直接持久化到外部可靠的存 ...

  2. mount---挂载文件系统

    挂载概念 Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”. 注意:“挂载点” ...

  3. 【hdu 3987】Harry Potter and the Forbidden Forest

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=3987 [Description] 给出一张有n个点的图,有的边又向,有的边无向,现在要你破坏一些路 ...

  4. Sublime10个经常使用插件

    10. Package control Package control是必装插件,全部其它的插件和主题都能够通过它来安装. 希望它能出如今正式版默认包中. 首先參照以下的教程来安装Package Co ...

  5. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 托管代码(.NET)

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览  托管代码(.NET)         在SP2010中,微软提 ...

  6. 使用框架的php假设使用定时服务Cronjob

    工作须要用php开发了个监控的小程序,既然是监控就须要定时运行. 之前我用的是chrome加个定时刷新的小插件,放在server上执行.也能实现,就是别扭. 通用正规的做法应该是:linux上的Cro ...

  7. 基于Redis bitmap实现开关配置功能

    作者:zhanhailiang 日期:2014-12-21 bitmap api SETBIT key offset value 对key所储存的字符串值,设置或清除指定偏移量上的位(bit). 位的 ...

  8. ADO.net简单增删改查

    嘿嘿,又到了总结了的时间,今天我们学习了ADO.net,什么是ADO.NET:ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, Sys ...

  9. MyCat中间件:读写分离(转)

    利用MyCat中间件实现读写分离 需要两步: 1.搭建MySQL主从复制环境 2.配置MyCat读写分离策略 一.搭建MySQL主从环境 参考上一篇博文:MySQL系列之七:主从复制 二.配置MyCa ...

  10. Jedis源码分析

    http://blog.csdn.net/luyee2010/article/details/17580381