Skip to content

Instantly share code, notes, and snippets.

@kanguki
Created November 13, 2022 04:38
Show Gist options
  • Select an option

  • Save kanguki/e8d7765a1fd8021139bb13c3132436f1 to your computer and use it in GitHub Desktop.

Select an option

Save kanguki/e8d7765a1fd8021139bb13c3132436f1 to your computer and use it in GitHub Desktop.

Revisions

  1. kanguki created this gist Nov 13, 2022.
    44 changes: 44 additions & 0 deletions canal-mysql.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    package main

    import (
    "github.com/go-mysql-org/go-mysql/canal"
    "github.com/siddontang/go-log/log"
    )

    type MyEventHandler struct {
    canal.DummyEventHandler
    }

    func (h *MyEventHandler) OnRow(e *canal.RowsEvent) error {
    log.Infof("%s %v\n", e.Action, e.Rows)
    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 = "xxx"
    // We only care table canal_test in test db
    cfg.Dump.TableDB = "test"
    // cfg.Dump.Tables = []string{"canal_test"}

    c, err := canal.NewCanal(cfg)
    if err != nil {
    log.Fatal(err)
    }

    // Register a handler to handle RowsEvent
    c.SetEventHandler(&MyEventHandler{})

    // Start canal
    latestPos, err := c.GetMasterPos()
    if err != nil {
    panic(err)
    }
    c.RunFrom(latestPos)
    }