首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >datax实现mysql数据同步

datax实现mysql数据同步

作者头像
全栈程序员站长
发布于 2022-08-30 00:59:24
发布于 2022-08-30 00:59:24
4.7K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

前言

DataX 是阿里内部广泛使用的离线数据同步工具/平台,可以实现包括 MySQL、Oracle、HDFSHive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github

git地址:https://github.com/alibaba/DataX

特性简介

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

使用场景

通常是在服务暂停的情况下,短时间将一份数据从一个数据库迁移至其他不同类型的数据库

优点:

  • 提供了数据监控
  • 丰富的数据转换功能,可以重新定制Reader,Writer插件实现数据脱敏,补全,过滤等数据转换功能
  • 可以在配置文件中配置精确的速度控制
  • 强劲的同步性能,支持多线程操作,可以快速迁移数据
  • 健壮的容错机制,支持线程重试等机制,可以保证迁移过程稳定执行

缺点:

数据一致性问题。这个工具强烈建议在服务暂停或者禁止执行写操作的情况下使用。如果在迁移的过程中还有写操作的话,这些增量数据无法实时从源数据库同步到目的数据库,无法保证迁移前后数据一致性。

前置准备

在上面的github地址中找到安装包,下载并上传到服务器指定目录

上传到服务器指定目录后进行解压即可,同时需要确保服务器安装了python环境,python的版本应大于2.6

目录简介

  • bin ,主要包括3个跟任务启动相关的python脚本
  • conf , 任务运行时的核心配置文件,以及日志输出的配置文件
  • lib , 任务运行过程中依赖的jar包
  • log ,存放日志的位置
  • job , 存放使用者自定义读取和写出数据源的配置文件的位置
  • plugin , 读取输入数据以及写出数据时各类异构数据源解析器的位置

更详细的参考github官方解释

使用datax进行异构数据从源头数据源写出到目标数据源步骤是固定的,官方支持的不同数据源之间的互相写入写出有很多种,理论上互相之间都是可以的,可以参考“文档”那一栏的读写进行配置即可

使用案例一:MySql到MySql数据同步

1、在job目录下新增配置文件,格式以 .json结尾

比较好的做法是,从git上拷贝官方提供的模板配置文件,然后结合实际的业务情况,修改源地址连接信息,表,字段等,以及目标地址信息,表,字段等,最后将配置文件上传到 job目录下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
   
    "job": { 
   
        "setting": { 
   
            "speed": { 
   
                 "channel": 3
            },
            "errorLimit": { 
   
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            { 
   
                "reader": { 
   
                    "name": "mysqlreader",
                    "parameter": { 
   
                        "username": "root",
                        "password": "root",
                        "column": [
                            "id",
                            "name"
                        ],
                        "connection": [
                            { 
   
                                "table": [
                                    "user_info"    #表名
                                ],
                                "jdbcUrl": [
     "jdbc:mysql://IP1:3306/shop001"			#源地址
                                ]
                            }
                        ]
                    }
                },
               "writer": { 
   
                    "name": "streamwriter",
                    "parameter": { 
   
                        "print":true,	#开启任务运行过程中的打印
	       "column": [
                        "id","name"		#待同步的字段
	         ], 
	    "connection": [
                            { 
   
                                "jdbcUrl": "jdbc:mysql://IP2:3306/shop001", 		#目标地址
                                "table": ["user_info_copy"]		#目标表
                            }
                        ], 
                        "password": "root", 
                        "username": "root"
                    }
                }
            }
        ]
    }
}

2、上传上面的配置文件到job目录

或者直接在job目录下创建配置文件进行修改,不建议这么做,配置参数复杂的话容易搞错,配置文件编写完毕后,最好找个可以格式化的地方,检查下配置文件是否是正确的json形式

3、在shop001数据库下创建2张表

这个工作可以提前做好,给源表user_info插入一条数据,两个表基本相同,我们的目标是通过上面的配置运行job后,将user_info的数据同步到 user_info_copy中去

4、启动并运行任务

进入到datax主目录下,使用下面的命令运行同步任务,看到下面运行完毕的日志后,可以去观察user_info_copy表数据是否同步成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/datax.py job/mysql2sql.json

使用案例二:本地CSV文件到MySql数据同步

1、提前准备一个csv文件

并上传到服务器指定目录下

