Ani "MySQL server has gone away"

4 Cevap php

Bugün benim web sitelerinden biri göstermeye başladı

Error Number: 2006
MySQL server has gone away

Bu Apache 2.2.9 (Debian) altında çalışan düşük trafik istemci site ve MySQL 5.0.51a (CodeIgniter 1.7.1 çerçevesini kullanarak) PHP 5.2.6-1 + lenny3. Açıkçası hata ile ilgili reasearched ama tüm olası çözümleri bu oluyor büyük sorgular olduğunu ima zaman aşımına uğrar ve bağlantıyı sıfırlamak, ya da paket sınırlarını isabet edebilir. Ancak, bu basit sorgu ile işlenmiş küçük bir veritabanı var, durum böyle değil. Bu konuda emin olmak için ben bir satır, hala aynı hatayı dönmek için birkaç sorguları oluşur.

Veritabanı kimlik bile, mysql doğrudan giriş sitenin sorguları bazı çalıştırın ve anında doğru veri elde edebilirsiniz, gayet iyi. Orada aynı sunucu ve veritabanı, çok daha büyük sitelere bağlantıları üzerinde birçok diğer siteler vardır ve hepsi sorunumuz yok.

Denedim:

  • MySQL yeniden başlatılıyor
  • Bütün sunucuyu yeniden başlatmadan
  • Günlükleri hataları arıyor (Apache ve MySQL, hem hiçbiri)
  • Db kullanıcı izinlerini denetleme
  • mysql.connect_timeout değiştirilmesi ve default_socket_timeout PHP
  • max_allowed_packet MySQL değiştirme
  • official docs, forum ve "MySQL server has gone away" diyor SO her şeyi Okuma

New:

  • PHP kalıcı bağlantılarını devre dışı bırakma
  • Değiştirme wait_timeout ve connect_timeout MySQL

Update:

Bu benim komut dosyası yürütme zamanı ile ilişkili gibi görünüyor: Facebook PHP istemci kullanarak bazı bilgi alır ve bu çağrı, bugün rasgele başarısız gibi görünüyor, bu yüzden ben de Facebook veya MySQL hatasından kaynaklanan hiçbir veri yok. Ama benim için sürpriz, verilen çözümlerin hiçbiri zaman aşımı ile uğraşmak gibi görünüyor.

Herhangi bir fikir? Zaman ayırdığınız için teşekkür ederim!

4 Cevap

Ben güncelleme söylediğim gibi, ben Facebook bağlantı DB ile maksimum bağlantı süresi daha uzun sürer zaman MySQL ile sorun ortaya çıktığı sonucuna vardı. Önerilerin hiçbiri bu sınırlama dövmek olabilir, bu yüzden etrafında çalışmak ve ben gitti belki linki tahmin her zaman yeniden karar verdi.

Yani Facebook her görüşmeden sonra, ben aşağıdaki kodu kullanılır:

$this->load->database();
$this->db->reconnect();

CodeIgniter kullanırken bu özel çözüm ve db-> yeniden bağlanma AFAIK () fonksiyonu sürüm 1.7.2 bu yüzden çalışmak için güncellemiş yana kullanılabilir.

Teşekkürler cevaplar için herkes!

Muhtemelen PHP sizin kalıcı bağlantıları etkileyen dışında bir bağlantı zamanı. Ben zaman tüm bunları görmek için kullanılır. Timeout parametresi MySQL kendisinde olduğunu.

Your options include: - not using persistent connections - turning off idle timeout on the MySQL server - trapping the error

Ben her zaman kendi PDO sınıfa reconnection sarın, böylece PHP bağlanır ya ben bile hatırlamıyorum. Her durumda, bu kolay bir düzeltme var. Sorgusunda, yakalamak ve bağlayın.

Ben InnoDB ile geçmişte bu hatayı "oluşturulan" var. O motoru kullanıyorsanız, bir başarısızlığından sonra SHOW ENGINE INNODB STATUS çıkış nedir?

Diğer siteler çalışmak yana, biz sizin sitenize (ve sunucu) ile ilgili olduğunu varsayabiliriz. Resmi belgeler sunucu bağlantı kapatıldıktan sonra sorguları yürütmek için çalışırsanız bu gerçekleşebilir söz. Eğer veritabanı bağlantısı kapalı olabilecek bir isteğin sonuna doğru bir şey yapar CodeIgniter'daki herhangi bir kanca var mı?

Bu bir gecede bir görev olduğunu ve süreci uzun bir süre için çalışıyor vb FaceBook verileri alıyoruz o söz?

Ben başka bir küme veri taşıma ve biçimlerini dönüştürme vb Bu script genelinde bu verileri taşıma 7/24 çalışan bir yeni komut dosyası yaşadım. Ben ya da kalıcı bağlantıları olmadan, MySQL kütüphaneleri hala (bazen daha uzun bazen 5 dakika) birkaç dakika sonra dışarı düşecek buldum.

Benim durumumda için etrafında almak için bulduk tek yolu benim paketinde bir süre kontrol koymak ve ben sorgusunu yürütmeden önce yeniden son kez bu yana ne kadar kontrol etmek oldu. Ben daha büyük 2 dakika oldu ve eğer öyleyse, mysql_connect üzerinde "new_link" bayrağını (4 param) ayarlamak için sağlanması, yeniden bağlantı kurmak için ayarlanmış false olmadığını denetlemek için kurdum.

Bu değişen beri, ben yine aynı hata vardı hiç.