-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.go
101 lines (82 loc) · 2.07 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"flag"
"os"
"os/signal"
"runtime"
"syscall"
"github.com/juju/errors"
"github.com/siddontang/go-mysql-redis/river"
"gopkg.in/birkirb/loggers.v1/log"
)
var configFile = flag.String("config", "/Users/jianghaiping/godev/src/github.com/siddontang/go-mysql-redis/etc/river.toml", "go-mysql-redis config file")
var my_addr = flag.String("my_addr", "", "MySQL addr")
var my_user = flag.String("my_user", "", "MySQL user")
var my_pass = flag.String("my_pass", "", "MySQL password")
var redis_addr = flag.String("redis_addr", "", "Redis addr")
var data_dir = flag.String("data_dir", "", "path for go-mysql-redis to save data")
var server_id = flag.Int("server_id", 0, "MySQL server id, as a pseudo slave")
var flavor = flag.String("flavor", "", "flavor: mysql or mariadb")
var execution = flag.String("exec", "", "mysqldump execution path")
var logLevel = flag.String("log_level", "info", "log level")
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
flag.Parse()
level := log.ParseLevel(*logLevel)
log.SetLevel(level)
sc := make(chan os.Signal, 1)
signal.Notify(sc,
os.Kill,
os.Interrupt,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
cfg, err := river.NewConfigWithFile(*configFile)
if err != nil {
println(errors.ErrorStack(err))
return
}
if len(*my_addr) > 0 {
cfg.MyAddr = *my_addr
}
if len(*my_user) > 0 {
cfg.MyUser = *my_user
}
if len(*my_pass) > 0 {
cfg.MyPassword = *my_pass
}
if *server_id > 0 {
cfg.ServerID = uint32(*server_id)
}
if len(*redis_addr) > 0 {
cfg.RedisAddr = *redis_addr
}
if len(*data_dir) > 0 {
cfg.DataDir = *data_dir
}
if len(*flavor) > 0 {
cfg.Flavor = *flavor
}
if len(*execution) > 0 {
cfg.DumpExec = *execution
}
r, err := river.NewRiver(cfg)
if err != nil {
println(errors.ErrorStack(err))
return
}
done := make(chan struct{}, 1)
go func() {
r.Run()
done <- struct{}{}
}()
select {
case n := <-sc:
log.Infof("receive signal %v, closing", n)
case <-r.Ctx().Done():
log.Infof("context is done with %v, closing", r.Ctx().Err())
}
r.Close()
<-done
}