zoukankan      html  css  js  c++  java
  • MySQL数据导出导入任务脚本

    #!/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  " % (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  " % (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  " % (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 " % (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("==================== 开始导出数据 ==================== ")        
    export_mysqldump(getdbconfig_13_105,exportdbconfig_exp)
    print_log("==================== 数据导出完毕 ==================== ")
     

    # 把 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 ==================== ")
    import_from_mysqldump(mysqldump_datastruc_list,importdbconfig_13_106)
    print_log("==================== 导入数据到 10.30.13.106 完毕 ==================== ")

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


     

  • 相关阅读:
    219. Contains Duplicate II
    189. Rotate Array
    169. Majority Element
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    118. Pascal's Triangle
    88. Merge Sorted Array
    53. Maximum Subarray
    CodeForces 359D Pair of Numbers (暴力)
  • 原文地址:https://www.cnblogs.com/liang545621/p/7594881.html
Copyright © 2011-2022 走看看