在实际使用Datax的时候,可能会使用Datax同步mysq数据到mysql,实现数据库跨库同步或者多个mysql之间相互同步,那么怎么实现呢?我们一步步来实现(基于Datax
3.0.0)

1、检查环境,需要安装完一个Datax

2、在mysql中创建源表和目标表,并在原表中插入数据,我们的目标是把源表的mysql数据同步到目标表中,我们当前测试表如下
(注意,数据库的源表以及目标表都需要有,Datax不会帮你创建)

源数据库:test

源表结构:

CREATE TABLE `student` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `score` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

插入数据如下

 目标数据库名:datax

目标表

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `score` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

3、我们在安装Datax的服务器上创建json文件,我们文件创建在/opt/datax/job目录下,开发者可自定义保存文件路径

vim mysql2mysql.json

4、文件内容如下(需要修改的或者重要的已标红,大家直接修改即可)

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "mysql登录用户名",
                        "password": "mysql登录密码",
                        "connection": [
                            {
                                "querySql": [
                                    "select id,name from student;"
                                ],
                                "jdbcUrl": [
                                    "jdbc:mysql://node01:3306/test"
                                ]
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "mysql登录用户名",
                        "password": "mysql登录密码",
                        "column": [
                            "id",
                            "name"
                        ],
                        "preSql": [
                            "delete from test"
                        ],
                        "connection": [
                            {
                                "jdbcUrl":
"jdbc:mysql://node01:3306/datax?useUnicode=true",
                                "table": [
                                    "test"
                                ]
                            }
                        ]
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

标红解释如下:

jdbcUrl:数据库的jdbcurl链接

username:mysql用户名

password:mysql用户登陆密码

querySql:mysqlreader中的参数,用作自定义sql,根据sql的灵活编写实现数据的增量、全量、特定列数据的同步,注意需要sql和mysqlwriter中的column字段数量、名称、类型需要对应上

column:mysqlwriter中的配置,写出你要写入目标表的列

preSql:在写入目标表的时候执行的语句,我们写了删除表中数据,这样才能保证目标表中没有脏数据

table:目标表名称

channel:执行的并行度,写大点性能会提高一些,不过要根据实际情况合理配置,数据量少1个够了

5、执行Datax,首先去到Datax的bin目录,然后执行

./datax.py /opt/datax/job/mysql2mysql.json

6、看到如下则证明执行成功

 再看数据库已经同步成功了

 

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信