Mysql sering hilang (Kesalahan 2006) di lingkungan produksi

Saya menjalankan situs web di Django 1.10, python3.4, mysqlclient, mysql5.5.

Saya memiliki beberapa perintah manajemen yang berjalan di latar belakang untuk berbagai tugas (seperti mengirim email, memperbarui tabel) pada waktu yang berbeda. Baru-baru ini, saya mulai melihat banyak Mysql hilang (Kesalahan 2006).

Saya mencoba mengubah connection_timeout menjadi lebih besar dari max_connection age. Hal ini memecahkan sebagian kecil masalah di mana Error 2006 berhenti terjadi pada fungsi yang berjalan di sebagian besar kasus, namun kasus lain tetap seperti itu dan sering melihat Error 2006.

Dalam beberapa kasus, saya mencoba menggunakan Django.db.connection.close() sebelum menjalankan suatu fungsi atau memasukkannya ke dalam loop coba - kecuali. Di tempat-tempat itu, kesalahan ini tidak terjadi lagi tetapi saya tidak dapat memasang loop coba-kecuali ini di setiap fungsi.

Apa akar penyebab kesalahan berulang Mysql ini hilang? Apa saja solusi berbeda dan apa solusi terbaik agar saya tidak perlu banyak mengubah kode saya?

Variabel Lainnya:

Kami meningkatkan dari Django 1.7 ke 1.10 dan memperbarui paket mysqlclient baru-baru ini dan masalah mungkin muncul setelah itu.

Baru saja sekitar pembaruan, lalu lintas di situs kami juga meningkat beberapa kali lipat. Apakah itu bisa menjadi pemicunya?


person sprksh    schedule 15.02.2017    source sumber


Jawaban (1)


Seperti yang terlihat di tempat lain, masalahnya mungkin karena kueri Anda terlalu panjang, atau server menutup koneksi karena tidak ada aktivitas. Itu sangat bergantung pada keadaan, tetapi tampaknya jika Anda tidak sedang melakukan transaksi (yang akan membuang kemungkinan kedua), Anda dapat menerapkan sesuatu yang mirip dengan Hook tersedia untuk percobaan ulang otomatis setelah kebuntuan dalam pengaturan Django dan mysql

person Marcos Dione    schedule 28.11.2017