go-mysql-org / go-mysql

a powerful mysql toolset with Go
MIT License
4.58k stars 976 forks source link

Make protocol version check more strict #878

Closed dveeden closed 4 months ago

dveeden commented 4 months ago

Closes #876

MySQL has:

When connecting to port 33060 instead of 3306 by mistake the version check didn't return an error when it should have.

$ go run go-mysql-876.go 
2024/05/13 22:08:39 failed to query: readInitialHandshake: invalid protocol version 11, expected 10. This might be X Protocol, make sure to connect to the right port
exit status 1
package main

import (
    "database/sql"
    "log"

    _ "github.com/go-mysql-org/go-mysql/driver"
)

func main() {
    db, err := sql.Open("mysql", "root@127.0.0.1:33070")
    if err != nil {
        log.Fatalf("failed to connect to mysql: %s", err)
    }
    defer db.Close()

    _, err = db.Exec("DO 1")
    if err != nil {
        log.Fatalf("failed to query: %s", err)
    }
}
podman run -p 3307:3306 -p 33070:33060 --env MYSQL_ALLOW_EMPTY_PASSWORD=1 -it mysql:8.4.0