mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
chore: add dsn for connection to mysql (#5060)
* chore: add dsn for connection to mysql * add comment * new comment * fix: validate dsn and adapt password
This commit is contained in:
parent
3ec2a898b8
commit
3c9bcfb864
|
@ -51,6 +51,9 @@ dbFile = "./filer.db" # sqlite db file
|
||||||
# ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
# ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
||||||
|
|
||||||
enabled = false
|
enabled = false
|
||||||
|
# dsn will take priority over "hostname, port, username, password, database".
|
||||||
|
# [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN]
|
||||||
|
dsn = "root@tcp(localhost:3306)/seaweedfs?collation=utf8mb4_bin"
|
||||||
hostname = "localhost"
|
hostname = "localhost"
|
||||||
port = 3306
|
port = 3306
|
||||||
username = "root"
|
username = "root"
|
||||||
|
|
|
@ -3,6 +3,8 @@ package mysql
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/go-sql-driver/mysql"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
|
@ -30,6 +32,7 @@ func (store *MysqlStore) GetName() string {
|
||||||
|
|
||||||
func (store *MysqlStore) Initialize(configuration util.Configuration, prefix string) (err error) {
|
func (store *MysqlStore) Initialize(configuration util.Configuration, prefix string) (err error) {
|
||||||
return store.initialize(
|
return store.initialize(
|
||||||
|
configuration.GetString(prefix+"dsn"),
|
||||||
configuration.GetString(prefix+"upsertQuery"),
|
configuration.GetString(prefix+"upsertQuery"),
|
||||||
configuration.GetBool(prefix+"enableUpsert"),
|
configuration.GetBool(prefix+"enableUpsert"),
|
||||||
configuration.GetString(prefix+"username"),
|
configuration.GetString(prefix+"username"),
|
||||||
|
@ -44,7 +47,7 @@ func (store *MysqlStore) Initialize(configuration util.Configuration, prefix str
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *MysqlStore) initialize(upsertQuery string, enableUpsert bool, user, password, hostname string, port int, database string, maxIdle, maxOpen,
|
func (store *MysqlStore) initialize(dsn string, upsertQuery string, enableUpsert bool, user, password, hostname string, port int, database string, maxIdle, maxOpen,
|
||||||
maxLifetimeSeconds int, interpolateParams bool) (err error) {
|
maxLifetimeSeconds int, interpolateParams bool) (err error) {
|
||||||
|
|
||||||
store.SupportBucketTable = false
|
store.SupportBucketTable = false
|
||||||
|
@ -57,19 +60,23 @@ func (store *MysqlStore) initialize(upsertQuery string, enableUpsert bool, user,
|
||||||
UpsertQueryTemplate: upsertQuery,
|
UpsertQueryTemplate: upsertQuery,
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlUrl := fmt.Sprintf(CONNECTION_URL_PATTERN, user, password, hostname, port, database)
|
if dsn == "" {
|
||||||
adaptedSqlUrl := fmt.Sprintf(CONNECTION_URL_PATTERN, user, "<ADAPTED>", hostname, port, database)
|
dsn = fmt.Sprintf(CONNECTION_URL_PATTERN, user, password, hostname, port, database)
|
||||||
if interpolateParams {
|
if interpolateParams {
|
||||||
sqlUrl += "&interpolateParams=true"
|
dsn += "&interpolateParams=true"
|
||||||
adaptedSqlUrl += "&interpolateParams=true"
|
}
|
||||||
|
}
|
||||||
|
cfg, err := mysql.ParseDSN(dsn)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can not parse DSN error:%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var dbErr error
|
var dbErr error
|
||||||
store.DB, dbErr = sql.Open("mysql", sqlUrl)
|
store.DB, dbErr = sql.Open("mysql", dsn)
|
||||||
if dbErr != nil {
|
if dbErr != nil {
|
||||||
store.DB.Close()
|
store.DB.Close()
|
||||||
store.DB = nil
|
store.DB = nil
|
||||||
return fmt.Errorf("can not connect to %s error:%v", adaptedSqlUrl, err)
|
return fmt.Errorf("can not connect to %s error:%v", strings.ReplaceAll(dsn, cfg.Passwd, "<ADAPTED>"), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
store.DB.SetMaxIdleConns(maxIdle)
|
store.DB.SetMaxIdleConns(maxIdle)
|
||||||
|
@ -77,7 +84,7 @@ func (store *MysqlStore) initialize(upsertQuery string, enableUpsert bool, user,
|
||||||
store.DB.SetConnMaxLifetime(time.Duration(maxLifetimeSeconds) * time.Second)
|
store.DB.SetConnMaxLifetime(time.Duration(maxLifetimeSeconds) * time.Second)
|
||||||
|
|
||||||
if err = store.DB.Ping(); err != nil {
|
if err = store.DB.Ping(); err != nil {
|
||||||
return fmt.Errorf("connect to %s error:%v", sqlUrl, err)
|
return fmt.Errorf("connect to %s error:%v", strings.ReplaceAll(dsn, cfg.Passwd, "<ADAPTED>"), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue