func changeMasterArgs(params *mysql.ConnectionParams, status *proto.ReplicationStatus) []string { var args []string args = append(args, fmt.Sprintf("MASTER_HOST = '%s'", status.MasterHost)) args = append(args, fmt.Sprintf("MASTER_PORT = %d", status.MasterPort)) args = append(args, fmt.Sprintf("MASTER_USER = '******'", params.Uname)) args = append(args, fmt.Sprintf("MASTER_PASSWORD = '******'", params.Pass)) args = append(args, fmt.Sprintf("MASTER_CONNECT_RETRY = %d", status.MasterConnectRetry)) if params.SslEnabled() { args = append(args, "MASTER_SSL = 1") } if params.SslCa != "" { args = append(args, fmt.Sprintf("MASTER_SSL_CA = '%s'", params.SslCa)) } if params.SslCaPath != "" { args = append(args, fmt.Sprintf("MASTER_SSL_CAPATH = '%s'", params.SslCaPath)) } if params.SslCert != "" { args = append(args, fmt.Sprintf("MASTER_SSL_CERT = '%s'", params.SslCert)) } if params.SslKey != "" { args = append(args, fmt.Sprintf("MASTER_SSL_KEY = '%s'", params.SslKey)) } return args }
// refreshPassword uses the CredentialServer to refresh the password // to use. func refreshPassword(params *mysql.ConnectionParams) error { user, passwd, err := GetCredentialsServer().GetUserAndPassword(params.Uname) switch err { case nil: params.Uname = user params.Pass = passwd case ErrUnknownUser: default: return err } return nil }
// InitConnectionParams may overwrite the socket file, // and refresh the password to check that works. func InitConnectionParams(cp *mysql.ConnectionParams, socketFile string) error { if socketFile != "" { cp.UnixSocket = socketFile } params := *cp return refreshPassword(¶ms) }
// NewMysqld creates a Mysqld object based on the provided configuration // and connection parameters. // name is the base for stats exports, use 'Dba', except in tests func NewMysqld(name string, config *Mycnf, dba, repl *mysql.ConnectionParams) *Mysqld { if *dba == dbconfigs.DefaultDBConfigs.Dba { dba.UnixSocket = config.SocketFile } // create and open the connection pool for dba access mysqlStats := stats.NewTimings("Mysql" + name) dbaPool := dbconnpool.NewConnectionPool(name+"ConnPool", *dbaPoolSize, *dbaIdleTimeout) dbaPool.Open(dbconnpool.DBConnectionCreator(dba, mysqlStats)) return &Mysqld{ config: config, dba: dba, dbaPool: dbaPool, replParams: repl, TabletDir: TabletDir(config.ServerId), SnapshotDir: SnapshotDir(config.ServerId), } }