Hey everyone,
I’m currently setting up a mysql database on DigitalOcean and hit the following error when connecting:
failed to connect to the database: default addr for "DATABASE_CONN_STR" network unknown
Luckily this turned out to be a pretty easy fix. In the mysql driver repo you can see that the only scenario where this error is shown is when the network doesn’t match “tcp” or “unix”.
// Set default network if empty
if cfg.Net == "" {
cfg.Net = "tcp"
}
// Set default address if empty
if cfg.Addr == "" {
switch cfg.Net {
case "tcp":
cfg.Addr = "127.0.0.1:3306"
case "unix":
cfg.Addr = "/tmp/mysql.sock"
default:
return errors.New("default addr for network '" + cfg.Net + "' unknown")
}
} else if cfg.Net == "tcp" {
cfg.Addr = ensureHavePort(cfg.Addr)
}
To fix it, all that was required was to wrap part of the connection string in tcp or unix.
root:password@db-mysite.com:1234/db_name?ssl-mode=required&timeout=10s
root:password@tcp(db-mysite.com:1234)/db_name?ssl-mode=required&timeout=10s
Note that the host name and port on the second line is now wrapped in “tcp(…)”. In my case I didn’t have either set so I find it a bit strange that the “set default address if empty” check was triggered.
Thanks to this stackoverflow post and github link for the info:
Pingback: Golang and MySQL – DigitalOcean managed cluster | What I Broke – JavaScript, C#, AWS and General Development