阿里巴巴开源DataX全量同步多个MySQL数据库

这篇具有很好参考价值的文章主要介绍了阿里巴巴开源DataX全量同步多个MySQL数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

上次 写了阿里巴巴高效的离线数据同步工具DataX: https://mp.weixin.qq.com/s/_ZXqA3H__Kwk-9O-9dKyOQ 安装DataX这个开源工具,并且同步备份了几张数据表。但是发现一个问题,就是每张表都需要单独写一个 job。如果数据表有几百张是不是要写几百个,这个不太现实了。

正当一筹莫展之际看到看到 @慌途L https://blog.csdn.net/qq_25112523/article/details/109276879 的文章,我根据文章这篇文章优化了一下,先理一下思路。

datax同步多张表,MYSQL数据库,数据库,mysql

思路

实现的目标如图,要将源数据库的所有数据全量同步到目标数据库中。

datax同步多张表,MYSQL数据库,数据库,mysql

三个步骤

1.源库的数据库结构导入到目标库中

2.读取目标库中的所有表名

3.通过DataX执行脚本同步所有数据表。

操作流程

1.源库的数据库结构导入到目标库中

利用shell脚本读取数据库,导出表结构

https://gitee.com/funet8/MYSQL/raw/master/DataX/Mysql_Init.sh

vim /data/datax/script/Mysql_Init.sh 
填写以下内容,全量备份执行一次即可
#!/bin/bash
. /etc/profile

# 读库的变量
r_ip="192.168.1.6"
r_port="3306"
r_username="root"
r_password="123456"

# 写入库的变量
w_ip="192.168.1.4"
w_port="61920"
w_username="star"
w_password="123456"

# 获取库名
Mysql_Names=`mysql -h$r_ip -u$r_username -p$r_password -P$r_port -e "show databases\G" |grep 'Database'|awk -F'Database: ' '{print $2}' |grep -v 'information_schema\|performance_schema\|test\|sys\|mysql\|test1|'`

function Mysql_Init(){
	mysql_path="/data/datax/mysql/"
	mkdir $mysql_path
	for DataBase in $Mysql_Names;
		do
		#1.导出数据库结构:
		mysqldump -d ${DataBase} -h$r_ip -u$r_username -p$r_password -P$r_port > ${mysql_path}${DataBase}.sql
		#2.创建数据库
		mysql -h$w_ip -u$w_username -p$r_password -P$w_port -e "CREATE database ${DataBase} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
		#3.导入数据库结构:
		mysql -u$w_username -h$w_ip -P$w_port -p$w_password ${DataBase} < ${mysql_path}${DataBase}.sql
	done
}
#数据库初始化导出、导入数据库
Mysql_Init

2.读取目标库中的所有库名、表名循环

https://gitee.com/funet8/MYSQL/raw/master/DataX/all_Sync_Task.sh

# vi /data/datax/script/all_Sync_Task.sh 
填写以下内容
#!/bin/bash
. /etc/profile

# 读库的变量
r_ip="192.168.1.6"
r_port="3306"
r_username="root"
r_password="123456"

# 写入库的变量
w_ip="192.168.1.4"
w_port="61920"
w_username="star"
w_password="123456"

Tool_Datax='/usr/bin/python2.7 /data/datax/bin/datax.py'

# 获取库名
Mysql_Names=`mysql -h$r_ip -u$r_username -p$r_password -P$r_port -e "show databases\G" |grep 'Database'|awk -F'Database: ' '{print $2}' |grep -v 'information_schema\|performance_schema\|test\|sys\|mysql\|test1|'`

for dbname in $Mysql_Names;
	do
		# 获取表名
		table_tchema=`mysql -h$r_ip -u$r_username -p$r_password -P$r_port -e "use ${dbname}; show full tables;"|grep 'TABLE'|awk '{print $1}'`
		#echo $table_tchema;
		
		#循环导入数据库
		for table_name in $table_tchema;
			do
				echo $table_name;
				$Tool_Datax  /data/datax/job/mysql2mysql_All.json -p "-Dr_ip=$r_ip -Dr_port=$r_port -Dr_dbname=$dbname -Dr_username=$r_username -Dr_password=$r_password -Dw_ip=$w_ip -Dw_port=$w_port -Dw_dbname=$dbname -Dw_username=$w_username -Dw_password=$w_password -Dtable_name=$table_name"
		done
done


#DataX全量同步(某一张表)
#$Tool_Python  /data/datax/job/mysql2mysql_dzzoffice.json -p "-Dr_ip=$r_ip -Dr_port=$r_port -Dr_dbname=$r_dbname -Dr_username=$r_username -Dr_password=$r_password -Dw_ip=$w_ip -Dw_port=$w_port -Dw_dbname=$w_dbname -Dw_username=$w_username -Dw_password=$w_password"

# DataX全量同步(多个文件直接写多个执行命令)
#$Tool_Python  /data/datax/job/mysql2mysql_All.json -p "-Dr_ip=$r_ip -Dr_port=$r_port -Dr_dbname=$r_dbname -Dr_username=$r_username -Dr_password=$r_password -Dw_ip=$w_ip -Dw_port=$w_port -Dw_dbname=$w_dbname -Dw_username=$w_username -Dw_password=$w_password -Dtable_name=$table_name"

撰写job脚本

# vim /data/datax/job/mysql2mysql_All.json

https://gitee.com/funet8/MYSQL/raw/master/DataX/mysql2mysql_All.json

