摘要 在上一篇中我们介绍了数据迁移的套路,但是没有介绍具体的方案,这篇着重介绍下具体的数据迁移方案 一. 设计目标 设计一个数据迁移的方案,需要实现以下目标 迁移速度 qps 需要达到1k,这样能保证1亿的数据能够在1~2天内跑完 迁移qps可控 迁移有可能对线上服务有影响,需要可动态调整qps 数据完整, 不丢失 不能遗漏数据,虽然事后我们有数据校验的过程,但是设计数据迁移方案时,需要尽可能的包装数据不丢失。 进度可控 迁移过程可中断,可重试。比如先迁移10分之一的数据,再继续来 二. 架构设计 数据迁移任务大致分为3个步骤,如下图所示 ? 可以可以将成功遍历完, 写入到任务队列的数据记录到某个存储,比如redis中,这样可以保证游标中断,或者服务重启后,可以从这个key中继续遍历,这样就实现了迁移的可中断 2.
Sqoop 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,它是Hadoop环境下连接关系数据库与Hadoop存储系统的桥梁,支持多种关系型数据源和Hive、HDFS、Hbase的相互导入 2、可以自动地完成数据类型映射与转换。导入的数据是有类型的,它可以自动根据数据库中的类型转换到Hadoop中,当然也可以自定义他们的映射关系。 2、Sqoop导出功能原理:用户输入export命令,Sqoop会获取关系型数据表结构信息,建立与Hadoop字段有关系型数据库表字段的映射关系,将命令转换为基于Map的MapReduce作用,生产很多 Sqoop版本和架构 Sqoop存在两个版本,1.4.x和1.99.x,通常简称为sqoop1和sqoop2 Sqoop1架构师使用Sqoop客户端直接提交的方式,访问方式是CLI控制台方式进行访问, Sqoop2架构引入了Sqoop Server,集中化管理Connector,提供多种访问方式,如CLI、Web UI、REST API,同时Sqoop2通过CLI方式访问会有一个交互式界面,使输入的密码信息不被看到
一 简介 Redis Input/Output Tools (RIOT) 工具是一款支持 Redis 和文件,数据库之间进行数据同步的工具,支持全量和增量同步。 RIOT 工具的增量功能是基于 Redis 的键空间消息提醒(keyspace notification)功能,通过监听 源数据库的键值数据变化事件并解析该事件为对应的命令动作,在目标端执行该命令,以便达到增量迁移 /riot --help 2.3 迁移命令 RIOT 工具支持 Redis 到 Redis ,文件和 Redis, 数据库和 Redis 之间进行数据同步迁移,本文只基于 Redis 之间的数据迁移功能 增量迁移 测试十多种数据类型,都能同步到目标端。 RIOT 工具支持作为从库实时同步数据,迁移速度还是非常快的,现有的测试环境中迁移速度可达 3w/s ,具体涉及到客户的环境,需要注意出口带宽,避免带宽比较小,导致迁移延迟。
Milvusdm (Milvus Data Migration) 是一款针对 Milvus 研发的数据迁移工具,支持 Milvus 数据传输以及数据文件的导入与导出: Faiss to Milvus: 功能介绍 在之前发布的文章 Milvus 迁移升级攻略中,我们介绍了如何将 Milvus 数据从有网环境迁移到无网环境以及不同版本 Milvus 之间的数据迁移。 数据迁移工具 milvusdm 可以通过指定 Milvus 中的集合或分区,帮助用户更智能地迁移所需数据。 你可以通过代码文件结构了解 milvusdm 工具的设计构思。如有新的数据迁移需求,你还可以通过修改源码,为社区贡献代码。 ? 本文介绍了 milvusdm 工具的使用方法和开源代码。
在工作中可能会遇到单点Redis向Redis集群迁移数据的问题,但又不能老麻烦运维来做。为了方便研发自己迁移数据,我这里写了一个简单的Redis迁移工具,希望对有需要的人有用。 本工具支持: 单点Redis到单点Redis迁移 单点Redis到Redis集群迁移 Redis集群到Redis集群迁移 Redis集群到单点Redis迁移 该工具已经编译成了多平台命令,直接从Github 迁移单个key的数据 下面就举两个例子吧,其他的都差不太多。 我这里测试过迁移近17000000万条的数据,用时40多分钟。 尾巴 使用golang写的一个比较简单的工具, 主要用于在Redis没有持久化或多套Redis向一套Redis迁移的情况下使用。 希望对大家有用,谢谢! 作者:宜信技术学院 王聪
alembic是用来做ORM模型与数据库的迁移与映射。 alembic revision --autogenerate -m "第一次提交" (6)将生成的迁移脚本映射到数据库中 alembic upgrade head 以后如果想要添加或修改模型,重复 -m:本次迁移做了哪些修改 upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数 head:代表当前的迁移脚本的版本号 downgrade:会执行指定版本的迁移文件中的 alembic upgrade head 2.FAILED:Can't locate revision identified by 'xxxxxxx' 原因:数据库中存的版本号不在迁移脚本文件中 解决办法:删除数据的alembic_version表中的数据,重新执行alembic upgrade head 1.3.current命令使用介绍 用alembic工具:数据库中会自动生成一张表
文章作者:foochane 原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDFS /HIVE sqoop数据到MySQL 1 sqoop简单介绍 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。 (image-93b332-1561888166313)] 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统; 导出数据:从Hadoop的文件系统中导出数据到关系数据库 2 sqoop安装 安装sqoop前要先安装好java环境和hadoop环境。 sqoop只是一个工具,安装在那个节点都可以,只要有java环境和hadoop环境,并且能连接到对应数据库即可。 4 Sqoop的数据导出 将数据从HDFS把文件导出到RDBMS数据库,导出前目标表必须存在于目标数据库中。默认操作是从将文件中的数据使用INSERT语句插入到表中。
exp/imp 对于数据结构的复制和同步,还是比较理想的工具。 在数据量比较小的情况下,这个工具的性能要远远好于datapump,而且重点推荐,他对于各种常用数据类型的支持还是很不错的。 有一些特性,在某种程度上要好于datapump,在做数据迁移的时候,commit特性还是很重要的。因为通过datapump碰到了很多undo空间不足带来的问题。 在使用数据量中等的数据迁移中,是比较好的方案,它有几个亮点的特性,一个就是并行,能够在数据导出导入的时候开启多个并行加速,还有direct选项,这一点上合exp没有太大的差别,个人比较喜欢的是remap 如果作为纯粹的数据的导入,还是很好的工具。 比较纳闷的是,sqlldr作为可扩展的数据导入工具,oracle为什么没有出类似sqlldr这样的数据导出工具,因为exp/expdp导出的是二进制文件,生成平面文件还是有一定的距离,在tom的网站答疑中
Win7迁移基础知识(2):USMT(用户状态迁移工具) 一、使用USMT 1、安装USMT USMT是随着Windows AIK安装的。 可以将该 USMT 整个目录复制到U盘的根目录,以便于使用U盘进行用户状态迁移。 2、远程客户端使用USMT 在已安装了 Windows AIK 的计算机上共享其 USMT 工具所在的文件夹。 \user1\> n: 二、扫描用户状态 1、扫描 示例如下: N:\>ScanState /i:migapp.xml /i:miguser.xml /genconfig:config.xml 2、 详细语法请参考官网 http://technet.microsoft.com/zh-CN/library/hh825093.aspx 2、脱机捕获 可以在Windows PE中运行ScanState (2)简化过程。可以从Windows.old迁移,方便在安装新操作系统后进行迁移。 (3)提高成功率。脱机时不会锁定文件,Windows PE还消除了对联机系统的管理员级别访问权限的需要。
以前生产环境数据库增加字段是写一个sql放入本地,到时候部署生产环境的时候先手动执行sql,在部署项目。 Flyway数据迁移工具主要是用来控制数据库增删改的版本控制,类似于git,可是相比git代码管理,他的版本控制是通过数据库当中的flyway_schema_history来控制的,这样每次部署生产环境的时候就不需要人工再去执行 characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false&serverTimezone=GMT%2B8 Create_test111_table.sql create table test111 ( ID int not null, NAME varchar(100) not null ); V2_ Add_test111.sql insert into test111 (ID, NAME) values (1, 'Axel'); insert into test111 (ID, NAME) values (2,
本文实际业务场景:需要从客户处的生成数据库(如mysql数据库)备份数据表到本地的一个sqlserver库中,将生产数据库表复制还原过来。为了快速完成数据备份操作,于是我写了个同步迁移的代码。 SHOW FULL COLUMNS FROM system_info 代码结构 主函数db_backup.py完成数据库表同库、垮库的备份、同步、迁移功能,logging_conf.py日志记录模块 代码部分 数据库备份、迁移-db_backup.py 该模块主要方法:copy_to_from_mysql和mysql_sync_to_sqlserver。 2、mysql_sync_to_sqlserver从文件复制数据到插入到目标数据库表中。 (local_data, exist_ok=True) 数据库连接和路径获取工具-tools.py import os import pymysql import pymssql from settings
Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供数据库管理与迁移支持。 自动生成迁移脚本无需考虑数据库相关操作,只需完成 ROM 中相关类的编写即可,通过 Alembic 命令即可在数据库中自动完成数据表的生成和更新。 变更数据库 Alembic 最重要的功能是自动完成数据库的迁移「变更」,所做的配置以及生成的脚本文件都是为数据的迁移做准备的,数据库的迁移主要用到 upgrade 和 downgrade 子命令。 alembic upgrade+2:相对升级,将数据库升级到当前版本后的两个版本。 alembic downgrade+2:相对降级,将数据库降级到当前版本前的两个版本。 其内置了 Click 命令行程序,在 Flask 上可直接使用命令行工具进行数据库的迁移。关于 Click 的使用请参考 Python 命令行神器 Click。
现实中,存在很多的场景,比如友商的redis数据,迁移到腾讯云,或者是本地的redis数据迁移到腾讯云。 因此,redis的数据迁移,应该使用技术上更加成熟,兼容性更高的工具来做。 这里推荐使用yunedit-redis来做redis的数据迁移,第一是它是可靠性高,采用标准的redis客户端协议,来做数据导出和导入的,不是直接复制文件,不存在版本间的兼容性问题;第二是它的速度非常快 介绍下如何通过yunedit-redis来导出导入数据吧:1、导出:比如自定义导出,有些版本的redis是不支持stream格式的,你可以选择不导出stream类型的数据:2、导入:点击导入按钮后,弹出导入策略选择界面 然选择完zip文件后,会弹出要求我们选择目标redis要导入的db, 如下图:可以看出, 比如导出db0的数据,最终可以导入到db1里,都是可以选择的。这就是专业数据迁移工具的优势。
Flyway 数据库迁移工具 它仅基于 7 个基本命令: Migrate、 Clean、 Info、 Validate、 Undo、 Baseline和 Repair。 迁移可以用SQL (支持特定于数据库的语法(如 PL/SQL、T-SQL 等))或Java (用于高级数据转换或处理 LOB)编写。 它有一个命令行客户端。 如果您在 JVM 上,我们建议使用Java API 在应用程序启动时迁移数据库。或者,您也可以使用Maven 插件 或Gradle 插件。 支持的数据库有 Oracle、 SQL Server(包括 Amazon RDS 和 Azure SQL 数据库)、 Azure Synapse(以前的数据仓库)、 DB2、 MySQL(包括 Amazon Spring Boot 集成 Flyway Spring Boot 官方提供了两款高级别的迁移工具:Flyway 和 Liquibase Flyway 集成 添加依赖 org.flywaydb:flyway-core
这个专题分享点日常运维中用到的Python脚本 在做数据库迁移后,我们可能需要知道我们的表,索引,存储过程等对象是否迁移成功 这时可以用如下脚本来进行检查 ---- 环境准备 操作系统: Windows ---- 2. 保存源库和目标库信息至文件 将源端的的信息保存在migrate_from.txt文件中 将目标库的信息保存在migrate_to.txt文件中 注意:最后一行时不要换行 ? append(k.strip().replace('\t',' ')) print ("未迁移过来的对象\n") for j in diff2: if j not in diff1: print(j+'\n') print ("迁移后多余的对象\n") for l in diff1: if l not in diff2: print( l+'\n') 注意一些索引和lob段迁移前后名称会不同 这时可以通过查询其主表是否相同来判断是否迁移成功 select * from dba_lobs where owner='IBIS'; select * from
本文给大家列举一些常见的数据迁移工具清单,供大家参考。其他未列举的工具大家也可以留言补充。 1 原生静态迁移工具-如mysqldump 导出数据,导入用source或者mysql -e < xxx.sql 2 datax https://github.com/alibaba/DataX web www.cnblogs.com/softidea/p/12897530.html https://blog.csdn.net/wudufeng/article/details/78688240 4 dm tidb的迁移工具 5 mysql workbeach mysql workbeach自带数据迁移模块,支持常见几种数据库迁移至mysql。 6 flinkcdc、SeaTunnel 大数据相关产品,支持迁移的种类比较多。
老系统或其他系统使用的数oracle数据库,现在使用新系统,需要使用mysql数据库。但是之前数据也要迁移过来。那么这种请求下怎么办呢?我们可以使用kettle来进行数据迁移。 1:使用工具【pdi-ce-7.1.0.0-12】 一: kettle安装及运行 kettle官网下载地址,下载完毕后大概有800多m ? 2 数据库连接 将数据从oracle迁移到mysql,需要先在kettle中建立oracle和mysql数据库连接,注意mysql-connector-java-5.1.45.jar和ojdbc14- 3 最基本的导数据 导入数据的基本流程如下图,可以分为三个步骤,首先建立源数据库和目标数据库的连接,然后建立源数据表和目标数据表的映射关系,最后建立作业任务,执行。 ? 3.1 建立DB连接 这个在上面第2章已经将做如何配置了。
CloudCanal 是一款数据迁移同步工具,提供友好的可视化操作界面,支持多种数据源间的数据迁移、数据同步、结构迁移、数据校验。 准备数据 使用 Percona 公司提供工具来随机生成数据,github 地址:https://github.com/Percona-Lab/mysql_random_data_load/releases 执行以下命令下载并解压工具。 ` blob, `tcol43` blob, `tcol44` blob, `tcol45` blob, PRIMARY KEY (`id`) ) ENGINE=InnoDB; 使用工具持续往源库插入 CloudCanal和Canal的区别 CloudCanal社区版高可用部署教程 CloudCanal社区版docker版安装(Linux/MacOS) 5分钟搞定 MySQL 到 MySQL "异构"在线数据迁移同步
需求背景 一个数据同步的经典场景:MySQL Binlog日志可以通过MaxWell、Canal等工具同步,但是离线数据特别是大批量的数据怎么同步呢? 这里就可以用到Sqoop(类似工具DataX等),在传统数据库和Hadoop生态存储系统之间的数据迁移,这是一个非常好用的工具。 产品目标 完成离线数据迁移,拉取业务数据库数据。 版本选择 Sqoop-1.4.6 JDK-1.8 MySQL-5.7 Hadoop-2.6.0 概述 Sqoop是Hadoop生态数据存储系统和传统关系型数据库之间进行数据传输的一种工具,其主要特点包含 虽然HDFS读取数据的MapReduce作业大多根据所处理文件的数量和大小来选择并行度(Map任务的数量),但Sqoop的导出工具允许用户明确设定任务的数量。 所以:当前场景下我们要同步业务库历史数据到Hive或HBase的时候,是可以直接使用Sqoop来完成迁移,效率还是能满足当前的业务需求的。
概述 使用数据库迁移工具可以将数据库结构和数据很容易的在不同的数据库之间管理迁移。 在以前,为了实现程序安装,你可能会导出一份 SQL 文件,安装时,用程序解析这个 SQL 文件,执行里面的语句,这样做有诸多的局限性,但现在使用数据库迁移工具,你可使用一个强大的类库API来创建数据库结构和记录 Phinx 可以让开发者简洁的修改和维护数据库。它避免了人为的手写 SQL 语句,它使用强大的 PHP API 去管理数据库迁移。开发者可以使用版本控制管理他们的数据库迁移。 Phinx 可以方便的进行不同数据库之间数据迁移。还可以追踪到哪些迁移脚本被执行,开发者可以不再担心数据库的状态从而更加关注如何编写出更好的系统。 你可以用这个命令来看哪些脚本被运行过了 $ php webman migrations:status -e development 当所有脚本都已经执行(up)该命令将退出并返回 0 1:至少有一个回滚过的脚本(down) 2: