Kode Kesalahan: 2013. Koneksi terputus ke server MySQL selama permintaan

250

Saya mendapat Kode Kesalahan: 2013. Sambungan hilang ke server MySQL saat kesalahan kueri ketika saya mencoba menambahkan indeks ke tabel menggunakan MySQL Workbench. Saya perhatikan juga bahwa itu muncul setiap kali saya menjalankan permintaan panjang.

Apakah ada jauh untuk meningkatkan nilai batas waktu?

pengguna836026
sumber

Jawaban:

471

Versi baru dari MySQL WorkBench memiliki opsi untuk mengubah batas waktu tertentu.

Bagi saya itu berada di bawah Edit → Preferences → SQL Editor → DBMS koneksi membaca batas waktu (dalam detik): 600

Mengubah nilai menjadi 6000.

Baris batas yang tidak dicentang juga sebagai batas pada setiap kali saya ingin mencari seluruh kumpulan data yang melelahkan.

eric william nord
sumber
2
Apakah mungkin untuk meningkatkan batas ini lebih dari 99.999 detik? The DBMS connection read time outlapangan hanya menerima hingga 5 angka, dan pengaturan lapangan untuk 0 setara dengan parameter default (600 detik). (Windows 7 64-bit Ultimate, MySQL Workbench 5.2.47 CE)
Franck Dernoncourt
2
Mengikuti stackoverflow.com/q/16877574/395857 , masalah ini sekarang terpecahkan ( bugs.mysql.com/bug.php?id=69395 )
Franck Dernoncourt
4
hapus centang pada batas baris dalam Edit → Preferensi → SQL Queries
Jon
7
Setelah memulai ulang, itu menampilkan kesalahan 2013 lagi bahkan dengan batas waktu baca diatur ke 6000, jadi ini tampaknya tidak menjadi solusi.
Davicus
4
Ingatlah untuk memulai kembali Workbench AND untuk menutup semua jendela permintaan yang terbuka terlebih dahulu!
pimbrouwers
32

Mulai server DB dengan opsi comandline net_read_timeout/ wait_timeoutdan nilai yang sesuai (dalam detik) - misalnya: --net_read_timeout=100.

Untuk referensi lihat di sini dan di sini .

Yahia
sumber
1
Ini benar, tetapi jawaban dengan jumlah up terbanyak sebenarnya membantu saya
Sambit Tripathy
6
Bagaimana cara saya memberikan parameter ini di baris perintah? Ketika saya mencoba terhubung ke DB: mysql -u root -p --net_read_timeout = 60 atau ketika saya mencoba memulai layanan? layanan sudo mysql mulai? Di kedua tempat itu memberikan kesalahan: variabel tidak dikenal 'net_read_timeout'
Vikas Goel
@VikasGoel Ini adalah parameter sisi server. Yaitu mysqld.
Chloe
29

Jika kueri Anda memiliki data gumpalan, masalah ini dapat diperbaiki dengan menerapkan my.iniperubahan seperti yang diusulkan dalam jawaban ini :

[mysqld]
max_allowed_packet=16M

Secara default, ini akan menjadi 1M (nilai maksimum yang diizinkan adalah 1024M). Jika nilai yang diberikan bukan kelipatan 1024K, maka secara otomatis akan dibulatkan ke kelipatan terdekat 1024K.

Sementara utas yang dirujuk adalah tentang kesalahan MySQL 2006 , pengaturan max_allowed_packetdari 1M hingga 16M memang memperbaiki kesalahan 2013 yang muncul untuk saya ketika menjalankan kueri yang panjang.

Untuk pengguna WAMP: Anda akan menemukan bendera di [wampmysqld]bagian tersebut.

Harti
sumber
Ini persis masalah saya. Saya mengimpor cadangan database dari file dan MySQL Workbench melaporkan kesalahan 2013 ini diikuti oleh "Operasi gagal dengan exitcode 1". Ternyata cadangan memiliki kolom gumpalan besar melebihi ukuran max_allowed_packet default MySQL 4M. Meningkatkan ini memperbaikinya. (MySQL 5.6 dan Workbench 6.2.3). Terima kasih!
zAlbee
Ini adalah perbaikan untuk saya juga. Meskipun saya mengaturnya ke 256M untuk mesin Windows.
smoore4
Apakah 16M, mendapat kesalahan dengan file impor beberapa kali, diubah menjadi 32M dan kemudian berhasil.
hakre
15

Tambahkan yang berikut ini ke file / etc / mysql / cnf:

innodb_buffer_pool_size = 64M

contoh:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M
MysqlMan
sumber
6
Apakah Anda yakin nama file /etc/mysql/cnfsudah benar? Bukankah seharusnya begitu /etc/my.cnf?
Peter VARGA
12
SET @@local.net_read_timeout=360;

Peringatan: Yang berikut ini tidak akan berfungsi ketika Anda menerapkannya dalam koneksi jarak jauh:

SET @@global.net_read_timeout=360;
pengguna1313024
sumber
Apa itu 360? Millisec, detik, menit?
MasterJoe2
10

Ada tiga kemungkinan penyebab untuk pesan kesalahan ini

  1. Biasanya ini menunjukkan masalah konektivitas jaringan dan Anda harus memeriksa kondisi jaringan Anda jika kesalahan ini sering terjadi
  2. Kadang-kadang bentuk "selama permintaan" terjadi ketika jutaan baris dikirim sebagai bagian dari satu atau lebih permintaan.
  3. Lebih jarang, itu bisa terjadi ketika klien mencoba koneksi awal ke server

Untuk lebih jelasnya baca >>

Penyebab 2:

SET GLOBAL interactive_timeout=60;

dari standarnya 30 detik hingga 60 detik atau lebih lama

Penyebab 3:

SET GLOBAL connect_timeout=60;
Nanhe Kumar
sumber
2 memberi saya kesalahan ini - Kode: 1227. Akses ditolak; Anda memerlukan (setidaknya satu dari) hak istimewa SUPER untuk operasi ini
MasterJoe2
9

Terima kasih, ini berhasil. Tetapi dengan pembaruan mysqldb, konfigurasi telah menjadi:

max_allowed_packet

net_write_timeout

net_read_timeout

mysql doc

pengguna2286136
sumber
8

Anda harus mengatur properti 'interactive_timeout' dan 'wait_timeout' di file konfigurasi mysql ke nilai yang Anda butuhkan.

Maksym Polshcha
sumber
Ini membantu saya. 'interactive_timeout' di my.cnf disetel ke 100, itu terlalu pendek. setelah saya mengubahnya menjadi 3600 s (atau nilai apa pun yang cukup besar untuk Anda), masalah teratasi. Terima kasih
CobraBJ
7

Hanya melakukan MySQL meng-upgrade yang akan membangun kembali InnoDB engine bersama dengan membangun kembali dari banyak tabel diperlukan untuk berfungsinya MySQL seperti performance_schema, information_schema, dll

Keluarkan perintah di bawah ini dari shell Anda:

sudo mysql_upgrade -u root -p
Shoaib Khan
sumber
Kesalahan tidak muncul sampai MySQL Workbench 6.1.4 (dan hanya setelah beberapa saat) dan terjadi pada 6.1.6 juga (meskipun hanya setelah beberapa penggunaan) jadi saya tidak yakin bagaimana membangun kembali beberapa server adalah perbaikan untuk masalah yang hanya muncul pada satu GUI baru-baru ini.
Davicus
Ini memperbaiki masalah saya. Saya baru saja menggunakan Ansible untuk mengatur database lebih dari yang sudah ada, dan semuanya menjadi berantakan. Menjalankan perintah ini mengembalikan semuanya ke perintah yang berfungsi.
Jubz
4

Saya tahu yang lama tetapi di mac

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

Ubah waktu "baca batas waktu" di Edit-> Preferences-> SQL editor-> sesi MySQL

pengguna6234739
sumber
3

Coba hapus centang pada baris batas di dalam Edit → Preferences → SQL Queries

karena Anda harus mengatur properti 'interactive_timeout' dan 'wait_timeout' dalam file config mysql ke nilai yang Anda butuhkan.

pengguna2586714
sumber
3