{
    "job": {
		"setting": {
            "speed": {
                "channel": 10
            },
			"errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
						"column": ["*"],
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://${r_ip}:${r_port}/${r_dbname}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull"],
                                "table": ["${table_name}"]
                            }
                        ], 
						"username": "${r_username}",
                        "password": "${r_password}"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
						"writeMode": "update",
                        "column": ["*"],
                        "session": [
                        	"set session sql_mode='ANSI'"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://${w_ip}:${w_port}/${w_dbname}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull", 
                                "table": ["${table_name}"]
                            }
                        ],
						"username": "${w_username}",
                        "password": "${w_password}"
                    }
                }
            }
        ]
    }
}

3.通过DataX执行脚本同步所有数据表。

执行脚本

# sh /data/datax/script/all_Sync_Task.sh 
会输出信息

datax同步多张表,MYSQL数据库,数据库,mysql

说明同步成功,如果有报错,根据报错解决BUG即可。

结果展示

源数据库

datax同步多张表,MYSQL数据库,数据库,mysql

同步之前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2EhqNCFQ-1680087177839)(H:/typora_images/image-20230320102231494.png)]

同步之后

datax同步多张表,MYSQL数据库,数据库,mysql

至此全量同步完成。

参考: https://blog.csdn.net/qq_25112523/article/details/109276879文章来源地址https://www.toymoban.com/news/detail-786482.html

到了这里,关于阿里巴巴开源DataX全量同步多个MySQL数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 重磅开源!阿里巴巴分布式核心原理,成功登顶GitHub周榜!

    前言 分布式系统架构是当今互联网企业的重要基础设施,它能够支撑海量用户并发访问和亿级数据量的超大规模业务系统。阿里巴巴作为互联网巨头,在分布式架构方面有着丰富的经验与成果(文末有免费领取方式!) 阿里巴巴开源的分布式架构原理项目涵盖了分布式系统

    2024年02月20日
    浏览(66)
  • 阿里巴巴内部Spring Cloud Alibaba 全彩 PDF 版手册限时开源

    众所周知,Spring Cloud Alibaba 是致力于提供微服务开发的一站式解决方案。但是很多的同学还是不是很了解,或者说知识略懂一些浅显的知识,从没有深入地学习过。 今天我们就来系统地学习一下 Spring Cloud Alibaba 第三版的内容,第三版提供的内容是 :微服务环境搭建以及基本

    2024年02月08日
    浏览(66)
  • 阿里巴巴开源的Spring Cloud Alibaba手册在GitHub上火了

    “微服务架构经验你有吗?” 前段时间一个朋友去面试,阿里面试官一句话问倒了他。实际上,不在BAT这样的大厂工作,是很难接触到支撑千亿级流量微服务架构项目的。 但也正是这种难得,让各个大厂都抢着要这样的人才! 下面这十道题是他当时阿里三面时被问到的,基

    2024年02月09日
    浏览(82)
  • 阿里巴巴虚拟试衣间:在模特身上尝试任何服装 | 开源日报 No.122

    Stars: 1.8k License: NOASSERTION Outfit Anyone 由阿里巴巴集团的智能计算研究院开发。它提供了超高质量的虚拟试衣功能,用户可以在模特身上尝试任何服装,并且保证安全和隐私。主要功能包括: 提供超高质量的虚拟试衣体验 限制上传个人照片以确保安全与隐私 鼓励用户分享有趣

    2024年02月03日
    浏览(89)
  • 阿里巴巴官方上线!号称国内Java八股文天花板,首次开源!

    继续找工作,现在的很多程序员还在谈技术,谈这个就没劲了其实,因为现在的失业是结构性失业。 比如说你到40岁了,你还有大厂履历,那你毕业了以后,找工作的难度肯定会加大。一方面是新工作的待遇和薪资往往不及预期,另一方面就是竞争激烈。 而我认识的两个猎头

    2024年02月07日
    浏览(58)
  • 阿里巴巴开源的免费数据库工具Chat2DB

    Chat2DB 是一款由阿里巴巴开源的免费数据库工具,它为开发人员提供了一个强大且易于使用的平台,用于存储和查询数据。与传统的数据库工具相比,Chat2DB 具有以下特点和优势: 多数据库支持 :Chat2DB 可以与多种类型的数据库进行集成,包括关系型数据库(如MySQL、PostgreS

    2024年02月11日
    浏览(66)
  • Chat2DB:阿里巴巴开源的聊天数据管理工具--实践

    Chat2DB:阿里巴巴开源的聊天数据管理工具–实践 简介 ​ Chat2DB 是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力,能够将自然语言转换为SQL,也可以将

    2024年02月09日
    浏览(57)
  • 阿里巴巴开源Chat2DB v1.0.11 初体验

    作为一名阿里巴巴开源项目的拥护者,从Chat2DB开源至今都有关注这个开源项目,因为之前的版本还存在较多BUG,暂时就没有分享,目前升级到 v1.0.11 版本后,我来谈谈我个人的一个使用感受 Chat2DB 是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服

    2024年02月09日
    浏览(62)
  • 推荐下阿里巴巴开源的数据库客户端工具Chat2DB

    github地址:https://github.com/alibaba/Chat2DB Chat2DB 是面向开发人员的免费多平台数据库工具。多种数据库一个工具。它用于查询、创建和管理数据库,数据库可以在本地、服务器或云端。支持 MySQL、PostgreSQL、Microsoft SQL Server、Oracle、H2等,未来我们会不断完善其他非关系型数据的支

    2024年02月11日
    浏览(82)
  • 阿里巴巴最新SpringCloud Alibaba全彩版笔记开源,架构师带你手撸微服务结构项目实战

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,依托Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 下面这些都是

    2024年02月04日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包