PhpMyAdmin aracılığıyla büyük bir sql dosyasını almaya çalıştım ... Ama hata göstermeye devam etti
'MySql sunucusu kayboldu'
Ne yapalım?
max_allowed_packet
. Biraz kaba, ama eğer işe yararsa aklı başında bir değer bulabilirsiniz.
PhpMyAdmin aracılığıyla büyük bir sql dosyasını almaya çalıştım ... Ama hata göstermeye devam etti
'MySql sunucusu kayboldu'
Ne yapalım?
max_allowed_packet
. Biraz kaba, ama eğer işe yararsa aklı başında bir değer bulabilirsiniz.
Yanıtlar:
Belirtildiği gibi burada :
MySQL sunucusunun en yaygın iki nedeni (ve düzeltmeleri) ortadan kalkmıştır (hata 2006):
Sunucu zaman aşımına uğradı ve bağlantıyı kapattı. Nasıl düzeltilir:
mysqld'in my.cnf yapılandırma dosyasındaki wait_timeout değişkeninin yeterince büyük olup olmadığını kontrol edin. Debian'da: saniyeyi
sudo nano /etc/mysql/my.cnf
ayarlayınwait_timeout = 600
(2006 hatası gittiğinde bu değeri değiştirebilir / azaltabilirsiniz), sonrasudo /etc/init.d/mysql restart
. Kontrol etmedim, ancak wait_timeout için varsayılan değer yaklaşık 28800 saniye (8 saat) olabilir.Sunucu yanlış veya çok büyük bir paket bıraktı. Mysqld çok büyük veya yanlış bir paket alırsa, istemcide bir şeylerin yanlış gittiğini varsayar ve bağlantıyı kapatır. My.cnf dosyasındaki max_allowed_packet değerini artırarak maksimum paket boyutu sınırını artırabilirsiniz. Debian'da: seçeneğini
sudo nano /etc/mysql/my.cnf
belirleyinmax_allowed_packet = 64M
(2006 hatası giderken bu değeri düzenleyebilir / azaltabilirsiniz), ardındansudo /etc/init.d/mysql restart
.
Düzenle:
MySQL seçenek dosyalarının komutlarının zaten yorum olarak mevcut olmadığına dikkat edin (örneğin php.ini dosyasında olduğu gibi). Eğer herhangi bir değişiklik / çimdik yazmalısınız Yani my.cnf
ya my.ini
ve koyun mysql/data
gibi seçeneklerin doğru grubu altında, dizin veya diğer yollardan herhangi birinde [client]
, [myslqd]
vb Örneğin:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Ardından sunucuyu yeniden başlatın. Değerlerini almak için mysql istemcisini yazın:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
MySQL sorgusunu çalıştırarak görebilirsiniz ) ve içe aktardığım dosyanın birkaç çok büyük kaydı vardı. (Windows çalışıyordum) my.ini dosyasını açtım ve değeri buna ayarladım: max_allowed_packet = 64M
MySQL'i yeniden başlattım ve içe aktarmayı yeniden çalıştırdım.
wait_timeout
Çizgi bulamıyorum
Benim için bu çözüm işe yaramadı, bu yüzden
SET GLOBAL max_allowed_packet=1073741824;
SQL istemcimde.
MYSql hizmeti çalışırken bunu değiştiremiyorsanız, hizmeti durdurmalı ve "my.ini" dosyasındaki değişkeni değiştirmelisiniz.
Örneğin:
max_allowed_packet=20M
php.ini
(cevapta @GBD tarafından önerildiği gibi) hem dosyayı hem de MySQL yapılandırma dosyasını my.ini
değiştirmek zorunda kaldım.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
Bir istemciyi ayarlamak ve daha sonra büyük .sql
dosyayı başka bir oturumda içe aktarmak iyi çalışır.
XAMPP üzerinde çalışıyorsanız, MySQL Server'ın aşağıdaki değişiklikler ile ilgili sorunu ortadan kaldırabilirsiniz.
my.ini dosyanızı açın my.ini konumunuz (D: \ xampp \ mysql \ bin \ my.ini)
aşağıdaki değişken değerlerini değiştir
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Varsayılan değerlerle çalışıyorsanız, mysql yapılandırmanızı optimize etmek için çok fazla alanınız vardır.
Önerdiğim ilk adım max_allowed_packet'i 128M'ye yükseltmektir.
Ardından MySQL Ayarlama Primer komut dosyasını indirin ve çalıştırın. Daha iyi performans için yapılandırmanızın çeşitli yönlerine önerilerde bulunur.
Ayrıca MySQL ve PHP'de zaman aşımı değerlerinizi ayarlamaya bakın.
İçe aktardığınız dosya ne kadar büyük (dosya boyutu) ve PHPMyAdmin yerine mysql komut satırı istemcisini kullanarak dosyayı içe aktarabiliyor musunuz?
OS X'te MAMP kullanıyorsanız, max_allowed_packet
MySQL şablonundaki değeri değiştirmeniz gerekecektir .
Bunu şurada bulabilirsiniz: Dosya> Şablonu düzenle> MySQL my.cnf
Sonra sadece arayın max_allowed_packet
, değeri değiştirin ve kaydedin.
Bu kısa /etc/mysql/my.cnf dosyası ile sorunumu çözdüm:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
Bunun olmasının bir başka nedeni de hafızanın bitmesidir. / Var / log / messages öğesini kontrol edin ve my.cnf dosyanızın mysqld'in makinenizden daha fazla bellek ayırmasına neden olacak şekilde ayarlanmadığından emin olun.
MySQL işlemi aslında çekirdek tarafından öldürülebilir ve sonra farkında olmadan "safe_mysqld" işlemi tarafından yeniden başlatılabilir.
Başınızı kullanın ve başınızın ne olduğunu görmek için çalışırken bellek ayırmayı izleyin.
değiştirmeden önce my.cnf dosyasını yedekleyin.
16 GB SQL dosyasına aktardığımda bu hatayı ve diğer ilgili hataları yaşadım. Benim için, [mysqld] bölümünde my.ini dosyasını düzenleme ve aşağıdakileri ayarlama (birkaç farklı gönderiye göre):
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Windows altında çalışıyorsanız, kontrol paneline, hizmetlere gidin ve MySQL ayrıntılarına bakın ve my.ini'nin nerede olduğunu göreceksiniz. Ardından, my.ini dosyasını düzenleyip kaydettikten sonra, mysql hizmetini yeniden başlatın (veya bilgisayarı yeniden başlatın).
HeidiSQL kullanıyorsanız, bunu kullanarak bunların bir kısmını veya tümünü de ayarlayabilirsiniz.
"Max_allowed_packet" i 1024M olarak güncelledim, ancak hala çalışmıyor. Benim dağıtım betiğimin çalıştığı ortaya çıktı:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Bu şekilde kullanıyorsanız, komut satırından açıkça daha büyük bir sayı belirttiğinizden emin olun.
Verileriniz veri içeriyorsa BLOB
:
Komut satırından veri içe aktarmanın BLOB verilerinde boğulma gibi göründüğüne ve 'MySQL sunucusu gitti' hatasına neden olduğuna dikkat edin.
Bundan kaçınmak için, mysqldump öğesini ancak --hex-blob
bayrağıyla yeniden oluşturun :
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
veri dosyasını diğer metinler arasında ikili yerine onaltılık değerlerle yazar.
PhpMyAdmin ayrıca "Onaltılık gösterimde ikili sütunları dökümü (örneğin," abc "0x616263 olur)" seçeneğine sahiptir.
Uzun süredir devam eden bir hata olduğunu unutmayın (Aralık 2015 itibariyle), GEOM
sütunların dönüştürülmediği anlamına gelir :
mysqldump kullanarak GEOMETRY sütunu içeren bir tablo yedeklensin mi?
bu nedenle PhpMyAdmin gibi bir program kullanmak tek geçici çözüm gibi görünüyor (yukarıda belirtilen seçenek GEOM sütunlarını doğru bir şekilde dönüştürüyor).
Başarısız olmak uzun zaman alıyorsa, wait_timeout
değişkeni büyütün .
Hemen başarısız olursa, max_allowed_packet
değişkeni büyütün ; hala çalışmıyorsa, komutun geçerli SQL olduğundan emin olun. Benim herşeyi berbat eden alıntılardan kaçmıştı.
Ayrıca, mümkünse, tek bir SQL komutunun ekleme sayısını 1000 ile sınırlamayı düşünün. INSERT ... bölümünü her n insert'i yeniden ekleyerek tek bir komuttan birden fazla ifade oluşturan bir komut dosyası oluşturabilirsiniz.
i benzer bir hata var .. Bu sadece açık my.ini dosyasını çözmek için ... hiçbir satırda 36 izin verilen maksimum paket boyutu yani değerini değiştirin. max_allowed_packet = 20 milyon
Veritabanı çoğaltırken benzer bir hata yaşadım (MySQL sunucusu gitti ...), ama mysql.server yeniden başlatmayı yeniden başlatmayı denediğimde hata aldım
ERROR! The server quit without updating PID ...
Bunu şu şekilde çözdüm: Applications / Utilities'i açtım / Activity Monitor'u çalıştırdım
quit mysqld
sonra hata sorununu çözebildim
mysql.server restart
Uzun süre kalmak ve ağır veri ile mysql bağlantısı içeren bazı büyük hesaplamalar yapıyorum. Bu "Mysql git buradan sorunu" ile karşı karşıya idi. Bu yüzden t sorguları optimize çalıştı ama bana yardımcı olmadı sonra varsayılan olarak daha düşük bir değere ayarlanmış mysql değişkenler sınırını artırdı.
wait_timeout max_allowed_packet
Size uygun olanı sınırlamak için Herhangi Bir Sayı * 1024 (Bayt) olmalıdır. ' mysql -u kullanıcı adı - p ' komutunu kullanarak terminale giriş yapabilir ve bu değişken limitlerini kontrol edebilir ve değiştirebilirsiniz.
GoDaddy paylaşılan barındırma hesaplarında, PHP.ini vb dosyalarını değiştirmek zordur. Ancak, başka bir yol var ve benim için mükemmel çalıştı. (Ben başarıyla 3100 satır ve 145 cols içeren bir 3.8 Mb .sql metin dosyası yükledim. PhpMyAdmin IMPORT komutunu kullanarak, korkunç MySQL sunucusu hata gitti ve başka bilgi yok alıyordu .)
Matt Butcher'ın doğru cevabı verdiğini buldum. Matt gibi, ısırık boyutunda MySQL veritabanlarını dışa aktarmaktan, büyük ithalatı daha küçük olanlara dönüştüren komut dosyaları yazmaya kadar her türlü hileyi denedim. Ama işte işe yarayan:
(1) CPANEL ---> DOSYALAR (grup) ---> YEDEKLEME
(2a) "Kısmi Yedeklemeler" başlığı
altında ... (2b) "MySQL Veritabanı Yedeklemesi İndir"
(2c) altında Veritabanınızı seçin ve bir yedek indirin (bu adım isteğe bağlı, ancak akıllıca)
(3a) Doğrudan 2b'nin sağında, "MySQL Veritabanı Yedeklemesini Geri Yükle" başlığı altında
(3b) Yerel sürücünüzden .SQL içe aktarma dosyasını seçin
(3c) Gerçek mutluluk sizindir (kısa bir süre içinde ....) Mine aldı 5 saniye
Tek bir tablo almak için bu yöntemi kullanabildim. Veritabanımdaki hiçbir şey etkilenmedi - ancak yukarıdaki adım (2) 'ye karşı koruma amaçlanmıştır.
Notlar:
a. Bir .SQL içe aktarma dosyasının nasıl oluşturulacağından emin değilseniz, bir tabloyu dışa aktarmak ve bu dosya yapısını değiştirmek için phpMyAdmin kullanın.
KAYNAK: Matt Butcher 2010 Makalesi
max_allowed_packet
yardımcı olmazsa..sql
Sequel Pro üzerinden veritabanımıza bir dosya aktarırken sizinle aynı hatayı alıyordum .
Hata hala yukarı kadar devam etti max_allowed_packet
, 512M
bu yüzden bunun yerine komut satırında alma çalıştırdı:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Aşağıdaki hatayı verdi:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Birkaç yararlı StackOverflow soruları buldum:
Benim durumumda, .sql
dosyam biraz bozuk veya başka bir şeydi. Aldığımız MySQL dökümü, bir araya getirilmesi ve daha sonra sıkıştırılması gereken iki zip dosyasında geliyor. Ben unzipping başlangıçta bazı garip karakterler ve kodlamalar ile dosya bırakarak kesildi düşünüyorum. Taze bir MySQL dökümü almak ve unzipping benim için çalıştı.
Başkalarının max_allowed_packet
değişkenin artmasının yardımcı olmadığını bulması durumunda bunu buraya eklemek istedim .
Paket büyüklüğü veya zaman aşımı ile ilgili çözümlerin hiçbiri benim için fark etmedi. SSL'yi devre dışı bırakmam gerekiyordu
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
İle aynı sorunu yaşadım
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
Phpmyadmin \ xampp \ mysql \ bin \ my.ini dosyasında sadece
[mysqldump]
max_allowed_packet=110M
Bu sadece mysqldump -u root -p dbname içindir. Yukarıdaki kod ile değiştirerek sorunumu çözdüm
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M