// initConnParams may overwrite the socket file, // and refresh the password to check that works. func initConnParams(cp *sqldb.ConnParams, socketFile string) error { if socketFile != "" { cp.UnixSocket = socketFile } _, err := MysqlParams(cp) return err }
// NewMysqld creates a Mysqld object based on the provided configuration // and connection parameters. func NewMysqld(config *Mycnf, dba, allprivs, app, repl *sqldb.ConnParams, enablePublishStats bool) *Mysqld { noParams := sqldb.ConnParams{} if *dba == noParams { dba.UnixSocket = config.SocketFile } // create and open the connection pool for dba access dbaMysqlStatsName := "" dbaPoolName := "" if enablePublishStats { dbaMysqlStatsName = "MysqlDba" dbaPoolName = "DbaConnPool" } dbaMysqlStats := stats.NewTimings(dbaMysqlStatsName) dbaPool := dbconnpool.NewConnectionPool(dbaPoolName, *dbaPoolSize, *dbaIdleTimeout) dbaPool.Open(dbconnpool.DBConnectionCreator(dba, dbaMysqlStats)) // create and open the connection pool for allprivs access allprivsMysqlStatsName := "" if enablePublishStats { allprivsMysqlStatsName = "MysqlAllPrivs" } allprivsMysqlStats := stats.NewTimings(allprivsMysqlStatsName) // create and open the connection pool for app access appMysqlStatsName := "" appPoolName := "" if enablePublishStats { appMysqlStatsName = "MysqlApp" appPoolName = "AppConnPool" } appMysqlStats := stats.NewTimings(appMysqlStatsName) appPool := dbconnpool.NewConnectionPool(appPoolName, *appPoolSize, *appIdleTimeout) appPool.Open(dbconnpool.DBConnectionCreator(app, appMysqlStats)) return &Mysqld{ config: config, dba: dba, allprivs: allprivs, dbApp: app, dbaPool: dbaPool, appPool: appPool, replParams: repl, dbaMysqlStats: dbaMysqlStats, allprivsMysqlStats: allprivsMysqlStats, tabletDir: path.Dir(config.DataDir), } }
// MySQLConnParams builds the MySQL connection params. // It's valid only if you used MySQLOnly option. func (hdl *Handle) MySQLConnParams() (sqldb.ConnParams, error) { params := sqldb.ConnParams{ Charset: "utf8", DbName: hdl.dbname, } if hdl.Data == nil { return params, errors.New("no data") } iuser, ok := hdl.Data["username"] if !ok { return params, errors.New("no username") } user, ok := iuser.(string) if !ok { return params, fmt.Errorf("invalid user type: %T", iuser) } params.Uname = user if ipassword, ok := hdl.Data["password"]; ok { password, ok := ipassword.(string) if !ok { return params, fmt.Errorf("invalid password type: %T", ipassword) } params.Pass = password } if ihost, ok := hdl.Data["host"]; ok { host, ok := ihost.(string) if !ok { return params, fmt.Errorf("invalid host type: %T", ihost) } params.Host = host } if iport, ok := hdl.Data["port"]; ok { port, ok := iport.(float64) if !ok { return params, fmt.Errorf("invalid port type: %T", iport) } params.Port = int(port) } if isocket, ok := hdl.Data["socket"]; ok { socket, ok := isocket.(string) if !ok { return params, fmt.Errorf("invalid socket type: %T", isocket) } params.UnixSocket = socket } return params, nil }
// NewMysqld creates a Mysqld object based on the provided configuration // and connection parameters. // dbaName and appName are the base for stats exports, use 'Dba' and 'App', except in tests func NewMysqld(dbaName, appName string, config *Mycnf, dba, app, repl *sqldb.ConnParams) *Mysqld { if *dba == dbconfigs.DefaultDBConfigs.Dba { dba.UnixSocket = config.SocketFile } // create and open the connection pool for dba access dbaMysqlStatsName := "" dbaPoolName := "" if dbaName != "" { dbaMysqlStatsName = "Mysql" + dbaName dbaPoolName = dbaName + "ConnPool" } dbaMysqlStats := stats.NewTimings(dbaMysqlStatsName) dbaPool := dbconnpool.NewConnectionPool(dbaPoolName, *dbaPoolSize, *dbaIdleTimeout) dbaPool.Open(dbconnpool.DBConnectionCreator(dba, dbaMysqlStats)) // create and open the connection pool for app access appMysqlStatsName := "" appPoolName := "" if appName != "" { appMysqlStatsName = "Mysql" + appName appPoolName = appName + "ConnPool" } appMysqlStats := stats.NewTimings(appMysqlStatsName) appPool := dbconnpool.NewConnectionPool(appPoolName, *appPoolSize, *appIdleTimeout) appPool.Open(dbconnpool.DBConnectionCreator(app, appMysqlStats)) return &Mysqld{ config: config, dba: dba, dbApp: app, dbaPool: dbaPool, appPool: appPool, replParams: repl, dbaMysqlStats: dbaMysqlStats, TabletDir: TabletDir(config.ServerID), SnapshotDir: SnapshotDir(config.ServerID), } }
// EnableSSL will set the right flag on the parameters func EnableSSL(connParams *sqldb.ConnParams) { connParams.Flags |= C.CLIENT_SSL }