MySQL Sever gitti adlı 2006 hatası, sunucunun çalışıyor olmasına rağmen bağlanmayı reddettiği anlamına gelir. Hatanın ortaya çıkmasının bilinen yalnızca üç nedeni vardır. İlk neden sunucunun aşırı yüklenmiş olmasıdır. Bekleme süresi dolmuştur. İkinci neden - istemci çok acı verici bir paket göndermiştir. Üçüncü neden ise sunucunun tam olarak başlatılmamış olmasıdır. Ayrıca, hatanın hangi nedenlerle ortaya çıktığını ve bununla nasıl başa çıkılacağını ayrıntılı olarak ele alacağız.
Hata genellikle PHP, konsol istemcisi veya PhpMyAdmin kullanılarak veritabanına bağlanılmaya çalışıldığında ortaya çıkar:
Şimdi her bir durumu ayrı ayrı inceleyelim.
Bu makalenin başında belirtildiği gibi, olası nedenlerden biri bekleme süresinin dolmasıdır. Sunucu aşırı yüklenmiş olabilir ve tüm bağlantıları işleyerek yük ile başa çıkamıyor olabilir. Sunucu isteklerinin ne kadar sürdüğünü anlamak için, herhangi bir konsol istemcisi kullanabilir ve sunucuya bağlanabilirsiniz. Eğer bunu yapabiliyorsanız, herhangi bir isteği çalıştırın. Eğer sorguların işlenmesi çok zaman alıyorsa, MySQLTuner özel betiğini kullanarak MySQL'i optimize edebilirsiniz. Genellikle innodb_buffer_pool_size
parametresini ayarlayarak InnoDB motorunun havuz boyutunu artırın. En uygun değer yukarıdaki komut dosyası kullanılarak belirlenir.
Eğer 800 megabayt ise (başka herhangi bir boyut olabilir), ayarlayın:
$ sudo vi /etc/mysql/my.cnf
innodb_buffer_pool_size=800M
Sorunu çözmenin başka bir yolu daha vardır. Bu amaçla sunucudan gelen yanıt süresi artırılır. Bu görevi gerçekleştirmek için wait_timeout
parametresini değiştirmeniz gerekir. Bu, sunucudan bir yanıt beklemeniz gereken saniye cinsinden süredir.
Örneğin:
wait_timeout=500
Değişiklik yaparken, daha sonra sunucuyu yeniden başlatmayı unutmayın:
$ sudo systemctl restart mysql
Ya da:
$ sudo systemctl restart mariadb
Bir kullanıcının istemcisi çok fazla paket oluşturduğunda, sunucu bu hatayı üretecektir. Kullanılabilir paket boyutu (maksimum değer) max_allowed_packet
parametresi kullanılarak artırılabilir.
Örneğin:
$ sudo vi /etc/mysql/my.cnf
max_allowed_packet=128M
İstemciye özellikle dikkat edin, çünkü çok fazla istek gönderiyorsa, açıkça yanlış bir şey yapıyorsunuz demektir. En azından MySQL'e for
döngüleri kullanarak sorgu oluşturmayın.
MySQL veya MariaDB'yi Docker'da dağıtmaya karar verirseniz, benzer bir hatayla karşılaşmaya hazır olun. Konteynerin ilk başlatılması biraz daha fazla boş zaman gerektirir. Eğer konteyneri durdurup başlatarak başlatma işlemini tamamlamasına izin vermezseniz, veritabanı her zaman bu hatayı verecektir. Çözüm, konteyner verilerini veritabanından tamamen kaldırmaktır.
Bu şu şekilde yapılır:
$ docker-compose down
veya:
$ docker rm mysql-container
Ardından, yanlış başlatılmış veritabanının bulunduğu depolamayı (birimi) silmeniz gerekir. Ancak başlangıçta, tüm depoların listesine bakın:
$ docker volume ls
Sildikten sonra:
$ docker volume rm volume_name
Artık uygulamayı başlatmaya başlayabilirsiniz, sadece veritabanı sunucusu size hazır olduğunu söyleyene kadar bekleyin ve ona bağlanabilirsiniz.