2、和上面同步mysql数据一样,提供一个job的配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
   
    "job": { 
   
        "content": [
            { 
   
                "reader": { 
   
                    "name": "txtfilereader", 
                    "parameter": { 
   
                    "path": ["/usr/local/soft/datax/datax/job/test.csv"], 
                    "encoding":"utf-8",
                        "column": [
                            { 
   
                                "index": 0,
                                "type": "string"
                            },
                            { 
   
                                "index": 1,
                                "type": "string"
                            },
                            { 
   
                                "index": 2,
                                "type": "string"
                            }
                        ],
                    "skipHeader": "true"
                    }
                }, 
                "writer": { 
   
                    "name": "mysqlwriter", 
                    "parameter": { 
   
                        "column": [
                            "id",
                            "name",
                            "city"
                        ], 
                        "connection": [
                            { 
   
                               "jdbcUrl": "jdbc:mysql://IP:3306/shop001?useUnicode=true&characterEncoding=utf8", 
                               "table": ["boss_info"]
                            }
                        ], 
                        "password": "root", 
                        "username": "root",
                        "preSql":[""],
                        "session":["set session sql_mode='ANSI'"],
                        "writeMode":"insert"
                    }
                }
            }
        ], 
        "setting": { 
   
            "speed": { 
   
                "channel": "1"
            }
        }
    }
}

3、在shop001数据库下创建一张boss_info的表

注意字段类型要和上面的配置文件中csv中指定的字段类型一致

最后执行启动job的命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/datax.py job/csv2mysql.json

注意点:reader中定义的字段类型需要和目标表中的字段类型保持一致

使用案例三:mysql同步数据到mongodb

从mysql同步数据到mongodb 也是实际业务中一种比较常见的场景,这里直接贴出核心的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  { 
   
  "job": { 
   
  "setting": { 
   
      "speed": { 
   
          "channel": 2
      }
  },
  "content": [
      { 
   
          
	"reader": { 
   
                    "name": "mysqlreader",
                    "parameter": { 
   
                        "username": "root",
                        "password": "root",
                        "column": [
                            "id",
                            "name"
                        ],
                        "connection": [
                            { 
   
                                "table": [
                                    "user_info"  
                                ],
                                "jdbcUrl": [
     "jdbc:mysql://IP:3306/shop001"			
                                ]
                            }
                        ]
                    }
                },


          "writer": { 
   
              "name": "mongodbwriter",
              "parameter": { 
   
                  "address": [
                      "127.0.0.1:27017"
                  ],
                  "userName": "root",
                  "userPassword": "123456",
	  "dbName": "mydb"
                  "collectionName": "mydb",
                  "column": [
                      { 
   
                          "name": "id",
                          "type": "string"
                      },
                      { 
   
                          "name": "name",
                          "type": "string"
                      }
                  ],
  				"upsertInfo": { 
   
  					"isUpsert": "true",
  					"upsertKey": "id"
  				}
              }
          }
      }
  ]
  }
  }

在mysql的user_info表中提前插入了一条数据

同样,需要在mongodb中创建相关的 DB,Collection以及授权的账户和密码,这里我们预先在mydb这个collection中插入了一条数据

执行下面的命令开始进行数据同步

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/datax.py job/mysql2mongo.json

任务执行完毕后,我们再次去查看 mydb这个 collection下的数据,可以看到,mysql中的那条数据就被同步过来了

使用案例四:mongodb同步数据到mysql

我们将上面的顺序调换下,贴出下面的核心配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
   
    "job": { 
   
        "content": [
            { 
   
                "reader": { 
   
                    "name": "mongodbreader",
                    "parameter": { 
   
                        "address": ["IP:27017"],
	       "dbName": "mydb",
                        "collectionName": "mydb",
	       "userName": "root",
                       "userPassword": "123456",
                        "column": [
                            { 
   
                                "name":"id",
                                "type":"string"
                            },
                            { 
      "name":"name",
                                "type":"string"
                            }
                        ],
                        "dbName": "mydb"
                    }
                },
                "writer": { 
   
                    "name": "mysqlwriter",
                    "parameter": { 
   
                        "column": ["id","name"],
                        "connection": [
                            { 
   
                                "jdbcUrl": "jdbc:mysql://IP:3306/shop001",
                                "table": ["user_info"]
                            }
                        ],
                        "password": "root",
                        "username": "root",
                        "writeMode": "insert"
                    }
                }
            }
        ],
        "setting": { 
   
            "speed": { 
   
                "channel": "1"
            }
        }
    }
}

将上面的配置文件上传到job目录下,同时在执行同步任务之前,先清空mysql的user_info表数据

然后执行下面的同步任务命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/datax.py job/mongo2mysql.json

看到下面执行成功的日志后,去mysql的表看看是否同步成功

使用过程中的坑

小编在初次使用的时候,比如使用案例一中的执行任务命令执行编写的配置文件之后,报出下面的错误

出现这个问题的原因在于,plugin中存在各种读取和写入使用的组件,即reader和writer

这些reader和writer会解析你的配置文件,只有正确被解析,才能完成数据的同步,这里的解决办法是,分别进入到reader 和 writer两个目录下,删掉那些 “._” 开头的文件

而这些文件是隐藏的,直接使用 ll 或者 ls 是看不到的,需要执行 ls -al 命令查看隐藏文件

