// Execute a SQL func (c *Canal) Execute(cmd string, args ...interface{}) (rr *mysql.Result, err error) { c.connLock.Lock() defer c.connLock.Unlock() retryNum := 3 for i := 0; i < retryNum; i++ { if c.conn == nil { c.conn, err = client.Connect(c.cfg.Addr, c.cfg.User, c.cfg.Password, "") if err != nil { return nil, errors.Trace(err) } } rr, err = c.conn.Execute(cmd, args...) if err != nil && err != mysql.ErrBadConn { return } else if err == mysql.ErrBadConn { c.conn.Close() c.conn = nil continue } else { return } } return }
func (t *testSyncerSuite) setupTest(c *C, flavor string) { var port uint16 = 3306 switch flavor { case mysql.MariaDBFlavor: port = 3316 } t.flavor = flavor var err error if t.c != nil { t.c.Close() } t.c, err = client.Connect(fmt.Sprintf("%s:%d", *testHost, port), *testUser, *testPassword, "") if err != nil { c.Skip(err.Error()) } // _, err = t.c.Execute("CREATE DATABASE IF NOT EXISTS test") // c.Assert(err, IsNil) _, err = t.c.Execute("USE test") c.Assert(err, IsNil) if t.b != nil { t.b.Close() } t.b = NewBinlogSyncer(100, flavor) err = t.b.RegisterSlave(*testHost, port, *testUser, *testPassword) c.Assert(err, IsNil) }
// DSN user:password@addr[?db] func (d driver) Open(dsn string) (sqldriver.Conn, error) { seps := strings.Split(dsn, "@") if len(seps) != 2 { return nil, errors.Errorf("invalid dsn, must user:password@addr[?db]") } var user string var password string var addr string var db string if ss := strings.Split(seps[0], ":"); len(ss) == 2 { user, password = ss[0], ss[1] } else if len(ss) == 1 { user = ss[0] } else { return nil, errors.Errorf("invalid dsn, must user:password@addr[?db]") } if ss := strings.Split(seps[1], "?"); len(ss) == 2 { addr, db = ss[0], ss[1] } else if len(ss) == 1 { addr = ss[0] } else { return nil, errors.Errorf("invalid dsn, must user:password@addr[?db]") } c, err := client.Connect(addr, user, password, db) if err != nil { return nil, err } return &conn{c}, nil }
func (s *schemaTestSuite) SetUpSuite(c *C) { var err error s.conn, err = client.Connect(fmt.Sprintf("%s:%d", *host, *port), "root", "", "") c.Assert(err, IsNil) s.d, err = NewDumper(*execution, fmt.Sprintf("%s:%d", *host, *port), "root", "") c.Assert(err, IsNil) s.d.SetErrOut(ioutil.Discard) _, err = s.conn.Execute("CREATE DATABASE IF NOT EXISTS test1") c.Assert(err, IsNil) _, err = s.conn.Execute("CREATE DATABASE IF NOT EXISTS test2") c.Assert(err, IsNil) str := `CREATE TABLE IF NOT EXISTS test%d.t%d ( id int AUTO_INCREMENT, name varchar(256), PRIMARY KEY(id) ) ENGINE=INNODB` _, err = s.conn.Execute(fmt.Sprintf(str, 1, 1)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 2, 1)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 1, 2)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 2, 2)) c.Assert(err, IsNil) str = `INSERT INTO test%d.t%d (name) VALUES ("a"), ("b"), ("\\"), ("''")` _, err = s.conn.Execute(fmt.Sprintf(str, 1, 1)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 2, 1)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 1, 2)) c.Assert(err, IsNil) _, err = s.conn.Execute(fmt.Sprintf(str, 2, 2)) c.Assert(err, IsNil) }
func (b *BinlogSyncer) registerSlave() error { var err error b.c, err = client.Connect(fmt.Sprintf("%s:%d", b.host, b.port), b.user, b.password, "") if err != nil { return errors.Trace(err) } //for mysql 5.6+, binlog has a crc32 checksum //before mysql 5.6, this will not work, don't matter.:-) if r, err := b.c.Execute("SHOW GLOBAL VARIABLES LIKE 'BINLOG_CHECKSUM'"); err != nil { return errors.Trace(err) } else { s, _ := r.GetString(0, 1) if s != "" { // maybe CRC32 or NONE // mysqlbinlog.cc use NONE, see its below comments: // Make a notice to the server that this client // is checksum-aware. It does not need the first fake Rotate // necessary checksummed. // That preference is specified below. if _, err = b.c.Execute(`SET @master_binlog_checksum='NONE'`); err != nil { return errors.Trace(err) } // if _, err = b.c.Execute(`SET @master_binlog_checksum=@@global.binlog_checksum`); err != nil { // return errors.Trace(err) // } } } if err = b.writeRegisterSlaveCommand(); err != nil { return errors.Trace(err) } if _, err = b.c.ReadOKPacket(); err != nil { return errors.Trace(err) } return nil }
func (s *Server) Execute(cmd string, args ...interface{}) (r *Result, err error) { retryNum := 3 for i := 0; i < retryNum; i++ { if s.conn == nil { s.conn, err = client.Connect(s.Addr, s.User.Name, s.User.Password, "") if err != nil { return nil, err } } r, err = s.conn.Execute(cmd, args...) if err != nil && err != ErrBadConn { return } else if err == ErrBadConn { s.conn = nil continue } else { return } } return }
func (s *schemaTestSuite) SetUpSuite(c *C) { var err error s.conn, err = client.Connect(fmt.Sprintf("%s:%d", *host, 3306), "root", "", "test") c.Assert(err, IsNil) }