Hata Kodu: 2013. Sorgu sırasında MySQL sunucusuyla bağlantı kesildi


252

Hata Kodu: 2013 aldım . MySQL Workbench kullanarak bir tabloya bir dizin eklemeye çalıştığımda sorgu hatası sırasında MySQL sunucusuyla bağlantı kesildi. Ben de uzun sorgu çalıştırdığınızda göründüğünü fark ettim.

Zaman aşımı değerini artırmak için uzak var mı?

Yanıtlar:


473

MySQL WorkBench'in yeni sürümlerinde belirli zaman aşımlarını değiştirme seçeneği vardır.

Benim için Düzenle → Tercihler → SQL Editör → DBMS bağlantısı okuma zaman aşımı (saniye cinsinden) altındaydı: 600

Değeri 6000 olarak değiştirdi.

Ayrıca tüm veri kümesi aramak istediğiniz her zaman bir sınır koymak gibi kontrol sınırsız satır satır yorucu olur.


2
Bu sınırı 99.999 saniyenin üzerine çıkarmak mümkün mü? DBMS connection read time outAlan sadece 5 rakamlara kadar kabul edin ve 0'a alanını varsayılan ayar parametresi (600 saniye) eşdeğerdir. (Windows 7 64 bit Ultimate, MySQL Çalışma Tezgahı 5.2.47 CE)
Franck Dernoncourt


4
Düzenle → Tercihler → SQL Sorguları
Jon

7
Yeniden başlattıktan sonra, okuma zaman aşımı 6000'e ayarlanmış olsa bile Hata 2013'ü tekrar gösteriyor, bu yüzden bu bir çözüm gibi görünmüyor.
Davicus

4
Önce tüm açık sorgu pencerelerini kapatmak için Workbench AND'i yeniden başlatmayı unutmayın!
pimbrouwers

32

DB sunucusunu comandline seçeneği net_read_timeout/ wait_timeoutve uygun bir değerle (saniye cinsinden) başlatın - örneğin:--net_read_timeout=100 .

Referans için buraya ve buraya bakınız .


1
Bu doğru, ama çoğu up ile cevap aslında bana yardımcı oldu
Sambit Tripathy

6
Bu parametreyi komut satırında nasıl sağlayabilirim? DB'ye bağlanmaya çalıştığımda: mysql -u root -p --net_read_timeout = 60 ya da hizmeti başlatmaya çalıştığımda? sudo hizmet mysql başlangıç? Her iki yerde de hata veriyor: bilinmeyen değişken 'net_read_timeout'
Vikas Goel

@VikasGoel Bir sunucu tarafı parametresidir. Yani mysqld.
Chloe

29

Sorgunuz blob verileri içeriyorsa, bu yanıt bu yanıtta önerilen bir my.inideğişiklik uygulanarak düzeltilebilir :

[mysqld]
max_allowed_packet=16M

