diff --git a/database/mysql.go b/database/mysql.go index 3a668716..8ac479f3 100644 --- a/database/mysql.go +++ b/database/mysql.go @@ -2,14 +2,14 @@ package database import ( "database/sql" + "time" _ "github.com/go-sql-driver/mysql" "github.com/lithammer/shortuuid/v3" "github.com/mritd/logger" ) -type MySQL struct { -} +type MySQL struct{} var mysqlDB *sql.DB @@ -24,12 +24,16 @@ const ( ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" ) -func NewMySQL(dsn string) Database { +func NewMySQL(dsn string, maxConns int) Database { db, err := sql.Open("mysql", dsn) if err != nil { logger.Fatalf("failed to open database connection (%s): %v", dsn, err) } + db.SetMaxOpenConns(maxConns) + db.SetMaxIdleConns(maxConns) + db.SetConnMaxLifetime(time.Minute * 3) + _, err = db.Exec(dbSchema) if err != nil { logger.Fatalf("failed to init database schema(%s): %v", dbSchema, err) diff --git a/main.go b/main.go index 5dde5ac2..4794d3ff 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,12 @@ func main() { EnvVars: []string{"BARK_SERVER_DSN"}, Value: "", }, + &cli.IntFlag{ + Name: "mysql-max-open-conns", + Usage: "mysql max open connections", + EnvVars: []string{"BARK_SERVER_MYSQL_MAX_OPEN_CONNS"}, + Value: 20, + }, &cli.BoolFlag{ Name: "serverless", Usage: "serverless mode", @@ -192,7 +198,7 @@ func main() { // use system environment variable. db = database.NewEnvBase() } else if dsn := c.String("dsn"); dsn != "" { - db = database.NewMySQL(dsn) + db = database.NewMySQL(dsn, c.Int("mysql-max-open-conns")) } else { db = database.NewBboltdb(c.String("data")) }