找到这些隐藏文件之后,进行删除,删除完毕后再次执行任务就可以成功了,关于这一点,网上大多数关于使用datax的教程中并没有提到,希望看到的同学们可以避开这个坑

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145270.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
异构数据源同步之数据同步 → DataX 使用细节
里面讲到了 DataX 的概况、框架设计、核心架构、插件体系、核心优势,由阿里出品,并在阿里内部被广泛使用,其性能、稳定都是经过了严格考验的。得益于它的框架设计
青石路
2024/06/05
2.4K0
异构数据源同步之数据同步 → DataX 使用细节
使用 DataX 实现 MySQL 数据的高效同步
本周赠书《性能之巅》第2版 我们公司有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用 SQL 来进行同步。当时的打算是通过 mysqldump 或者存储的方式来进行同步,但是尝试后发现这些方案都不切实际: mysqldump:不仅备份需要时间,同步也需要时间,而且在备份的过程,可能还会有数据产出(也就是说同步等于没同步) 存储方式:这个效率太慢了,要是数据量少还好,我们使用这个方式的时候,三个小时才同步两千条数据… 后面在网上查看后,发现 DataX 这
程序猿DD
2022/07/18
4.4K0
使用 DataX 实现 MySQL 数据的高效同步
DataX 实现 MySQL 数据,高效同步
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/12
4.1K0
DataX 实现 MySQL 数据,高效同步
阿里离线数据同步工具 DataX 踩坑记录
最近在做一些数据迁移相关工作,调研了一些工具,发现DataX是个不错的东西,所以安利给大家。那么DataX是什么呢? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具,实现包括 MySQL、SQL Server、Oracle、PostgreSQL 等各种异构数据源之间高效的数据同步功能。
haifeiWu
2018/09/11
4.8K0
dataX是阿里开源的离线数据库同步工具的使用
DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
凯哥Java
2022/12/16
1.5K0
dataX是阿里开源的离线数据库同步工具的使用
如何基于DataX做增量数据同步?
一、DataX数据同步原理二、全量同步实现三、增量同步的思考四、增量同步实现方案五、关于DataX高可用参考
叔牙
2023/06/21
6.8K0
如何基于DataX做增量数据同步?
DataX数据同步实战案例
DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。
chimchim
2022/11/13
2.4K0
DataX数据同步实战案例
大数据-数据源离线同步工具DataX的使用
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
码客说
2022/10/04
2.1K0
大数据-数据源离线同步工具DataX的使用
datax详细介绍及使用
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。
Maynor
2022/03/11
12.6K0
datax详细介绍及使用
datax工具在TBDS上同步数据方法
因为datax工具本身无法传入认证参数,所以若想在TBDS上使用datax同步数据则需要关闭相应的服务认证。
袁宋
2020/12/07
1.6K0
数据源管理 | 基于DataX组件,同步数据和源码分析
DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
知了一笑
2020/05/13
1.4K0
datax数据流转小试牛刀
最近在做MySQL向infobright的迁移工作,用的方法是shell脚本的方法。之前听说过有datax的方法也可以做数据流转,今天下班后,就试了试datax的方法,整个过程还是比较顺利的。记录一下。
AsiaYe
2020/03/12
1.2K0
Datax安装及基本使用
http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
刘大猫
2025/07/04
1480
异构数据源数据同步 → 从源码分析 DataX 敏感信息的加解密
通过 异构数据源同步之数据同步 → DataX 使用细节,相信大家都知道如何使用 DataX 了
青石路
2024/07/16
2750
异构数据源数据同步 → 从源码分析 DataX 敏感信息的加解密
使用datax将postgresql或者greenplum中的数据同步到elasticsearch
1、使用datax工具将postgresql或者greenplum数据库中的数据同步到elasticsearch中。DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图:
别先生
2021/03/02
3K0
使用datax将mysql数据同步到ES 附elasticsearchwriter插件
1、使用datax工具将mysql数据库中的数据同步到elasticsearch中。DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图:
别先生
2021/01/13
4.9K0
DataX 快速入门
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。具体请查阅:DataX 异构数据源离线同步
smartsi
2022/05/01
2K0
DataX 快速入门
java整合datax 全网最详细的教程
在resource目录下新建一个datax目录,在datax目录下新建test.json文件。
java后端指南
2021/11/01
4.3K4
java整合datax 全网最详细的教程
使用 DataX 增量同步数据
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
beginor
2020/08/07
10.7K0
使用 DataX 增量同步数据
开源DataX集成可视化项目Datax-Web的使用
1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果, 避免回调的单点风险;
星哥玩云
2023/04/01
9.8K0
开源DataX集成可视化项目Datax-Web的使用
相关推荐
异构数据源同步之数据同步 → DataX 使用细节
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档