当前位置: 首页 > news >正文

MySQL、Redis通过Python脚本进行资源迁移

        MySQL迁移,需要注意从低版本mysql迁移到高版本mysql,collation和charset的变化。

def databaseMove(srcDatabase,targetDatabase):
    try:
        src_conn=pymysql.connect(**srcDatabase)
        target_conn=pymysql.connect(**targetDatabase)
        with src_conn.cursor() as src_cur,target_conn.cursor() as target_cur:
            src_cur.execute("show tables")
            tables=src_cur.fetchall()
            for (tableName,) in tables:
                #复制表结构
                src_cur.execute(f"show create table `{tableName}`")
                create_table_sql=src_cur.fetchone()[1]
                target_cur.execute(f"drop table if exists `{tableName}`")

                target_cur.execute(create_table_sql)
                #复制表数据
                src_cur.execute(f"select * from `{tableName}`")
                rows=src_cur.fetchall()

                columns = ', '.join([f"`{desc[0]}`" for desc in src_cur.description])
                placeholders=', '.join(['%s']*len(src_cur.description))
                insert_sql=f"insert into `{tableName}` ({columns}) values ({placeholders})"
                for row in rows:
                    target_cur.execute(insert_sql,row)
                print(f"{tableName} migrated successfully.")
            target_conn.commit()
    except Exception as e:
        print(f"Error:{e}")
    finally:
        src_conn.close()
        target_conn.close()

        Redis,Redis的迁移只要使用migrate函数就行了。

def databasemove():
    for src_db in range(1, max_db_index):
        #获取原始数据库的所有键值对
        target_db=src_db
        source_redis = redis.StrictRedis(
        host=src_host,
        port=src_port,
        password=src_password,
        db=src_db,
        decode_responses=True
        )
        keys = []
        cursor = 0
        while True:
            cursor, keys = source_redis.scan(cursor=cursor, match='*',count=1000)
            for key in keys:
                try:
                    source_redis.migrate(
                    host=target_host,
                    port=target_port,
                    keys=key,
                    destination_db=target_db,
                    timeout=timeout,
                    copy=True,
                    replace=True,
                    auth=target_password
                    )
                    print(f"Successfully migrated key: {key}")
                except Exception as e:
                    print(f"Error migrating key {key}: {e}")
            if cursor == 0:
                break
        print("Data migration completed.")

相关文章:

  • 嵌入式2-按键
  • 鸿蒙初学者学习手册(HarmonyOSNext_API14)_UIContext(@ohos.arkui.UIContext (UIContext))
  • 代码随想录二刷|图论9
  • XEngine Kit
  • 统计字符(字符串)(gets与fgets的区别)
  • 深入理解Spring Boot Starter及如何自定义Starter
  • C++类对象创建全解析:从构造函数到内存管理
  • C++Primer学习(6.7 函数指针——难!)
  • Centos固定IP配置
  • 搜广推校招面经四十七
  • NaViT:训练任意分辨率和长宽比的 ViT
  • springboot新手入门搭建项目
  • 2025-3-13 leetcode刷题情况(贪心算法--区间问题)
  • Unity AI 技术浅析(三):智能代理(Agents)
  • 破解“光伏+储能+充电”一体化难题!安科瑞全方案打造智慧能源新标杆
  • RocketMQ面试题:进阶部分
  • Java开发第一坑:记一次MySQL ON DUPLICATE KEY UPDATE影响行数异常排查:从现象到解决的全过程
  • 【资料分享】标准规范汇总(2025.3.13更新)
  • 工程化与框架系列(32)--前端测试实践指南
  • 使用PHP进行自动化测试:工具与策略的全面分析
  • seo高手培训/seo快速入门教程
  • html国外网站源码/百度搜索引擎入口登录
  • 职业生涯规划大赛怎么准备/5g网络优化
  • ps建设网站步骤/永州网络推广
  • 河南春辉建设集团官方网站/优化师助理
  • 湖南企业做网站/sem竞价推广托管