git clone https://gitee.com/mirrors/go-mysql-transfer.git
# 查询 master 状态,获取 日志名和偏移量
mysql> show master status;
# 重置同步位置 (假设通过上面命令获取到日志名和偏移量为 mysql-bin.000025 993779648)
./go-mysql-transfer -config app.yml -position mysql-bin.000025 993779648
# 全量数据同步
./go-mysql-transfer -stock
/*
mysql 配置文件 my.cnf
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 go-mysql-transfer 的
slave_id 重复
*/
CREATE TABLE `user` (
`id` BIGINT,
`name` VARCHAR (100),
`height` INT8,
`sex` VARCHAR (1),
`age` INT8
PRIMARY KEY (`id`)
);
insert into `user` values (10001, 'mark', 180, '1', 30);
update `t_user` set `age` = 31 where id = 10001;
delete from `t_user` where id = 10001;
-- go-mysql-transfer
--[[
安装步骤:
GO111MODULE=on
git clone https://gitee.com/0k/go-mysql-transfer.git
go env -w GOPROXY=https://goproxy.cn,direct
go build
修改 app.yml
执行 go-mysql-transfer
]]
local ops = require("redisOps") --加载redis操作模块
local row = ops.rawRow() --当前数据库的一行数据,table类型,key为列名称
local action = ops.rawAction() --当前数据库事件,包括:insert、updare、delete
if action == "insert" then -- 只监听insert事件
local id = row["id"] --获取ID列的值
local name = row["name"] --获取USER_NAME列的值
local key = name .. ":" .. id
local sex = row["sex"]
local height = row["height"] --获取PASSWORD列的值
local age = row["age"]
local createtime = row["createtime"] --获取CREATE_TIME列的值
ops.HSET(key, "id", id) -- 对应Redis的HSET命令
ops.HSET(key, "name", name) -- 对应Redis的HSET命令
ops.HSET(key, "sex", sex) -- 对应Redis的HSET命令
ops.HSET(key, "height", height) -- 对应Redis的HSET命令
ops.HSET(key, "age", age) -- 对应Redis的HSET命令
end