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?

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.


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


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 .


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.


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

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;

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;

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


8

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


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

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.


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.


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


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.


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.


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 😄


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.


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.


1

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


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).


0

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


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


0

Periksa apakah indeks berada di tempat pertama.

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

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?


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.


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!


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

-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


-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".

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.