Saya mendapatkan "dial tcp 127.0.0.1:3306: connect: tidak dapat menetapkan alamat yang diminta" setelah beberapa waktu, ketika menggunakan beberapa goroutine bersamaan :
Sepertinya driver sql tidak dapat memperoleh port baru untuk membuat koneksi baru, tetapi jika demikian saya tidak mengerti mengapa itu tidak menggunakan kembali koneksi yang ada dari pool?
Saya memiliki DBStats berikut ketika kesalahan terjadi:
(sql.DBStats) {
MaxOpenConnections: (int) 0,
Koneksi Terbuka: (int) 64,
Digunakan: (int) 64,
Menganggur: (int) 0,
Jumlah Tunggu: (int64) 0,
WaitDuration: (waktu.Durasi) 0s,
MaxIdleClosed: (int64) 28252,
MaxLifetimeClosed: (int64) 0
}
Saya menggunakan go-sql-driver V1.4.1 dengan go 1.11.2, untuk mencapai mariaDB yang berjalan secara lokal sebagai wadah buruh pelabuhan.
Saya contoh di bawah ini saya menambahkan "panik" hanya untuk tidak dibanjiri oleh banyak kesalahan serupa.
// the below code is called repetitly from a configurable number of worker fed using channels (fan-out)
// Mark visa_card entry as migrated
query := fmt.Sprintf(UPDATE visa_card SET migrated=TRUE WHERE id_card=%s, this.idCard)
_, err = conf.MySql.ExecContext(ctx, query)
if err != nil {
log.Error(ctx, log.EventTypeBusiness, "", err)
spew.Dump(conf.MySql.Stats())
panic("the END")
}
return err
{"level":"info","dateTime":"2019-01-17T14:58:04.095+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"incoming request","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"","parameters":{"request_headers":{},"request_http_method":"POST","request_uri":"/startImportActiveCards"},"caller":"common/utils/log/ginLog.go:70"}
{"level":"error","dateTime":"2019-01-17T14:58:20.562+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"internal","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"startMigration","peer":"internal","caller":"migrator/migrate/migrateActiveCards.go:211","errorDetails":"dial tcp 127.0.0.1:3306: connect: cannot assign requested address"}
(sql.DBStats) {
MaxOpenConnections: (int) 0,
OpenConnections: (int) 50,
InUse: (int) 50,
Idle: (int) 0,
WaitCount: (int64) 0,
WaitDuration: (time.Duration) 0s,
MaxIdleClosed: (int64) 28258,
MaxLifetimeClosed: (int64) 0
}
panic: the END
*go-sql-driver V1.4.1
*Go version: go version go1.11.2 linux/amd64
*MariaDB 10.4.1 dalam wadah buruh pelabuhan
Server OS: Misalnya Debian 8.1 (Jessie), Windows 10
Coba ini.
db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(waktu.Minure)
Terima kasih banyak @methane atas tanggapan Anda yang sangat cepat, percobaan berhasil!
Saya masih sedikit terkejut bahwa nilai default tidak berfungsi dengan benar dan saya tidak mengerti mengapa tetapi Anda memang memecahkan masalah saya.
Lihat artikel ini.
http://techblog.en.klab-blogs.com/archives/31093990.html
Semua gambar dalam artikel hilang. Mereka hidup dalam artikel versi Jepang.
http://dsas.blog.klab.org/archives/2018-02/configure-sql-db.html
Komentar yang paling membantu
Coba ini.
db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(waktu.Minure)