diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2023-12-21 05:20:58 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-20 16:20:58 -0800 |
| commit | 3c9bcfb864b6c06cdc8ca189655a896feab9d343 (patch) | |
| tree | c8f18a1015b5189cddf2f7b1ad8fcfed143f511a /weed | |
| parent | 3ec2a898b8ec2f2e07d12fbde74d2d303a686ec4 (diff) | |
| download | seaweedfs-3c9bcfb864b6c06cdc8ca189655a896feab9d343.tar.xz seaweedfs-3c9bcfb864b6c06cdc8ca189655a896feab9d343.zip | |
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
Diffstat (limited to 'weed')
| -rw-r--r-- | weed/command/scaffold/filer.toml | 3 | ||||
| -rw-r--r-- | weed/filer/mysql/mysql_store.go | 25 |
2 files changed, 19 insertions, 9 deletions
diff --git a/weed/command/scaffold/filer.toml b/weed/command/scaffold/filer.toml index 55876bea0..231e7510a 100644 --- a/weed/command/scaffold/filer.toml +++ b/weed/command/scaffold/filer.toml @@ -51,6 +51,9 @@ dbFile = "./filer.db" # sqlite db file # ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; 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" port = 3306 username = "root" diff --git a/weed/filer/mysql/mysql_store.go b/weed/filer/mysql/mysql_store.go index 14566d49b..f1a246575 100644 --- a/weed/filer/mysql/mysql_store.go +++ b/weed/filer/mysql/mysql_store.go @@ -3,6 +3,8 @@ package mysql import ( "database/sql" "fmt" + "github.com/go-sql-driver/mysql" + "strings" "time" "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) { return store.initialize( + configuration.GetString(prefix+"dsn"), configuration.GetString(prefix+"upsertQuery"), configuration.GetBool(prefix+"enableUpsert"), 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) { store.SupportBucketTable = false @@ -57,19 +60,23 @@ func (store *MysqlStore) initialize(upsertQuery string, enableUpsert bool, user, UpsertQueryTemplate: upsertQuery, } - sqlUrl := fmt.Sprintf(CONNECTION_URL_PATTERN, user, password, hostname, port, database) - adaptedSqlUrl := fmt.Sprintf(CONNECTION_URL_PATTERN, user, "<ADAPTED>", hostname, port, database) - if interpolateParams { - sqlUrl += "&interpolateParams=true" - adaptedSqlUrl += "&interpolateParams=true" + if dsn == "" { + dsn = fmt.Sprintf(CONNECTION_URL_PATTERN, user, password, hostname, port, database) + if interpolateParams { + dsn += "&interpolateParams=true" + } + } + cfg, err := mysql.ParseDSN(dsn) + if err != nil { + return fmt.Errorf("can not parse DSN error:%v", err) } var dbErr error - store.DB, dbErr = sql.Open("mysql", sqlUrl) + store.DB, dbErr = sql.Open("mysql", dsn) if dbErr != nil { store.DB.Close() 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) @@ -77,7 +84,7 @@ func (store *MysqlStore) initialize(upsertQuery string, enableUpsert bool, user, store.DB.SetConnMaxLifetime(time.Duration(maxLifetimeSeconds) * time.Second) 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 |
