root
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ dbname
db рдХреЗ рд▓рд┐рдП DSN рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкреНрд░рд╛рд░реВрдк root@tcp(localhost:3306)/dbname
рд╣реИред
рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдФрд░ mysql рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдкрд╛рд╕рд╡рд░реНрдб рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА no database selected
рдХреЗ рд╕рд╛рде рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреА рд╣реИред
Mysql рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ DSN рдХреЛ root:password@tcp(localhost:3306)/dbname
рдореЗрдВ рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ред
рдХреНрд╡реЗрд░реАрдЬрд╝ рдиреЗ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ https://github.com/ziutek/mymysql рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд┐рдирд╛ mysql рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЪреВрдВрдХрд┐ рдЙрд╕ рд░реЗрдкреЛ рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреЛрд▓рд╛рдВрдЧ рдбреАрдмреА рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдЬрдмрдХрд┐ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛрддрд╛ рд╣реИ, рдбреЛрдХрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдиреАрдп MySQL рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ dbname
рдФрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ organizations
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root@/dbname")
if err != nil {
panic(err)
}
defer db.Close()
if err := db.Ping(); err != nil {
panic(err)
}
rows, err := db.Query("SELECT * FROM organizations")
if err != nil {
panic(err)
}
fmt.Println(rows, err)
defer rows.Close()
}
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬрд╝
рдЧреЛ-рдПрд╕рдХреНрдпреВрдПрд▓-рдбреНрд░рд╛рдЗрд╡рд░/ [email protected] (d523deb1b23d913de5bdada721a6071e71283618)
$ go version
go version go1.10.1 windows/amd64
$ docker run -it --rm mysql --version
/usr/sbin/mysqld Ver 8.0.12 for Linux on x86_64 (MySQL Community Server - GPL)
рд╣рд╛рдп рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ ??
2018/09/20 11:52:57 http: panic serving [::1]:50052: this authentication plugin is not supported
goroutine 6 [running]:
рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ MySQL 8 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛, рдореБрдЭреЗ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреАред
#825 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯред MySQL 8.0 рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
@ рдореАрдереЗрди : рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред #825 рдмрдВрдж рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ 6be42e0ff99645d7d9626d779001a46e39c5f280
) рдкрд░ рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдорд╛рди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред рдиреЛрдЯ: рдореИрдВ рдЧреЛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ MySQL рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ :)ред
docker run -it --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
latest
рдЯреИрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 8.0.13
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ)package main
import (
"database/sql"
"fmt"
"strconv"
"time"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// Open connection
db, err := sql.Open("mysql", "root@/")
if err != nil {
panic(err)
}
// Test connection
err = db.Ping()
if err != nil {
panic(err)
}
// Create DB
_, err = db.Exec("CREATE DATABASE IF NOT EXISTS mydb")
if err != nil {
panic(err)
}
// Use DB
_, err = db.Exec("USE mydb")
if err != nil {
panic(err)
}
// Create table
_, err = db.Exec("CREATE TABLE IF NOT EXISTS mytable (k VARCHAR(255) PRIMARY KEY, v BLOB NOT NULL)")
if err != nil {
panic(err)
}
// Insert data concurrently
goroutineCount := 10
for i := 0; i < goroutineCount; i++ {
go func(i int) {
_, err = db.Exec("INSERT INTO mytable (k, v) VALUES (?, ?) ON DUPLICATE KEY UPDATE v = VALUES(v)", strconv.Itoa(i), []byte("some value"))
if err != nil {
fmt.Println(err)
} else {
fmt.Println("inserted value for key " + strconv.Itoa(i))
}
}(i)
}
// Wait a bit for all goroutines to finish.
time.Sleep(2 * time.Second)
}
рдореБрдЭреЗ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ:
inserted value for key 1
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
Error 1046: No database selected
рдХрднреА-рдХрднреА рдЕрдиреНрдп рдЧреЛрд░реЛрдЗрди рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
@philippgille рдЖрдкрдХреЛ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рдкреВрд▓ рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдХрдердиреЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
db.Exec("USE mydb")
рдпрд╣ рд╕рд┐рд░реНрдл рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ" рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ *рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкрд░
рдЖрдкрдХреЛ рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреАрдмреА рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ (рдЙрд░реНрдл рдбреАрдмреА) рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ @julienschmidt рдХреА рдЯрд┐рдкреНрдкрдгреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдиреЗ @рдорд┐рдереЗрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ 1.5.0 рдореЗрдВ рддрдп рд╣реИ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ 1.5.0 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
db.Exec("USE mydb")
рдпрд╣ рд╕рд┐рд░реНрдл рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ" рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ *рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкрд░
рдЖрдкрдХреЛ рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреАрдмреА рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ (рдЙрд░реНрдл рдбреАрдмреА) рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред