Skip to content

Commit

Permalink
Merge pull request #1550 from dexidp/mysql-tx-isolation
Browse files Browse the repository at this point in the history
storage/mysql: support pre-5.7.20 instances with tx_isolation only
  • Loading branch information
bonifaido authored Oct 30, 2019
2 parents 3f8fd74 + d2c33db commit a58d77a
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions storage/sql/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const (
// MySQL error codes
mysqlErrDupEntry = 1062
mysqlErrDupEntryWithKeyName = 1586
mysqlErrUnknownSysVar = 1193
)

// SQLite3 options for creating an SQL db.
Expand Down Expand Up @@ -307,6 +308,26 @@ func (s *MySQL) open(logger log.Logger) (*conn, error) {
return nil, err
}

err = db.Ping()
if err != nil {
if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == mysqlErrUnknownSysVar {
logger.Info("reconnecting with MySQL pre-5.7.20 compatibilty mode")

// MySQL 5.7.20 introduced transaction_isolation and deprecated tx_isolation.
// MySQL 8.0 doesn't have tx_isolation at all.
// https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_isolation
delete(cfg.Params, "transaction_isolation")
cfg.Params["tx_isolation"] = "'SERIALIZABLE'"

db, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil {
return nil, err
}
} else {
return nil, err
}
}

errCheck := func(err error) bool {
sqlErr, ok := err.(*mysql.MySQLError)
if !ok {
Expand Down

0 comments on commit a58d77a

Please sign in to comment.