Jika Anda mengalami masalah ini selama pengembalian file-dump besar dan dapat mengesampingkan masalah yang ada hubungannya dengan jaringan (misalnya eksekusi pada localhost) daripada solusi saya bisa membantu.

Mysqldump saya menampung setidaknya satu INSERT yang terlalu besar untuk dihitung oleh mysql. Anda dapat melihat variabel ini dengan mengetik show variables like "net_buffer_length";di dalam mysql-cli Anda. Anda memiliki tiga kemungkinan:

  • tingkatkan net_buffer_length di dalam mysql -> ini akan membutuhkan server restart
  • buat dump dengan --skip-extended-insert, per masukkan satu baris digunakan -> walaupun dump ini jauh lebih bagus untuk dibaca, ini tidak cocok untuk dump besar> 1GB karena cenderung sangat lambat
  • buat dump dengan sisipan yang diperluas (yang merupakan default) tetapi batasi net-buffer_length misalnya dengan --net-buffer_length NR_OF_BYTES mana NR_OF_BYTES lebih kecil dari net_buffer_length server -> Saya pikir ini adalah solusi terbaik, meskipun lebih lambat tidak diperlukan restart server.

Saya menggunakan perintah mysqldump berikut: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile

Matt V
sumber
2

Saya mendapat masalah yang sama saat memuat file .csv. Mengonversi file menjadi .sql.

Menggunakan perintah di bawah ini saya berhasil mengatasi masalah ini.

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

Semoga ini bisa membantu.

Vinod Amarathunga
sumber
2

Jika semua solusi lain di sini gagal - periksa syslog Anda (/ var / log / syslog atau yang serupa) untuk melihat apakah server Anda kehabisan memori selama permintaan.

Punya masalah ini ketika innodb_buffer_pool_size diset terlalu dekat dengan memori fisik tanpa swapfile yang dikonfigurasi. MySQL merekomendasikan untuk pengaturan server database khusus innodb_buffer_pool_size pada maksimum sekitar 80% dari memori fisik , saya telah menetapkan sekitar 90%, kernel membunuh proses mysql. Pindah innodb_buffer_pool_size kembali turun menjadi sekitar 80% dan itu memperbaiki masalah.

A_funs
sumber
2

Dalam kasus saya, mengatur interval waktu koneksi ke 6000 atau sesuatu yang lebih tinggi tidak berfungsi.

Saya hanya melakukan apa yang dikatakan meja kerja yang bisa saya lakukan.

Jumlah maksimum waktu kueri dapat mengambil untuk mengembalikan data dari DBMS. Set 0 untuk melewati batas waktu baca.

Pada Preferensi Mac -> SQL Editor -> Pergi ke Sesi MySQL -> atur interval baca batas waktu koneksi ke 0.

Dan itu berfungsi 😄

Htun
sumber
1

Saya menghadapi masalah yang sama ini. Saya percaya ini terjadi ketika Anda memiliki kunci asing ke tabel yang lebih besar (yang membutuhkan waktu).

Saya mencoba menjalankan pernyataan membuat tabel lagi tanpa deklarasi kunci asing dan ternyata berhasil.

Kemudian setelah membuat tabel, saya menambahkan batasan kunci asing menggunakan kueri ALTER TABLE.

Semoga ini bisa membantu seseorang.

Nimeshka Srimal
sumber
1

Ini terjadi pada saya karena innodb_buffer_pool_size saya ditetapkan lebih besar dari ukuran RAM yang tersedia di server. Banyak hal menjadi terganggu karena ini dan itu mengeluarkan kesalahan ini. Cara mengatasinya adalah memperbarui my.cnf dengan pengaturan yang benar untuk innodb_buffer_pool_size.

Phyllis Sutherland
sumber
1

Pergi ke Workbench Edit → Preferensi → SQL Editor → Koneksi DBMS waktu habis baca: Hingga 3000. Kesalahan tidak lagi terjadi.

Kairat Koibagarov
sumber
0

Pergi ke:

Edit -> Preferensi -> SQL Editor

Di sana Anda dapat melihat tiga bidang dalam grup "MySQL Session", di mana Anda sekarang dapat mengatur interval koneksi baru (dalam detik).

