IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL通过my_mysql_transfer实时同步数据到Redis -> 正文阅读

[大数据]MySQL通过my_mysql_transfer实时同步数据到Redis

我自己在实践的时候遇到很多坑,把遇到的问题都分享给大家
Linux下:
结合go_mysql_transfer产品手册
在Linux上安装好redis和mysql。
redis安装:
git clone https://gitee.com/mirrors/redis.git -b 6.2
cd redis
make
make test
make install

启动:
mkdir redis-data
把redis文件夹下 redis.conf 拷贝到 redis-data
修改 redis.conf
requirepass 修改密码 123456 //这行可以直接在redis.conf末尾加就行,汉字(修改密码)不要
daemonize yes //这行的好处是可以让redis服务运行在后台
cd redis-data
redis-server redis.conf
通过 redis-cli 访问 redis-server
redis-cli -h 127.0.0.1 -a 123456
上边配置登录密码过程是可选的,如果没配置密码,直接redis_cli即可,若配置了密码也可以redis_cli,但进去之后还需验证密码,输入auth 123456(密码)即可。
#默认安装在 /usr/local/bin
redis-server 是服务端程序
redis-cli 是客户端程序

如果给redis设置了登录密码一定要记住(我的是123456)。//如果没有可忽略
比如你通过redis_cli 登录后并不能直接使用,还需输入命令auth + 密码 (对于我即 auth 123456)

Linux下和Windows上配置主(mysql)从(my_mysql_transfer)关系有一点差异,
实际上my_mysql_transfer就是一个伪数据库,通过配置好与mysql的连接,即可得到mysql的数据信息,然后再同步到Redis。

linux下需配置my.cnf(windows是my.ini),一般my.cnf在/etc/mysql里面。对于linux系统,你可以通过locate /my.cnf 来定位文件
具体配置内容:

//网上是这样教的
log_bin=mysql_bin
binlog_format=ROW
server_id=2
//其实这样会报错,需要在这三行的前边加上[mysqld],如下
[mysqld]
log_bin=mysql_bin
binlog_format=ROW
server_id=2

重点来了,一定一定要重启mysql服务
systemctl status mysqld
有些朋友需要输入systemctl status mysql , 不需要那个d,具体为什么有兴趣可以百度不用纠结。

先下载好my_mysql_transfer(Linux版本的)
点击下载my_mysql_transfer
下载完成后进入目录执行go build

最重要的是去配置my_mysql_transfer的app.yml文件
截取部分app.yml内容
内容配置有几个细节点,首先mysql的密码pass必须要正确;
其次redis的地址不能直接用虚拟机的地址,必须用127.0.0.1,当然如果你用了服务器另谈;
还有很重要的一点,如果安装redis的时候你设置了登录密码, 一定要把(redis_pass: 123456 #redis密码)解开注释,否则连接不上redis,默认是注释掉的;数据库的库名和表名一定要一致

# mysql配置
addr: 127.0.0.1:3306
user: root
pass: Nswdsm58@
charset : utf8
slave_id: 1001 #slave ID
flavor: mysql #mysql or mariadb,默认mysql
#web admin相关配置
enable_web_admin: true #是否启用web admin,默认false
web_admin_port: 8060 #web监控端口,默认8060
#目标类型
target: redis # 支持redis、mongodb、elasticsearch、rocketmq、kafka、rabbitmq
#redis连接配置
redis_addrs: 127.0.0.1:6379 #redis地址,多个用逗号分隔
redis_pass: 123456 #redis密码
#规则配置
rule:
  -
    schema: test #数据库名称
    table: t_user #表名称
 
    lua_file_path: lua/t_user.lua   #lua脚本文件
    #lua_script:   #lua 脚本
    value_encoder: json  #值编码,支持json、kv-commas、v-commas;默认为json

    #redis相关
    redis_structure: string # 数据类型。 支持string、hash、list、set、

接着执行 nohup go-mysql-transfer & (让这个进程在后台工作)
这里可以通过jobs命令查看后台进程数量
重点:如果通过jobs没看到有任务在运行,说明nohup go-mysql-transfer & 失败了,给大家一个调试的方法,直接输入./go-mysql-transfer 它会告诉你哪里有问题,再逐步排查。
到此为止,已经可以同步数据了,对于我这里,在mysql上使用test库,操作t_user表,后去登录redis客户端, 使用keys * 即可看到同步过来的键值, 通过命令get 键值 ,即可看到详细数据。

补充:
go_mysql_transfer首先会在app.yml中寻找规则,如果你没有使用lua脚本配置自定义规则, 它会默认用它自己的规则(可通过观察app.yml这个文件看到默认规则,就我上边的用get来查看键值,可以自己配置成hash的存储方式等等)。

当然如果你想用lua脚本的规则,必须把上边的(lua_file_path: lua/t_user.lua #lua脚本文件)解开注释, 在当前目录下创建一个lua目录, 里面创建一个t_user.lua文件
这样my_mysql_transfer就会按照你配置的lua脚本的规则来同步mysql到redis
我自己的内容:

local ops = require("redisOps")

local row = ops.rawRow()
local action = ops.rawAction()

if action == "insert" or action == "update" then
    local id = row["id"]
    local key = "user:" .. id
    local name = row["nick"]
    local sex = row["sex"]
    local height = row["height"]
    local age = row["age"]
    ops.HSET(key, "id", id)
    ops.HSET(key, "nick", name)
    ops.HSET(key, "sex", sex)
    ops.HSET(key, "height", height)
    ops.HSET(key, "age", age)
elseif action == "delete" then
    local id = row['id']
    local key = "user:" .. id
    ops.DEL(key)
end

如果你采用了我的这个lua配置规则,就需要在redis中用hget 键值 来查看内容,因为我采用的是hash的存储方式。

Windows版本配置规则大同小异

Windows直接运行 go-mysql-transfer.exe

官方文档上写了go_mysql_transfer产品手册
#Linux在my.cnf文件
#Windows在my.ini文件
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 go-mysql-transfer 的 slave_id 重复

windows和linux下编译好的包地址

链接:https://pan.baidu.com/s/1xd_PWKYMWiUcQ1atbPZsYA?pwd=nwz4
提取码:nwz4

遇到过太多障碍,但都一一解决了, 若有任何问题欢迎评论区留言!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:41:07  更:2022-10-17 12:43:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:21:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码