Varsayılan olarak, bu 1M olacaktır (izin verilen maksimum değer 1024M'dir). Sağlanan değer 1024K'nın katı değilse, otomatik olarak 1024K'nın en yakın katına yuvarlanır.

Başvurulan iplik MySQL hata hakkında iken 2006 ayarlayarak, max_allowed_packet16M 1M den yaptığımız uzun bir sorguyu çalıştırırken bana sadece gösteriyordu 2013 hata düzeltme.

WAMP kullanıcıları için: [wampmysqld]bölümü bu bölümde bulacaksınız .


Bu benim sorunumdu. Bir dosyadan veritabanı yedeklemesi alıyordum ve MySQL Workbench bu 2013 hatasını ve ardından "İşlem çıkış kodu 1 ile başarısız oldu" ifadesini bildiriyordu. Yedeklemenin MySQL'in varsayılan max_allowed_packet boyutunu 4M'yi aşan büyük blob sütunları olduğu ortaya çıktı. Bunu arttırmak sorunu çözdü. (MySQL 5.6 ve Workbench 6.2.3). Teşekkürler!
zAlbee

Bu benim için de bir çözümdü. Bir Windows makinesi için 256M olarak ayarlasam da.
smoore4

16M vardı, bir ithalat dosyası ile birden fazla kez bu hatayı aldı, 32M olarak değiştirildi ve daha sonra çalıştı.
hakre

15

Aşağıdakileri / etc / mysql / cnf dosyasına ekleyin:

innodb_buffer_pool_size = 64M

misal:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M

6
Dosya adının /etc/mysql/cnfdoğru olduğundan emin misiniz ? Olmamalı mı /etc/my.cnf?
Peter VARGA

12
SET @@local.net_read_timeout=360;

Uyarı: Uzaktan bağlantıda uyguladığınızda aşağıdakiler çalışmaz:

SET @@global.net_read_timeout=360;

360 nedir? Milisaniye, saniye, dakika?
MasterJoe2

10

Bu hata mesajının üç olası nedeni vardır

  1. Genellikle ağ bağlantısı sorununu gösterir ve bu hata sık sık meydana gelirse ağınızın durumunu kontrol etmelisiniz
  2. Bazen “sorgu sırasında” formu, bir veya daha fazla sorgunun parçası olarak milyonlarca satır gönderildiğinde gerçekleşir.
  3. Daha nadiren, istemci sunucuya ilk bağlantıyı denediğinde gerçekleşebilir

Daha fazla ayrıntı için >>

Neden 2:

SET GLOBAL interactive_timeout=60;

30 saniye ila 60 saniye veya daha uzun varsayılan

Neden 3:

SET GLOBAL connect_timeout=60;

2 bana bu hatayı veriyor - Kod: 1227. Erişim engellendi; Bu işlem için SUPER ayrıcalıklarına (en az birine) ihtiyacınız var
MasterJoe2

9

Teşekkürler! Ancak mysqldb güncellemeleriyle yapılandırma şu hale geldi:

max_allowed_packet

net_write_timeout

net_read_timeout

mysql doc


8

Mysql yapılandırma dosyasındaki 'interactive_timeout' ve 'wait_timeout' özelliklerini ihtiyacınız olan değerlere ayarlamanız gerekir.


Bu bana yardımcı oluyor. my.cnf dosyasındaki 'interactive_timeout' 100 olarak ayarlandı, bu çok kısa. 3600 s (veya sizin için yeterince büyük bir değer) olarak değiştirdikten sonra sorun
çözüldü.Thx

7

Sadece MySQL MySQL gibi düzgün işlemesi için gerekli birçok masadan yeniden birlikte o olacaktır yeniden inşa innodb motoru yükseltme gerçekleştirmek performance_schema, information_schemavb

Kabuğunuzdan aşağıdaki komutu verin:

sudo mysql_upgrade -u root -p

Hata, MySQL Workbench 6.1.4'e kadar (ve sadece bir süre sonra) kendini göstermedi ve 6.1.6'da da (sadece birkaç kullanımdan sonra da) gerçekleştiğinden, birden fazla sunucuyu yeniden oluşturmanın nasıl bir çözüm olduğundan emin değilim son zamanlarda sadece bir GUI'de kendini gösteren bir problem.
Davicus

Bu benim sorunumu çözdü. Ansible'ı veritabanını mevcut bir veritabanı üzerinde kurmak için kullandım ve işler haywire oldu. Bu komutu çalıştırmak her şeyi çalışma düzenine geri yükledi.
Jubz

4

Eski olduğunu biliyorum ama mac'ta

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.

4

Düzenle-> Tercihler-> SQL düzenleyici-> MySQL oturumunda "okuma zaman aşımı" süresini değiştirin


3

Lütfen Düzenle → Tercihler → SQL Sorguları bölümündeki sınır satırlarının işaretini kaldırmayı deneyin

çünkü mysql yapılandırma dosyasındaki 'interactive_timeout' ve 'wait_timeout' özelliklerini ihtiyacınız olan değerlere ayarlamanız gerekir.


3

Büyük bir döküm dosyasının geri yüklenmesi sırasında bu sorunla karşılaşırsanız ve ağımla (ör. Localhost üzerinde yürütme) ilgili bir şeyim olması sorunumu çözebilirim.

My mysqldump benim mysql hesaplamak için çok büyük en az bir INSERT tuttu. show variables like "net_buffer_length";Mysql-cli'nizin içine yazarak bu değişkeni görüntüleyebilirsiniz . Üç olasılığınız var:

  • mysql içinde net_buffer_length'i artırın -> bu sunucunun yeniden başlatılmasını gerektirir
  • --skip-extended-inserther dökümü oluşturmak için bir satır kullanılır -> bu dökümü okumak çok daha güzel olmasına rağmen bu büyük dökümü> 1GB için uygun değildir çünkü çok yavaş olma eğilimindedir
  • genişletilmiş ekler ile dökümü oluşturun (varsayılan), ancak net-buffer_length'i, örneğin --net-buffer_length NR_OF_BYTESNR_OF_BYTES'in sunucunun net_buffer_length'inden daha küçük olduğu yerlerde sınırlandırın -> Daha yavaş sunucu yeniden başlatılmasına gerek olmamasına rağmen, bu en iyi çözüm olduğunu düşünüyorum.

Aşağıdaki mysqldump komutunu kullandım: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

Aynı sorunu bir .csv dosyası yüklerken de aldım. Dosyayı .sql biçimine dönüştürdü.

Aşağıdaki komutu kullanarak bu soruna geçici bir çözüm bulmak.

mysql -u <user> -p -D <DB name> < file.sql

Umarım bu yardımcı olur.


2

Buradaki diğer tüm çözümler başarısız olursa - syslog (/ var / log / syslog veya benzeri) sunucunuzun sorgu sırasında belleğinin tükenip tükenmediğini kontrol edin.

İnnodb_buffer_pool_size bir swapfile yapılandırılmadan fiziksel belleğe çok yakın olarak ayarlandığında bu sorun vardı. MySQL, fiziksel belleğin yaklaşık% 80'inde innodb_buffer_pool_size veritabanına özgü bir sunucu ayarı önerir, yaklaşık% 90'a ayarlamıştım, çekirdek mysql işlemini öldürüyordu. İnnodb_buffer_pool_size yaklaşık% 80'e geri döndü ve bu sorunu çözdü.


2

Benim durumumda, bağlantı zaman aşımı aralığını 6000 veya daha yüksek bir değere ayarlamak işe yaramadı.

Ben sadece tezgahın yapabileceğimi söylediklerini yaptım.

Sorgunun DBMS'den veri döndürmek için alabileceği en uzun süre. Okuma zaman aşımını atlamak için 0 olarak ayarlayın.

Mac Tercihleri ​​-> SQL Editör -> MySQL Oturumuna Git -> bağlantı okuma zaman aşımı aralığını 0 olarak ayarlayın.

Ve işe yarıyor 😄


1

Aynı sorunla karşılaştım. Ben daha büyük tablolar (ki zaman alır) için yabancı anahtar olduğunda olur inanıyorum.

Yabancı anahtar bildirimleri olmadan tablo oluştur ifadesini tekrar çalıştırmayı denedim ve işe yaradığını gördüm.

Sonra tablo oluşturduktan sonra ALTER TABLE sorgusu kullanarak yabancı anahtar kısıtlamaları ekledim.

Umarım bu birisine yardım eder.


1

Bu benim başıma geldi çünkü innodb_buffer_pool_size sunucuda mevcut olan RAM boyutundan daha büyük olarak ayarlanmıştı. Bu nedenle işler kesintiye uğradı ve bu hatayı veriyor. Düzeltme, my.cnf dosyasını innodb_buffer_pool_size için doğru ayar ile güncellemektir.


1

Çalışma Tezgahı Düzenleme → Tercihler → SQL Editör → DBMS bağlantıları okuma zaman aşımı: 3000'e kadar gidin. Hata artık oluşmadı.


0

Şuraya git:

Düzenle -> Tercihler -> SQL Editör

Burada "MySQL Oturumu" grubunda, yeni bağlantı aralıklarını (saniye cinsinden) ayarlayabileceğiniz üç alan görebilirsiniz.


0

Güvenlik duvarı kuralımızın MYSQL ile bağlantımı bloke ettiği ortaya çıktı. Bağlantıya izin vermek için güvenlik duvarı ilkesi kaldırıldıktan sonra şemayı başarıyla içe aktarabildim.


0

Aynı sorunu yaşadım - ama benim için çözüm çok katı izinlere sahip bir DB kullanıcısıydı. Masadaki Executeyeteneğe izin vermek zorundaydım mysql. Buna izin verdikten sonra artık bağlantı bırakmadım


0

Öncelikle dizinlerin yerinde olup olmadığını kontrol edin .

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'

0

Ben veritabanında bir tablo içine çok sayıda satır oluşturuyordu bir saklı proc çalışırken bu koştu. 30 saniye sınırını geçtikten hemen sonra hatanın geldiğini görebiliyordum.

Diğer cevaplardaki tüm önerileri denedim. Eminim bazılarına yardımcı oldu, ancak gerçekten benim için işe yarayan şey, Workbench'ten SequelPro'ya geçiyordu.

Workbench'te bulamadığım bazı istemci tarafı bağlantıları olduğunu tahmin ediyorum. Belki bu başka birine de yardımcı olacaktır?


0

SQL Çalışma Tezgahı kullanıyorsanız, tablolarınıza bir dizin ekleyerek, bir dizin eklemek için tablodaki İngiliz anahtarı (anahtar) sembolüne tıklayarak Dizin Oluşturma'yı kullanmayı deneyebilirsiniz, aşağıdaki tablo için kurulumu açmalıdır. , dizin görünümünü tıklayın, bir dizin adı yazın ve türü dizine ayarlayın, Dizin sütunlarında tablonuzdaki birincil sütunu seçin.

Diğer tablolardaki diğer birincil anahtarlar için de aynı adımı uygulayın.


0

SSH kullananların MySQL veritabanlarına bağlanması için burada bir cevap eksik görünüyor. Diğer cevapların önerdiği gibi 1 değil iki yeri kontrol etmeniz gerekir:

Tezgahı Düzenle → Tercihler → SQL Editör → DBMS

Çalışma Tezgahı Düzenle → Tercihler → SSH → Zaman Aşımları

Varsayılan SSH Zaman Aşımlarım çok düşük ayarlandı ve zaman aşımı sorunlarımın bir kısmına (ancak görünüşe göre hepsi değil) neden oldu. Sonra, MySQL Workbench'i yeniden başlatmayı unutmayın!

Son olarak, DB Yöneticinizle iletişim kurmaya ve my.conf + mysql yeniden başlatma yoluyla mysql'nin wait_timeout ve interactive_timeout özelliklerini artırmasını istemek veya mysql'i yeniden başlatmak bir seçenek değilse global bir set yapmak isteyebilir.

Bu yardımcı olur umarım!


0

Takip edilecek üç şey ve emin olun:

  1. Birden çok sorgunun bağlantı koptu mu gösteriliyor?
  2. MySQL'de set sorgusu nasıl kullanılır?
  3. aynı anda silme + güncelleme nasıl yapılır?

Yanıtlar:

  1. Her zaman MySQL kendi tanımlayıcısını oluştururken tanımlayıcıyı kaldırmaya çalışın ve güncelleme için birden fazla tablo tek bir sorgu yapmaya çalışın, çünkü bazen birden fazla sorgu kayıp bağlantı gösterir
  2. Her zaman üstte SET değeri fakat eğer koşulu SET değeri içermiyorsa DELETE'den sonra.
  3. BU İŞLEMLERİN DİĞER FARKLI TABLOLARDA YAPILMASI HALİNDE GÜNCELLEME SİLİNDİR

-1

kontrol etmek

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

Bu yardımcı olur umarım


-1

Bu genellikle "MySQL Sunucusunun geçerli sürümüyle uyumsuzluklarınız" olduğu anlamına gelir, bkz. Mysql_upgrade. Ben aynı sorunla karşılaştı ve sadece çalıştırmak zorunda kaldı:

mysql_upgrade --password Belgelerde, "MySQL'i her yükselttiğinizde mysql_upgrade yürütülmesi gerektiği" belirtiliyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.