// OpenTopology returns the DB instance for the orchestrator backed database func OpenOrchestrator() (*sql.DB, error) { if config.Config.DatabaselessMode__experimental { return nil, nil } mysql_uri := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%ds&readTimeout=%ds", config.Config.MySQLOrchestratorUser, config.Config.MySQLOrchestratorPassword, config.Config.MySQLOrchestratorHost, config.Config.MySQLOrchestratorPort, config.Config.MySQLOrchestratorDatabase, config.Config.MySQLConnectTimeoutSeconds, config.Config.MySQLOrchestratorReadTimeoutSeconds, ) if config.Config.MySQLOrchestratorUseMutualTLS { mysql_uri, _ = SetupMySQLOrchestratorTLS(mysql_uri) } db, fromCache, err := sqlutils.GetDB(mysql_uri) if err == nil && !fromCache { initOrchestratorDB(db) // do not show the password but do show what we connect to. safe_mysql_uri := fmt.Sprintf("%s:?@tcp(%s:%d)/%s?timeout=%ds", config.Config.MySQLOrchestratorUser, config.Config.MySQLOrchestratorHost, config.Config.MySQLOrchestratorPort, config.Config.MySQLOrchestratorDatabase, config.Config.MySQLConnectTimeoutSeconds) log.Debugf("Connected to orchestrator backend: %v", safe_mysql_uri) if config.Config.MySQLOrchestratorMaxPoolConnections > 0 { log.Debugf("Orchestrator pool SetMaxOpenConns: %d", config.Config.MySQLOrchestratorMaxPoolConnections) db.SetMaxOpenConns(config.Config.MySQLOrchestratorMaxPoolConnections) } db.SetMaxIdleConns(10) } return db, err }
// OpenTopology returns a DB instance to access a topology instance func OpenTopology(host string, port int) (*sql.DB, error) { mysql_uri := fmt.Sprintf("%s:%s@tcp(%s:%d)/?timeout=%ds", config.Config.MySQLTopologyUser, config.Config.MySQLTopologyPassword, host, port, config.Config.MySQLConnectTimeoutSeconds) db, _, err := sqlutils.GetDB(mysql_uri) db.SetMaxOpenConns(config.Config.MySQLTopologyMaxPoolConnections) db.SetMaxIdleConns(config.Config.MySQLTopologyMaxPoolConnections) return db, err }
func (this *Inspector) InitDBConnections() (err error) { inspectorUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName) if this.db, _, err = sqlutils.GetDB(inspectorUri); err != nil { return err } if err := this.validateConnection(); err != nil { return err } if impliedKey, err := mysql.GetInstanceKey(this.db); err != nil { return err } else { this.connectionConfig.ImpliedKey = impliedKey } if err := this.validateGrants(); err != nil { return err } // if err := this.restartReplication(); err != nil { // return err // } if err := this.validateBinlogs(); err != nil { return err } if err := this.applyBinlogFormat(); err != nil { return err } return nil }
// OpenTopology returns the DB instance for the orchestrator backed database func OpenOrchestrator() (*sql.DB, error) { mysql_uri := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%ds", config.Config.MySQLOrchestratorUser, config.Config.MySQLOrchestratorPassword, config.Config.MySQLOrchestratorHost, config.Config.MySQLOrchestratorPort, config.Config.MySQLOrchestratorDatabase, config.Config.MySQLConnectTimeoutSeconds) db, fromCache, err := sqlutils.GetDB(mysql_uri) if err == nil && !fromCache { if !config.Config.SkipOrchestratorDatabaseUpdate { initOrchestratorDB(db) } db.SetMaxIdleConns(10) } return db, err }
func (this *Applier) InitDBConnections() (err error) { applierUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName) if this.db, _, err = sqlutils.GetDB(applierUri); err != nil { return err } singletonApplierUri := fmt.Sprintf("%s?timeout=0", applierUri) if this.singletonDB, _, err = sqlutils.GetDB(singletonApplierUri); err != nil { return err } this.singletonDB.SetMaxOpenConns(1) if err := this.validateConnection(this.db); err != nil { return err } if err := this.validateConnection(this.singletonDB); err != nil { return err } if impliedKey, err := mysql.GetInstanceKey(this.db); err != nil { return err } else { this.connectionConfig.ImpliedKey = impliedKey } return nil }
func GetMasterKeyFromSlaveStatus(connectionConfig *ConnectionConfig) (masterKey *InstanceKey, err error) { currentUri := connectionConfig.GetDBUri("information_schema") db, _, err := sqlutils.GetDB(currentUri) if err != nil { return nil, err } err = sqlutils.QueryRowsMap(db, `show slave status`, func(rowMap sqlutils.RowMap) error { masterKey = &InstanceKey{ Hostname: rowMap.GetString("Master_Host"), Port: rowMap.GetInt("Master_Port"), } return nil }) return masterKey, err }
// OpenTopology returns the DB instance for the orchestrator backed database func OpenOrchestrator() (*sql.DB, error) { if config.Config.DatabaselessMode__experimental { return nil, nil } mysql_uri := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?timeout=%ds", config.Config.MySQLOrchestratorUser, config.Config.MySQLOrchestratorPassword, config.Config.MySQLOrchestratorHost, config.Config.MySQLOrchestratorPort, config.Config.MySQLOrchestratorDatabase, config.Config.MySQLConnectTimeoutSeconds) if config.Config.MySQLOrchestratorUseMutualTLS { mysql_uri, _ = SetupMySQLOrchestratorTLS(mysql_uri) } db, fromCache, err := sqlutils.GetDB(mysql_uri) if err == nil && !fromCache { initOrchestratorDB(db) db.SetMaxIdleConns(10) } return db, err }
func (this *EventsStreamer) InitDBConnections() (err error) { EventsStreamerUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName) if this.db, _, err = sqlutils.GetDB(EventsStreamerUri); err != nil { return err } if err := this.validateConnection(); err != nil { return err } if err := this.readCurrentBinlogCoordinates(); err != nil { return err } if err := this.initBinlogReader(this.initialBinlogCoordinates); err != nil { return err } return nil }
// queryHost connects to a given host, issues the given set of queries, and outputs the results // line per row in tab delimited format func queryHost(host string, user string, password string, defaultSchema string, queries []string, timeout float64) error { mysqlURI := fmt.Sprintf("%s:%s@tcp(%s)/%s?timeout=%fs", user, password, host, defaultSchema, timeout) db, _, err := sqlutils.GetDB(mysqlURI) if err != nil { return err } for _, query := range queries { resultData, err := sqlutils.QueryResultData(db, query) if err != nil { return err } for _, row := range resultData { output := []string{host} for _, rowCell := range row { output = append(output, rowCell.String) } rowOutput := strings.Join(output, "\t") fmt.Println(rowOutput) } } return nil }
// GetReplicationLag returns replication lag for a given connection config; either by explicit query // or via SHOW SLAVE STATUS func GetReplicationLag(connectionConfig *ConnectionConfig, replicationLagQuery string) (replicationLag time.Duration, err error) { dbUri := connectionConfig.GetDBUri("information_schema") var db *gosql.DB if db, _, err = sqlutils.GetDB(dbUri); err != nil { return replicationLag, err } if replicationLagQuery != "" { var floatLag float64 err = db.QueryRow(replicationLagQuery).Scan(&floatLag) return time.Duration(int64(floatLag*1000)) * time.Millisecond, err } // No explicit replication lag query. err = sqlutils.QueryRowsMap(db, `show slave status`, func(m sqlutils.RowMap) error { secondsBehindMaster := m.GetNullInt64("Seconds_Behind_Master") if !secondsBehindMaster.Valid { return fmt.Errorf("replication not running") } replicationLag = time.Duration(secondsBehindMaster.Int64) * time.Second return nil }) return replicationLag, err }