1、搭建redis主从复制环境:并验证redis主从复制环境是否可行。
详情参考网址:redis主从复制搭建 - 喷气机 - 博客园
2、 环境搭建、Redis及Python的安装:
详情参考网址:Redis | Python : (一) 环境搭建、Redis及Python的安装_u013169890的博客-CSDN博客
3、安装datax及基于datax进行二次开发的插件redis-writer(如遇到安装失败问题,可根据问题酌情解决)
详情参考网址:异构数据源导redis不用找了!DataX二次开发插件rediswriter已上菜_u013289115的博客-CSDN博客_datax redis
4、然后,安装完成后,在/root/DataX/target/datax/datax/bin目录下找到datax.py文件,是后面需要运行的python文件,在/root/DataX/target/datax/datax/plugin/目录下可以找到reader和writer的文件(包含datax支持的各个数据源的价包和配置reader和writer格式的json文件模板)
5、在/root/DataX/target/datax/datax/job/文件夹下创建需要运行的json配置文件(配置方式可以参考配置文件模板),创建mysql-redis.json配置文件,如下所示:
{
"job": {
"setting": {
"speed": {
"channel": 3 # 并发通道数,根据自己的数据库性能而定,一般数据库建议不超过32个
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": ["userId" , "channel" , "name"], #数据表需要同步的字段,可以写为*来匹配所有字段
"connection": [
{
"jdbcUrl": ["jdbc:mysql://36.133.163.88:3306/dacheng?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8"],
# mysql数据源的访问地址,与所在的数据库
"table": ["redis_writer"] # 目的表的表名称。支持写入一个或者多个表。当配置为多张表时,必须确保所有表结构保持一致。
}
],
"password": "Dcyx2018,./", # 密码
"username": "root", # 用户名
"where": ""
}
},
"writer": {
"name": "rediswriter",
"parameter": {
"redisMode": "cluster",
"address": "36.133.33.42:6379",
"auth": "",
"writeType":"string",
"config":{
"colKey":{"name":"userId","index":0},
"colValue":{"name":"name","index":2},
"expire":300,
"keyPrefix":"datax:string:"
}
}
}
}
]
}
}
6、在/root/DataX/target/datax/datax/目录下,运行命令:python /bin/datax.py job/mysql-redis.json ,然后命令运行完成后如下图:表示数据同步成功
7、接着,到redis主从复制的主节点和从节点分别查看从mysql源同步来的数据是否成功,如下图所示:从图中可以看出,mysql源的数据已经同步过来了,在redis主节点数据有重复,在redis两个从节点数据正常从主节点同步过来,数据正常,没有重复。
7、重点注意:
一、datax及基于datax二次开发的插件redis-writer安装失败的问题,这里面会有很多坑。
二、json配置文件的配置,比如源数据库的连接和配置,目标数据库的连接和配置,都容易出错而导致程序运行出错。
三、redis的redis.conf文件的修改和配置也容易导致程序运行出错,这里,"redisMode": "cluster"目前只支持cluster,换成standalone会报错(不知是什么原因),而且"address": "36.133.33.42:6379",也只能填写一个地址,填写多个主从复制地址后也会报错(尚不知原因)。
四、目前redis-writer插件支持的数据格式有限,仅有string、list、hash。
五、 redis的这三种数据类型导入已经够用,不用再去单独写udf,只要datax支持的reader,有了它之后,都能写redis!
六、目前datax及其插件暂不支持redis的reader操作,因此,无法使用datax从redis主从导入数据到redis集群。