🪐
PlanetScaleに接続せずローカルへ接続し怒られた【Go】dial tcp 127.0.0.1:3306 ...
症状
dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.
PlanetScale
へ接続するはずがなぜかローカル127.0.0.1:3306
へ接続し、エラーになるので沼りかけました。
PlanetScale
上でDBを作成し、GoのSampleソース
と.env
を持って疎通確認しようとするとエラーと怒られてしまいました。
解決策
環境変数DSN
を設定定義する
これだけでした。
原因
環境変数を.env
ファイルに記述していました。
しかし、そのファイル取り込み処理が存在しないので環境変数設定が出来ていませんでした。
ターミナルから設定定義する or ソース上で設定する必要がありました。
今回は前者で対応しました。
環境変数のセット
****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true
は自身で置き換えてください
Bash
DSN="****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true"
PowerShell
env:DSN = "****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true"
以下環境等
環境
- Windows10(22H2)
- Go 1.20
ソースプログラム
main.go
package main
import (
"database/sql"
"log"
"os"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", os.Getenv("DSN"))
if err != nil {
log.Fatalf("failed to connect: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("failed to ping: %v", err)
}
log.Println("Successfully connected to PlanetScale!")
}
.env
DSN=****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true
.env
ファイルは無くてもいいです。
疎通確認
環境変数を設定しないと以下のようなエラーになります。
1. エラー確認
go run .\main.go
YYYY/MM/DD hh:mm:ss failed to ping: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.
exit status 1
2. 環境変数を設定する。(再出)
****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true
は自身で置き換えてください
Bash
DSN="****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true"
PowerShell
env:DSN = "****************:************@tcp(us-east.connect.psdb.cloud)/products_db?tls=true&interpolateParams=true"
3. 実行&成功
go run main.go
YYYY/MM/DD hh:mm:ss Successfully connected to PlanetScale!
無事に成功しました。
些細な問題ですがエラーメッセージ通りに解釈すると沼りそうです...
余談
Dockerを用いた場合、同様エラーを出している人もいるようです。
リンク
Discussion