update code
This commit is contained in:
parent
402ee25ef1
commit
ef1d0c37bd
4
go.mod
4
go.mod
@ -1,9 +1,9 @@
|
|||||||
module playground/binlog
|
module binlog
|
||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require (
|
require (
|
||||||
b612.me/mysql/binlog v0.0.0-20230429091624-0f74dc3dc897
|
b612.me/mysql/binlog v0.0.0-20230524072531-39ca67fcfe81
|
||||||
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044
|
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044
|
||||||
b612.me/starlog v1.3.2
|
b612.me/starlog v1.3.2
|
||||||
b612.me/staros v1.1.6
|
b612.me/staros v1.1.6
|
||||||
|
4
go.sum
4
go.sum
@ -1,5 +1,5 @@
|
|||||||
b612.me/mysql/binlog v0.0.0-20230429091624-0f74dc3dc897 h1:dm3U9OXzbVMMfyPDF6REc6SylBjQ/u3x3k2xlE8+KR0=
|
b612.me/mysql/binlog v0.0.0-20230524072531-39ca67fcfe81 h1:nUTBhXxtHAZd4p2ppbtj6wg5Ji5bbCAsWu6LAo5XvVs=
|
||||||
b612.me/mysql/binlog v0.0.0-20230429091624-0f74dc3dc897/go.mod h1:j9oDZUBx7+GK9X1b1bqO9SHddHvDRSGfwbIISxONqfA=
|
b612.me/mysql/binlog v0.0.0-20230524072531-39ca67fcfe81/go.mod h1:j9oDZUBx7+GK9X1b1bqO9SHddHvDRSGfwbIISxONqfA=
|
||||||
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044 h1:sJrYUl9Sb1tij6ROahFE3r/36Oag3kI92OXDjOKsdwA=
|
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044 h1:sJrYUl9Sb1tij6ROahFE3r/36Oag3kI92OXDjOKsdwA=
|
||||||
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044/go.mod h1:3EHq1jvlm3a92UxagMjfqSSVYb3KW2H3aT5nd4SiD94=
|
b612.me/mysql/gtid v0.0.0-20230425105031-298e51a68044/go.mod h1:3EHq1jvlm3a92UxagMjfqSSVYb3KW2H3aT5nd4SiD94=
|
||||||
b612.me/notify v1.2.4 h1:cjP80V9FeM+ib1DztZdykusakcbjNI4dAB1pXE8U6bo=
|
b612.me/notify v1.2.4 h1:cjP80V9FeM+ib1DztZdykusakcbjNI4dAB1pXE8U6bo=
|
||||||
|
96
main.go
96
main.go
@ -12,9 +12,12 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
bigThan int
|
||||||
|
smallThan int
|
||||||
startPos int
|
startPos int
|
||||||
endPos int
|
endPos int
|
||||||
startTime int64
|
startTime int64
|
||||||
@ -25,9 +28,12 @@ var (
|
|||||||
outPath string
|
outPath string
|
||||||
vbo bool
|
vbo bool
|
||||||
skipquery bool
|
skipquery bool
|
||||||
|
pos int64
|
||||||
|
prefix string
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
cmd.Flags().IntVarP(&endPos, "pos", "P", 0, "skipPos of binlog")
|
||||||
cmd.Flags().IntVarP(&startPos, "start-pos", "S", 0, "startPos of binlog")
|
cmd.Flags().IntVarP(&startPos, "start-pos", "S", 0, "startPos of binlog")
|
||||||
cmd.Flags().IntVarP(&endPos, "end-pos", "E", 0, "endPos of binlog")
|
cmd.Flags().IntVarP(&endPos, "end-pos", "E", 0, "endPos of binlog")
|
||||||
cmd.Flags().StringVarP(&includeGtid, "include-gtid", "i", "", "include gtid")
|
cmd.Flags().StringVarP(&includeGtid, "include-gtid", "i", "", "include gtid")
|
||||||
@ -38,7 +44,9 @@ func init() {
|
|||||||
cmd.Flags().Int64Var(&endTime, "endtime", 0, "end unix timestamp")
|
cmd.Flags().Int64Var(&endTime, "endtime", 0, "end unix timestamp")
|
||||||
cmd.Flags().BoolVarP(&vbo, "verbose", "v", false, "show the detail verbose")
|
cmd.Flags().BoolVarP(&vbo, "verbose", "v", false, "show the detail verbose")
|
||||||
cmd.Flags().BoolVarP(&skipquery, "skip-query", "s", true, "skip query write to xlsx like BEGIN COMMIT")
|
cmd.Flags().BoolVarP(&skipquery, "skip-query", "s", true, "skip query write to xlsx like BEGIN COMMIT")
|
||||||
|
cmd.Flags().IntVar(&bigThan, "big", 0, "show tx big than x bytes")
|
||||||
|
cmd.Flags().IntVar(&smallThan, "small", 0, "show tx small than x bytes")
|
||||||
|
cmd.Flags().StringVar(&prefix, "prefix", "mysql-bin", "mysql binlog prefix")
|
||||||
}
|
}
|
||||||
|
|
||||||
var cmd = &cobra.Command{
|
var cmd = &cobra.Command{
|
||||||
@ -60,21 +68,6 @@ func main() {
|
|||||||
|
|
||||||
func ParseBinlog() {
|
func ParseBinlog() {
|
||||||
var err error
|
var err error
|
||||||
var igtid, egtid *gtid.Gtid
|
|
||||||
if includeGtid != "" {
|
|
||||||
igtid, err = gtid.Parse(includeGtid)
|
|
||||||
if err != nil {
|
|
||||||
starlog.Errorln(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if excludeGtid != "" {
|
|
||||||
egtid, err = gtid.Parse(excludeGtid)
|
|
||||||
if err != nil {
|
|
||||||
starlog.Errorln(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foundCount := 0
|
foundCount := 0
|
||||||
var totalGtid *gtid.Gtid
|
var totalGtid *gtid.Gtid
|
||||||
var owrt *xlsx.File
|
var owrt *xlsx.File
|
||||||
@ -111,32 +104,32 @@ func ParseBinlog() {
|
|||||||
res.SetColWidth(15, 15, 40)
|
res.SetColWidth(15, 15, 40)
|
||||||
owrt.Save(outPath)
|
owrt.Save(outPath)
|
||||||
}
|
}
|
||||||
getParser := func(fpath string) {
|
getParser := func(fpath string) string {
|
||||||
err = binlog.ParseBinlogFile(fpath, func(tx binlog.Transaction) {
|
var sTime, eTime time.Time
|
||||||
if startTime != 0 && tx.Timestamp < startTime {
|
if startTime != 0 {
|
||||||
return
|
sTime = time.Unix(startTime, 0)
|
||||||
}
|
}
|
||||||
if endTime != 0 && tx.Timestamp > endTime {
|
if endTime != 0 {
|
||||||
return
|
eTime = time.Unix(endTime, 0)
|
||||||
}
|
}
|
||||||
if tx.StartPos < startPos {
|
var filter = binlog.BinlogFilter{
|
||||||
return
|
IncludeGtid: includeGtid,
|
||||||
}
|
ExcludeGtid: excludeGtid,
|
||||||
if endPos > 0 && tx.EndPos > endPos {
|
StartPos: startPos,
|
||||||
return
|
EndPos: endPos,
|
||||||
}
|
StartDate: sTime,
|
||||||
if igtid != nil {
|
EndDate: eTime,
|
||||||
if c, _ := igtid.Contain(tx.GTID); !c {
|
BigThan: bigThan,
|
||||||
return
|
SmallThan: smallThan,
|
||||||
}
|
}
|
||||||
}
|
var cGtid *gtid.Gtid
|
||||||
if egtid != nil {
|
err = binlog.ParseBinlogWithFilter(fpath, pos, filter, func(tx binlog.Transaction) {
|
||||||
if c, _ := egtid.Contain(tx.GTID); c {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foundCount++
|
foundCount++
|
||||||
|
if cGtid == nil {
|
||||||
|
cGtid, _ = gtid.Parse(tx.GTID)
|
||||||
|
} else {
|
||||||
|
cGtid.Add(tx.GTID)
|
||||||
|
}
|
||||||
if totalGtid == nil {
|
if totalGtid == nil {
|
||||||
totalGtid, _ = gtid.Parse(tx.GTID)
|
totalGtid, _ = gtid.Parse(tx.GTID)
|
||||||
} else {
|
} else {
|
||||||
@ -174,18 +167,24 @@ func ParseBinlog() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
var cGtidStr string
|
||||||
|
if cGtid != nil {
|
||||||
|
cGtidStr = cGtid.String()
|
||||||
|
}
|
||||||
if outPath != "" {
|
if outPath != "" {
|
||||||
err = owrt.Save(outPath)
|
err = owrt.Save(outPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
starlog.Errorln(err)
|
starlog.Errorln(err)
|
||||||
return
|
return cGtidStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
starlog.Errorln(err)
|
starlog.Errorln(err)
|
||||||
return
|
return cGtidStr
|
||||||
}
|
}
|
||||||
|
return cGtidStr
|
||||||
}
|
}
|
||||||
|
var gtidRes [][]string
|
||||||
for _, fp := range filePath {
|
for _, fp := range filePath {
|
||||||
if staros.IsFolder(fp) {
|
if staros.IsFolder(fp) {
|
||||||
files, err := os.ReadDir(fp)
|
files, err := os.ReadDir(fp)
|
||||||
@ -193,21 +192,26 @@ func ParseBinlog() {
|
|||||||
starlog.Errorln("read folder failed:", err)
|
starlog.Errorln("read folder failed:", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rgp := regexp.MustCompile(`^mysql-bin\.\d+$`)
|
rgp := regexp.MustCompile(`^` + prefix + `\.\d+$`)
|
||||||
for _, v := range files {
|
for _, v := range files {
|
||||||
if !v.IsDir() && rgp.MatchString(v.Name()) {
|
if !v.IsDir() && rgp.MatchString(v.Name()) {
|
||||||
getParser(filepath.Join(fp, v.Name()))
|
gtidRes = append(gtidRes, []string{v.Name(), getParser(filepath.Join(fp, v.Name()))})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getParser(fp)
|
getParser(fp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if outPath != "" {
|
if outPath != "" {
|
||||||
owrt.Save(outPath)
|
owrt.Save(outPath)
|
||||||
}
|
}
|
||||||
fmt.Println("")
|
fmt.Println("")
|
||||||
|
if len(gtidRes) != 0 {
|
||||||
|
for _, v := range gtidRes {
|
||||||
|
fmt.Printf("%s:%s\n", v[0], v[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("")
|
||||||
allGtid := ""
|
allGtid := ""
|
||||||
if totalGtid != nil {
|
if totalGtid != nil {
|
||||||
allGtid = totalGtid.String()
|
allGtid = totalGtid.String()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user