golang mysql GTID同步

栏目: Go · 发布时间: 5年前

内容简介:主要用于mysql数据同步,与可以跳转到某个事务开始读取。开启binlog模式row,以及开启gitid使用github.com/siddontang/go-mysql库进行监听binlog日志

主要用于 mysql 数据同步,与可以跳转到某个事务开始读取。

配置mysql支持GTID同步

server-id=12
binlog_format = ROW
log_bin=D:/dev_tool/mysql-5.7.22-winx64/log_bin/binlog-bin  
log_bin_index=D:/dev_tool/mysql-5.7.22-winx64/log_bin/binlog  
secure-file-priv=D:/backup
gtid-mode = ON
enforce_gtid_consistency = 1
log-slave-updates= 1

开启binlog模式row,以及开启gitid

示例

使用github.com/siddontang/go-mysql库进行监听binlog日志

package main

import (
    "github.com/satori/go.uuid"
    "github.com/siddontang/go-mysql/canal"
    "github.com/siddontang/go-mysql/mysql"
    "github.com/siddontang/go-mysql/replication"
    "log"
)

type MyEventHandler struct {
    Start bool
}

func (h *MyEventHandler) OnRotate(roateEvent *replication.RotateEvent) error {
    log.Println("OnRotate")
    log.Printf("%d", roateEvent.Position)
    h.Start = true
    return nil
}

// OnTableChanged is called when the table is created, altered, renamed or dropped.
// You need to clear the associated data like cache with the table.
// It will be called before OnDDL.
func (h *MyEventHandler) OnTableChanged(schema string, table string) error {
    log.Println("OnTableChanged")
    return nil
}
func (h *MyEventHandler) OnDDL(nextPos mysql.Position, queryEvent *replication.QueryEvent) error {
    log.Println("OnDDL")
    return nil
}
func (h *MyEventHandler) OnXID(nextPos mysql.Position) error {
    log.Println("OnXID")
    return nil
}
func (h *MyEventHandler) OnGTID(gtid mysql.GTIDSet) error {
    log.Println("OnGTID")
    log.Println(gtid.String())
    return nil
}

// OnPosSynced Use your own way to sync position. When force is true, sync position immediately.
func (h *MyEventHandler) OnPosSynced(pos mysql.Position, set mysql.GTIDSet, force bool) error {
    log.Println("OnPosSynced")
    log.Printf("%s %d", pos.Name, pos.Pos)
    return nil
}

func (h *MyEventHandler) OnRow(e *canal.RowsEvent) error {
    log.Printf("%s %v\n", e.Action, e.Rows)
    for _, v := range e.Table.Columns {
        log.Printf("%s\n", v.Name)
    }
    return nil
}

func (h *MyEventHandler) String() string {
    return "MyEventHandler"
}

func main() {
    cfg := canal.NewDefaultConfig()
    cfg.Addr = "127.0.0.1:3306"
    cfg.User = "root"
    cfg.Password = "123456"
    // We only care table canal_test in test db
    cfg.Dump.TableDB = "test"
    cfg.Dump.Tables = []string{"t_user"}
    c, _ := canal.NewCanal(cfg)
    uuid := uuid.Must(uuid.FromString("a615ea0a-6fb4-11e8-a87e-509a4c0ef59e"))
    it := mysql.Interval{}
    //默认基本上是1
    it.Start = 1
    it.Stop = 9
    set := mysql.NewUUIDSet(uuid, it)
    mset := &mysql.MysqlGTIDSet{}
   //key测试可以随意
    m := map[string]*mysql.UUIDSet{"12aaa": set}
    mset.Sets = m
    // Register a handler to handle RowsEvent
    c.SetEventHandler(&MyEventHandler{})
    c.StartFromGTID(mset)
    // Start canal
    c.Run()
}

uuid的查询可以通过mysql命令

SHOW GLOBAL VARIABLES LIKE 'server_uuid';
golang mysql GTID同步

1558581966301.jpg

stop的位置可以使用mysql命令

SHOW GLOBAL VARIABLES LIKE '%gtid%';
golang mysql GTID同步

1558581929246.jpg

读取binlog可以用改变stop的值来读取从什么事件开始读取,默认这块配置id是自增1的,所以下一条也就是加1


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

面向对象分析与设计

面向对象分析与设计

Grady Booch、Robert A. Maksimchuk、Michael W. Engel、Bobbi J. Young、Jim Conallen、Kelli A. Houston / 王海鹏、潘加宇 / 人民邮电出版社 / 2009-8 / 79.00元

《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的实际需要。《面向对象分析与设计(第3版)》通过大量例子说明了基本概念,解释了方法,并展示了在不同领域的成功应用。全书分为理论和应用两部分。理论部分深刻剖析了面向对象分析与设计(OOA......一起来看看 《面向对象分析与设计》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具