数据迁移[用python的2B]

  • 配置文件
    配置使用csv,俩文件,一个被备份的数据库机器ip,用户名,密码,数据名称,数据库用户,密码,数据库名称信息,称为source.csv,另一个目标数据库机器ip,用户名,密码,数据名称,数据库用户,密码,数据库名称,称为destination.csv
    如:

source.csv

 192.168.3.161, root, 123456, root, 123456, db_1

destination.csv

192.168.3.162, root, 123456, root, 123456, db_1

意思是将192.168.3.161的db1数据库迁移到192.168.3.162的db1数据库

  • 读取配置文件ReadCSV.py
def read(file):
    config_ = []
    with open(file, encoding='utf8') as f:
        f_csv = csv.reader(f)
        # headers = next(f_csv)
        for row in f_csv:
            config_.append(row)
    return config_
  • 执行远程命令SSH.py
# 返回一个字符串,单个命令,返回该命令的远程输出
def ssh(ip, user_name, pass_wd, cmd):
    result_str = ""
    try:
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(ip, 22, user_name, pass_wd, timeout=5)
        print ("执行远程命令:服务器ip:%s,命令:%s" %(ip,cmd))
        std_in, stdout, stderr = ssh_client.exec_command(cmd)
        #           stdin.write("Y")   #简单交互,输入 ‘Y’
        out = stdout.readlines()
        err = stderr.readline()
        # 屏幕输出
        for o in out:
            result_str += o
            print("remoteOut:"+o)
        # print('%s\t执行完毕\n' % ip)
        # print("result_str:"+result_str)
        ssh_client.close()
    except Exception as e:
        print('%s\tError:%s\n' % (ip, e))

    return result_str

def upload(host_ip, username, password, local_path, remote_path):
    t = paramiko.Transport((host_ip, 22))
    t.connect(username=username, password=password)  # 登录远程服务器
    sftp = paramiko.SFTPClient.from_transport(t)  # sftp传输协议
    sftp.put(local_path, remote_path)
    t.close()


def download(host_ip, username, password, remote_path, local_path):
    t = paramiko.Transport((host_ip, 22))
    t.connect(username=username, password=password)  # 登录远程服务器
    sftp = paramiko.SFTPClient.from_transport(t)  # sftp传输协议
    src = remote_path
    des = local_path
    sftp.get(src, des)
    t.close()
  • 迁移数据库DataMigration.py
__author__ = 'micocube'
# python 3.5
# DataMigration.py,SSH.py,ReadCSV.py在同一目录下
from . import SSH
from . import ReadCSV


# dump数据库
# 被备份的数据库远程服务器ip,用户名,密码,mysql用户名,密码,数据库名称
# mysqldump -B选项会生成建库语句,生成的sql文件放到/data/数据库名称.sql
def dump_data_base(ip, user_name, password, mysql_user, mysql_password, db_name):
    res_str = SSH.ssh(ip,user_name,password,"mysqldump -h" + ip + " -u" + mysql_user +" -p" + mysql_password + " -B " + db_name + " > /data/" + db_name + ".sql")
    print(res_str)


# 拷贝数据库到本地,如果直接scp的话要输入密码
# 被备份的数据库远程服务器ip,用户名,密码,数据库名称
# 数据库名称主要用来拼接sql文件名称
def copy_data(des_ip, des_user_name, des_password, db_name):
    SSH.download(des_ip, des_user_name, des_password, "/data/"+db_name + ".sql","resources/" + db_name + ".sql")


# 上传数据库文件到迁移的目标机器
# 目标远程服务器ip,用户名,密码,数据库名称
# 数据库名称主要用来拼接sql文件名称
def upload_data(des_ip, des_user_name, des_password, db_name):
    SSH.upload(des_ip, des_user_name, des_password, "resources/" + db_name + ".sql", "/data/" + db_name + ".sql")


# 导入数据库到目标机器的数据库
# logs是个空数据库,mysqldump 已经生成了建库语句,对logs数据库并无影响
# 目标远程服务器ip,用户名,密码,数据库用户名,数据库密码,数据库名称
def import_data_base(ip, user_name, password, mysql_user, mysql_password, db_name):
    res_str = SSH.ssh(ip,user_name,password,"mysql -h" + ip + " -u" + mysql_user +" -p" + mysql_password + " logs " + " < /data/" + db_name + ".sql")
    print(res_str)


def read_config():
    # 在代码目录建立了一个叫resources的文件夹,存放配置文件,
    source = ReadCSV.read("resources/source.csv")
    destination = ReadCSV.read("resources/destination.csv")
    return source,destination


if __name__ == "__main__":
    source, destination = read_config()
    for i in range(0,len(source)):
        #  被备份的数据库机器ip,用户名,密码,数据名称,数据库用户,密码,数据库名称
        # '192.168.3.161', 'root', '123456', 'root', '123456', 'db_1'
        sou = source[i]
        #  目标数据库机器ip,用户名,密码,数据名称,数据库用户,密码,数据库名称
        # '192.168.3.162', 'root', '123456', 'root', '123456', 'db_1'
        des = destination[i]
        # 将192.168.3.161的db1数据库迁移到192.168.3.162的db1数据库
        # 如果161上已经有db_1的数据库,可以远程执行mysqladmin -u**** -p*** create db_2 先建库,dump的时候不加-B选项
        dump_data_base(sou[0],sou[1],sou[2],sou[3],sou[4],sou[5])
        copy_data(sou[0], sou[1], sou[2], sou[5])
        # 删除被备份的sql
        SSH.ssh(sou[0], sou[1], sou[2], "rm -f /data/" + sou[5] + ".sql")
        upload_data(des[0], des[1], des[2], des[5])
        import_data_base(des[0], des[1], des[2], des[3], des[4], des[5])
        SSH.ssh(des[0], des[1], des[2], "rm -f /data/" + sou[5] + ".sql")
        print("source:"+str(sou) + "destination:" + str(des))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容