Genel olarak hata:
Hata: 2006 ( CR_SERVER_GONE_ERROR
) - MySQL sunucusu kullanımdan kaldırıldı
istemcinin sunucuya soru gönderemediği anlamına gelir .
mysql
ithalat
Özel durumunuzda veritabanı dosyasını üzerinden alırken mysql
, bu büyük olasılıkla SQL dosyasındaki sorguların bazılarının içe aktarılamayacak kadar büyük olduğu ve sunucuda yürütülemediği anlamına gelir, bu nedenle istemci ilk oluşan hatada başarısız olur.
Yani aşağıdaki olasılıklara sahipsiniz:
İçin kuvvet ekle seçeneği ( -f
)mysql
Devam etmek ve sorguların geri kalanını yürütmek .
Veritabanının önbellekle ilgili zaten önemli olmayan bazı büyük sorguları varsa yararlıdır.
Artırın max_allowed_packet
vewait_timeout
sunucu yapılandırmanızda (örn. ~/.my.cnf
).
--skip-extended-insert
Büyük sorguları yıkmak için seçeneği kullanarak veritabanını boşaltın. Sonra tekrar içe aktarın.
İçin --max-allowed-packet
seçenek uygulamayı deneyin mysql
.
Ortak nedenler
Genel olarak bu hata aşağıdakiler gibi birkaç anlama gelebilir:
sunucuya yapılan bir sorgu yanlış veya çok büyük,
Çözüm: Değişkeni artırınmax_allowed_packet
.
Değişkenin [mysqld]
bölüm altında olduğundan emin olun [mysql]
.
Test için büyük sayılar kullanmaktan korkmayın (gibi 1G
).
MySQL / MariaDB sunucusunu yeniden başlatmayı unutmayın.
Değerin doğru ayarlandığını iki kez kontrol edin:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
İstemci tarafındaki TCP / IP bağlantısından bir zaman aşımı var.
Çözüm: Değişkeni artırınwait_timeout
.
Sunucu bağlantısı kapatıldıktan sonra bir sorgu çalıştırmayı denediniz.
Çözüm: Uygulamadaki bir mantık hatası düzeltilmelidir.
Ana bilgisayar adı aramaları başarısız oldu (örn. DNS sunucusu sorunu) veya sunucu ile başlatıldı --skip-networking
seçenek .
Başka bir olasılık da güvenlik duvarınızın MySQL portunu engellemesidir (örneğin varsayılan olarak 3306).
Çalışan iplik öldü, tekrar deneyin.
Sorguyu yürütürken sunucunun öldüğü bir hatayla karşılaştınız.
Farklı bir ana bilgisayarda çalışan bir istemcinin bağlanmak için gerekli ayrıcalıkları yoktur.
Ve daha pek çoğu, daha fazla bilgi için: B.5.2.9 MySQL sunucusu yok oldu .
Hata ayıklama
İşte uzman düzeyinde birkaç hata ayıklama fikri:
Günlükleri kontrol edin, örn.
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Senin aracılığıyla bağlantıyı test mysql
, telnet
veya ping fonksiyonları (örn mysql_ping
PHP'de).
tcpdump
MySQL iletişimini koklamak için kullanın (soket bağlantısı için çalışmaz), örneğin:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Linux'ta kullanın strace
. BSD / Mac kullanımda dtrace
/ dtruss
, örneğin
sudo dtruss -a -fn mysqld 2>&1
Bkz: DTracing MySQL ile çalışmaya başlama
MySQL sunucusunda veya istemcide hata ayıklama hakkında daha fazla bilgi için: 26.5 MySQL Hata Ayıklama ve Taşıma .
Başvuru için, istemci komutunun hatalarını sql-common/client.c
atmaktan sorumlu dosyadaki kaynak kodunu kontrol edin CR_SERVER_GONE_ERROR
.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}