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 \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”)