Skip to content

Commit

Permalink
use UTC timestamp #957
Browse files Browse the repository at this point in the history
  • Loading branch information
ffffwh committed Nov 23, 2022
1 parent 6f20972 commit 0c0c5e0
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 13 deletions.
6 changes: 3 additions & 3 deletions driver/mysql/binlog/binlog_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,8 @@ func NewBinlogReader(
HeartbeatPeriod: 3 * time.Second,
ReadTimeout: 12 * time.Second,

ParseTime: false, // must be false, or gencode will complain.
ParseTime: false, // must be false, or gencode will complain.
TimestampStringLocation: time.UTC,

MemLimitSize: int64(g.MemAvailable / 5),
MemLimitSeconds: 2,
Expand Down Expand Up @@ -322,10 +323,9 @@ func (b *BinlogReader) ConnectBinlogStreamer(coordinates common.MySQLCoordinates
ctx, b.relayCancelF = context.WithCancel(b.ctx)

{
loc, _ := time.LoadLocation("Local") // TODO
brConfig := &dmstreamer.BinlogReaderConfig{
RelayDir: b.getBinlogDir(),
Timezone: loc,
Timezone: time.UTC,
}
b.binlogReader = dmstreamer.NewBinlogReader(dmlog.L(), brConfig)
}
Expand Down
2 changes: 1 addition & 1 deletion driver/mysql/extractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ func (e *Extractor) initDBConnections() (err error) {
}
}
// https://github.com/go-sql-driver/mysql#system-variables
dumpUri := fmt.Sprintf("%s&%s='REPEATABLE-READ'", e.mysqlContext.SrcConnectionConfig.GetSingletonDBUri(),
dumpUri := fmt.Sprintf("%s&%s='REPEATABLE-READ'", e.mysqlContext.SrcConnectionConfig.GetDBUri(),
getTxIsolationVarName(e.mysqlVersionDigit))
if e.singletonDB, err = sql.CreateDB(dumpUri); err != nil {
return err
Expand Down
17 changes: 8 additions & 9 deletions driver/mysql/mysqlconfig/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ package mysqlconfig

import (
"fmt"
"net/url"
)

// insert TIMESTAMP in UTC
var utcTimeZoneQueryStr = fmt.Sprintf("time_zone=%v", url.QueryEscape("'+00:00'"))

// ConnectionConfig is the minimal configuration required to connect to a MySQL server
type ConnectionConfig struct {
Host string
Expand All @@ -19,19 +23,14 @@ type ConnectionConfig struct {
Charset string
}

func (c *ConnectionConfig) GetDBUriByDbName(databaseName string) string {
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%v&maxAllowedPacket=0", c.User, c.Password, c.Host, c.Port, databaseName, c.Charset)
}

func (c *ConnectionConfig) GetDBUri() string {
if "" == c.Charset {
if c.Charset == "" {
c.Charset = "utf8mb4"
}
return fmt.Sprintf("%s:%s@tcp(%s:%d)/?timeout=5s&tls=false&autocommit=true&charset=%v&multiStatements=true&maxAllowedPacket=0", c.User, c.Password, c.Host, c.Port, c.Charset)
}

func (c *ConnectionConfig) GetSingletonDBUri() string {
return fmt.Sprintf("%s:%s@tcp(%s:%d)/?timeout=5s&tls=false&autocommit=false&charset=%v&multiStatements=true&maxAllowedPacket=0", c.User, c.Password, c.Host, c.Port, c.Charset)
return fmt.Sprintf("%s:%s@tcp(%s:%d)/?timeout=5s&tls=false&autocommit=true&charset=%v&%v&%v&%v",
c.User, c.Password, c.Host, c.Port, c.Charset, utcTimeZoneQueryStr,
"multiStatements=true", "maxAllowedPacket=0")
}

func (c *ConnectionConfig) GetAddr() string {
Expand Down

0 comments on commit 0c0c5e0

Please sign in to comment.