launchbadge/sqlx

Connection with mysql fails when using `127.0.0.1`

Closed this issue ยท 12 comments

Hehehe... lots of issues recently. Here is one more for you

For some reason, mysql 8 conection expects a domain name and it isn't possible to connect with 127.0.0.1:

export DATABASE_URL='mysql://FOO:BAR@127.0.0.1:3306/BAZ'

... error occurred while attempting to establish a TLS connection: InvalidDNSNameError

The same issue goes away when using localhost

a dns failure for localhost sounds like a system configuration problem, I often see it on fresh linux machines that don't have it setup in /etc/hosts

I completely misread that. Anyway.. heh. The solution is simple.

mysql://FOO:BAR@[127.0.0.1]:3306/BAZ

That's the standard syntax for using IPs in URLs.

Hum... That is strange. Now a new error arises:

error with configuration: invalid IPv6 address

This InvalidDNSNameError behavior only happens with MySQL 8. 127.0.0.1 works fine for PostgreSQL and MariaDB

I'm having the same issue with using an IP address for connecting also.

MySqlPool::connect("mysql://user:pass@192.168.0.21:3306/schema")?;

Error:
   0: error occurred while attempting to establish a TLS connection: InvalidDNSNameError
   1: InvalidDNSNameError

I was not aware of the square brackets being standard syntax, I've not seen that in my life - it doesn't seem very standard lol.

I switched to square brackets and now receive this error:

MySqlPool::connect("mysql://user:pass@[192.168.0.21]:3306/schema")?;

The application panicked (crashed).
Message:  URL ParseError { invalid IPv6 address }
Location: C:\Users\User Name\.cargo\registry\src\github.com-1ecc6299db9ec823\mysql-20.1.0\src\conn\opts.rs:960

The bottom issue is caused by the mysql-20.1 crate. If I use the mysql-20.1 crate directly I receive the same error.

However, the square brackets are not required by the mysql-20.1 crate, so that seems to be an SQLx exclusive

You can use this tool to convert your IPv4 to an IPv6 address: Convert IPv4 to IPv6

As an example, use mysql://FOO:BAR@[0:0:0:0:0:ffff:7f00:1]:3306/BAZ rather than mysql://FOO:BAR@127.0.0.1:3306/BAZ for your DATABASE_URL.

Got error: invalid IPv6 address with the suggested url format: mysql://FOO:BAR@[ip-address]:3306/BAZ.

And converting the ip-address to ipv6 leads to another error: error: error communicating with the server: failed to lookup address information: nodename nor servname provided, or not known

Well, the cause turns out to be rustls(webpki underneath)'s lack support of ipaddress; In Cargo.toml, just change "runtime-tokio-rustls" to "runtime-tokio-native-tls"(i use tokio, e.g.), the issue should be gone.

NOTE there seems no need to wrap ipaddress inside brackets: mysql://FOO:BAR@[ipaddress]:3306/BAZ -> mysql://FOO:BAR@ipaddress:3306/BAZ

Indeed, the runtime selection causes this issue in MySQL as noted by @Notmeor .

kotx commented

I switched to the native-tls backend as a temporary workaround. Works as expected.
Edit: whoops, didn't see Notmeor's comment above.

On my local machine, I just pointed it to localhost, instead of 127.0.0.1 and it worked. But not sure, it is a correct way or now?

Closing due to inactivity. Feel free to re-open this issue if desired.