Maks
sumber
0

Ternyata aturan firewall kami memblokir koneksi saya ke MYSQL. Setelah kebijakan firewall dicabut untuk memungkinkan koneksi saya berhasil mengimpor skema.

wuro
sumber
0

Saya memiliki masalah yang sama - tetapi bagi saya solusinya adalah pengguna DB dengan izin yang terlalu ketat. Saya harus membiarkan Executekemampuan di atas mysqlmeja. Setelah membiarkan itu, saya tidak punya koneksi yang terjatuh lagi

naabster
sumber
0

Periksa apakah indeks berada di tempat pertama.

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'
Gayan Dasanayake
sumber
0

Saya berlari ke ini saat menjalankan proc yang tersimpan - yang menciptakan banyak baris ke dalam tabel di database. Saya bisa melihat kesalahan datang tepat setelah waktu melewati batas 30 detik.

Saya mencoba semua saran di jawaban lain. Saya yakin beberapa di antaranya membantu, namun- yang benar-benar membuatnya bekerja adalah beralih ke SequelPro dari Workbench.

Saya menduga itu adalah beberapa koneksi sisi klien yang tidak dapat saya temukan di Workbench. Mungkin ini akan membantu orang lain juga?

RN.
sumber
0

Jika Anda menggunakan SQL Work Bench, Anda dapat mencoba menggunakan Pengindeksan, dengan menambahkan indeks ke tabel Anda, untuk menambahkan indeks, klik pada simbol kunci pas (spanner) pada tabel, itu akan membuka pengaturan untuk tabel, di bawah ini , klik pada tampilan indeks, ketikkan nama indeks dan atur jenisnya ke indeks, Di kolom indeks, pilih kolom utama di tabel Anda.

Lakukan langkah yang sama untuk kunci utama lainnya di tabel lain.

Matius E
sumber
0

Tampaknya ada jawaban yang hilang di sini untuk mereka yang menggunakan SSH untuk terhubung ke database MySQL mereka. Anda perlu memeriksa dua tempat bukan 1 seperti yang disarankan oleh jawaban lain:

Edit Meja Kerja → Preferensi → Editor SQL → DBMS

Edit Meja Kerja → Preferensi → SSH → Batas Waktu

Batas waktu SSH default saya ditetapkan sangat rendah dan menyebabkan beberapa (tetapi tampaknya tidak semua) masalah batas waktu saya. Setelah itu, jangan lupa untuk me-restart MySQL Workbench!

Terakhir, mungkin perlu menghubungi Admin DB Anda dan meminta mereka untuk meningkatkan properti wait_timeout & interactive_timeout di mysql sendiri melalui my.conf + mysql restart atau melakukan set global jika me-restart mysql bukan pilihan.

Semoga ini membantu!

ThatOneGuy
sumber
0

Tiga hal yang harus diikuti dan pastikan:

  1. Apakah beberapa kueri menunjukkan koneksi terputus?
  2. bagaimana Anda menggunakan set query di MySQL?
  3. bagaimana cara menghapus + memperbarui kueri secara bersamaan?

Jawaban:

  1. Selalu mencoba untuk menghapus definisi karena MySQL membuat definisi sendiri dan jika beberapa tabel terlibat untuk pembaruan coba buat satu permintaan karena kadang-kadang banyak permintaan menunjukkan kehilangan koneksi
  2. Selalu SET nilai di atas tetapi setelah HAPUS jika kondisinya tidak melibatkan nilai SET.
  3. Gunakan DELETE FIRST THN UPDATE JIKA KEDUA OPERASI MEREKA DILAKUKAN PADA TABEL BERBEDA
Koyel Sharma
sumber
-1

periksa tentang

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

Semoga ini membantu

dyson L
sumber
-1

Ini biasanya berarti bahwa Anda memiliki "ketidakcocokan dengan versi MySQL Server saat ini", lihat mysql_upgrade. Saya mengalami masalah yang sama dan hanya harus menjalankan:

mysql_upgrade --password Dokumentasi menyatakan bahwa, "mysql_upgrade harus dijalankan setiap kali Anda meningkatkan MySQL".

SanthoshSally
sumber