Код помилки: 2013. Втрачений зв’язок із сервером MySQL під час запиту


252

Я отримав код помилки: 2013. Втрачений зв’язок із сервером MySQL під час помилки запиту, коли я намагався додати індекс до таблиці за допомогою MySQL Workbench. Я також помітив, що вона з’являється щоразу, коли я запускаю довгі запити.

Чи є можливість збільшити значення тайм-ауту?

Відповіді:


473

У нових версіях MySQL WorkBench є можливість змінити певні тайм-аути.

Для мене це було в розділі Правка → Налаштування → Редактор SQL → Час очікування з'єднання СУБД (у секундах): 600

Змінено значення на 6000.

Також неперевірені межі рядків як встановлення межі кожного разу, коли я хочу шукати весь набір даних стає стомлюючим.


2
Чи можна збільшити цю межу за 99,999 секунди? DBMS connection read time outПоле приймає тільки до 5 цифр, і установки поля до 0 еквівалентний параметра за замовчуванням (600 секунд). (Windows 7 64-бітний Ultimate, MySQL Workbench 5.2.47 н.е.)
Франк Дернонкурт

2
Після stackoverflow.com/q/16877574/395857 це питання зараз вирішено ( bugs.mysql.com/bug.php?id=69395 )
Франк Дернонкурт

4
зніміть прапорець у розділі Правка → Налаштування → SQL Queries
Jon

7
Після перезапуску він знову відображає помилку 2013 навіть з часом очікування, встановленим на 6000, тому це, здається, не є рішенням.
Давікус

4
Не забудьте перезапустити Workbench І щоб спершу закрити всі відкриті вікна запитів!
pimbrouwers

32

Запуск сервера БД з опцією comandline net_read_timeout/ wait_timeoutі відповідного значення (в секундах) - наприклад: --net_read_timeout=100.

Для ознайомлення дивіться тут і тут .


1
Це правильно, але відповідь з більшою кількістю підйомів допомогла мені насправді
Sambit Tripathy

6
Як надати цей параметр у командному рядку? Коли я намагаюся підключитися до БД: mysql -u root -p --net_read_timeout = 60 або коли я намагаюся запустити службу? послуга sudo mysql start? В обох місцях вона дає помилку: невідома змінна 'net_read_timeout'
Vikas Goel

@VikasGoel Це параметр на стороні сервера. Тобто mysqld.
Хлоя

29

Якщо у вашому запиті є дані про краплі, цю проблему можна усунути, застосувавши my.iniзміну , запропоновану в цій відповіді :

[mysqld]
max_allowed_packet=16M

За замовчуванням це буде 1М (допустиме максимальне значення - 1024М). Якщо подане значення не кратне 1024K, воно автоматично округляється до найближчого кратного 1024K.

У той час як посилання нитка про помилку MySQL 2006 , встановлюючи max_allowed_packetвід 1М до 16М зробив виправлення помилки 2013 , який показав на мене , коли працює довгий запит.

Для користувачів WAMP: прапор ви знайдете в [wampmysqld]розділі.


Це було саме моє питання. Я імпортував резервну копію бази даних з файлу, і MySQL Workbench повідомляв про цю помилку 2013 року, а потім "Операція не вдалася з вихідним кодом 1". Виявляється, в резервній копії були великі колонки, що перевищували стандартний розмір MySQL max_allowed_packet 4M. Збільшення цього виправляло. (MySQL 5.6 та Workbench 6.2.3). Дякую!
zAlbee

Це було виправданням і для мене. Хоча я встановив це 256M для машини Windows.
smoore4

Якщо у мене 16M, я отримав цю помилку з файлом імпорту кілька разів, змінив на 32M і він працював.
хакре

15

Додайте у файл / etc / mysql / cnf:

innodb_buffer_pool_size = 64M

приклад:

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

6
Ви впевнені, що ім'я файлу /etc/mysql/cnfправильне? Чи не повинно бути /etc/my.cnf?
Пітер ВАРГА

12
SET @@local.net_read_timeout=360;

Попередження: Якщо ви застосовуєте його у віддаленому з'єднанні, наступні дії не працюватимуть:

SET @@global.net_read_timeout=360;

Що таке 360? Мілісек, секунди, хвилини?
MasterJoe2

10

Існує три ймовірні причини цього повідомлення про помилку

  1. Зазвичай це вказує на проблеми з підключенням до мережі, і вам слід перевірити стан вашої мережі, якщо ця помилка трапляється часто
  2. Іноді форма "під час запиту" трапляється, коли мільйони рядків надсилаються як частина одного або декількох запитів.
  3. Рідше це може статися, коли клієнт намагається здійснити початкове підключення до сервера

Детальніше читайте >>

Причина 2:

SET GLOBAL interactive_timeout=60;

від замовчування від 30 секунд до 60 секунд або довше

Причина 3:

SET GLOBAL connect_timeout=60;

2 дає мені цю помилку - Код: 1227. У доступі заборонено; вам потрібні (принаймні один із) привілей (-ів) SUPER для цієї операції
MasterJoe2


8

Ви повинні встановити властивості 'interactive_timeout' та 'wait_timeout' у файлі конфігурації mysql на потрібні вам значення.


Це мені допомагає. 'interactive_timeout' у my.cnf було встановлено на 100, це занадто коротко. після того, як я змінив його на 3600 с (або будь-яке значення, достатньо велике для вас), проблема вирішена.
Thx

7

Просто виконати MySQL оновлення , що буде заново будувати InnoDB двигун поряд з відновленням багатьох таблиць , необхідних для правильного функціонування MySQL , таких як performance_schema, information_schemaі т.д.

Випустіть нижче команду зі своєї оболонки:

sudo mysql_upgrade -u root -p

Помилка не відображалася до MySQL Workbench 6.1.4 (і лише через деякий час), а трапляється і в 6.1.6 (хоча лише після декількох застосувань), тому я не впевнений, як відновити декілька серверів - це виправлення проблема, яка недавно представилася на одному графічному інтерфейсі.
Давікус

Це вирішило мою проблему. Щойно я використовував Ansible для установки бази даних на існуючу, і все пішло як би то не було. Виконання цієї команди відновило все до робочого стану.
Jubz

4

Я знаю його старе, але на Mac

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


3

Спробуйте зняти прапорці в рядках у меню Правка → Налаштування → SQL-запити

тому що ви повинні встановити властивості 'interactive_timeout' та 'wait_timeout' у файлі конфігурації mysql на потрібні вам значення.


3

Якщо ви зіткнулися з цією проблемою під час відновлення великого дамп-файлу і виключаєте проблему, пов'язану з мережею (наприклад, виконанням на localhost), ніж моє рішення може бути корисним.

Мій mysqldump мав принаймні одну ВСТУП, яка була занадто великою для обчислення mysql. Ви можете переглянути цю змінну, ввівши show variables like "net_buffer_length";всередині свого mysql-cli. У вас є три можливості:

  • збільшити net_buffer_length всередині mysql -> для цього знадобиться перезапуск сервера
  • створити дамп із --skip-extended-insert, на кожну вставку використовується один рядок -> хоча ці звалища набагато приємніше читати, це не підходить для великих дампів> 1 Гб, оскільки це, як правило, дуже повільно
  • створити дамп із розширеними вставками (що за замовчуванням), але обмежте чисту довжину-buffer_length, наприклад, --net-buffer_length NR_OF_BYTESде NR_OF_BYTES менше, ніж net_buffer_length сервера -> Я думаю, що це найкраще рішення, хоча повільніше перезапуск сервера не потрібен.

Я використовував таку команду mysqldump: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

У мене виникла та сама проблема під час завантаження .csv-файлу. Перетворено файл у .sql.

Використовуючи команду нижче, мені вдається обійти цю проблему.

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

Сподіваюся, це допоможе.


2

Якщо всі інші рішення тут не вдається - перевірте свій syslog (/ var / log / syslog або подібне), щоб побачити, чи не вистачає пам’яті у вашого сервера під час запиту.

Була ця проблема, коли innodb_buffer_pool_size був встановлений занадто близько до фізичної пам'яті без налаштування swapfile. MySQL рекомендує встановити для сервера бази даних налаштування innodb_buffer_pool_size максимум біля 80% фізичної пам'яті , у мене встановлено приблизно 90%, ядро ​​вбивало процес mysql. Переміщений innodb_buffer_pool_size повернувся до рівня приблизно 80%, що вирішило проблему.


2

У моєму випадку встановлення інтервалу очікування підключення до 6000 або щось вище не спрацювало.

Я просто зробив те, що говорить верстат, що я можу зробити.

Максимальний час, який запит може зайняти для повернення даних із СУБД. Установіть 0, щоб пропустити час очікування читання.

У Mac Preferences -> SQL Editor -> Перейдіть до MySQL Session -> встановіть інтервал очікування зчитування підключення до 0.

І це працює 😄


1

Я зіткнувся з цим самим питанням. Я вважаю, що це трапляється, коли у вас є зовнішні ключі до більших таблиць (що вимагає часу).

Я спробував знову запустити оператор створення таблиці без зовнішніх ключових декларацій і виявив, що це працює.

Потім, створивши таблицю, я додав обмеження зовнішнього ключа, використовуючи запит ALTER TABLE.

Сподіваюся, що це комусь допоможе.


1

Це сталося зі мною, оскільки мій innodb_buffer_pool_size був встановлений на більший розмір оперативної пам’яті, доступний на сервері. Речі перервалися через це, і це видає цю помилку. Виправлення полягає в тому, щоб оновити my.cnf правильним налаштуванням для innodb_buffer_pool_size.


1

Перейдіть до редагування робочого столу → Налаштування → Редактор SQL → Час очікування з’єднань СУБД: До 3000. Помилка більше не сталася.


0

Йти до:

Правка -> Налаштування -> Редактор SQL

Там ви можете побачити три поля в групі "MySQL Session", де тепер можна встановити нові інтервали з'єднання (у секундах).


0

Виявляється, наше правило брандмауера блокувало моє з'єднання з MYSQL. Після того, як політика брандмауера буде знята, щоб дозволити з'єднання, я зміг успішно імпортувати схему.


0

У мене була така ж проблема - але для мене рішення було користувачем БД із занадто суворими дозволами. Я повинен був дозволити Executeвміння на mysqlстолі. Після дозволу у мене більше не було падіння з'єднань



0

Я зіткнувся з цим під час запуску збереженої програми, яка створювала багато рядків у таблиці в базі даних. Я помітив, що помилка прийшла відразу після того, як час перейшов межу 30 секунд.

Я спробував усі пропозиції в інших відповідях. Я впевнений, що деякі з них допомогли, однак - те, що насправді змусило мене працювати, - це перейти на SequelPro з Workbench.

Я здогадуюсь, що я не міг помітити в Workbench зв’язок на стороні клієнта. Може, це допоможе і комусь іншому?


0

Якщо ви використовуєте SQL Work Bench, ви можете спробувати скористатись індексуванням, додавши індекс до своїх таблиць, додати індекс, натисніть на значок гайкового ключа (гайкового ключа) на столі, він повинен відкрити налаштування для таблиці, нижче , натисніть на перегляд індексу, введіть ім'я індексу та встановіть тип індексу, у стовпцях індексів виберіть основний стовпчик таблиці.

Зробіть той же крок для інших первинних ключів в інших таблицях.


0

Здається, тут відсутня відповідь для тих, хто використовує SSH для підключення до своєї бази даних MySQL. Потрібно перевірити два місця не 1, як пропонують інші відповіді:

Правка робочого столу → Налаштування → Редактор SQL → СУБД

Правка верстака → Налаштування → SSH → Часи очікування

Мої тайм-аути SSH за замовчуванням були встановлені дуже низько і спричиняли деякі (але, мабуть, не всі) проблеми з моїм тайм-аутом. Після цього не забудьте перезапустити MySQL Workbench!

Нарешті, можливо, варто звернутися до вашого адміністратора БД та попросити його збільшити властивості wait_timeout & interactive_timeout в самому mysql через перезапуск my.conf + mysql або зробити глобальний набір, якщо перезапуск mysql не є варіантом.

Сподіваюсь, це допомагає!


0

Три речі, які слід дотримуватися та переконайтесь у цьому:

  1. Чи кілька запитів показують втрачене з'єднання?
  2. як ви використовуєте встановлений запит у MySQL?
  3. як видалити + оновити запит одночасно?

Відповіді:

  1. Завжди намагайтеся видалити дефінір, оскільки MySQL створює власний дефінітор, і якщо кілька оновлених таблиць для оновлення намагаються зробити один запит, оскільки іноді кілька запитів показує втрачене з'єднання
  2. Завжди SET значення вгорі, але після DELETE, якщо його стан не включає значення SET.
  3. Використовуйте ВИДАЛЕННЯ ПЕРШОГО ОНОВЛЕННЯ, ЯКЩО БУДЬ ТОМИ ОПЕРАЦІЙ ВИКОНАННЯ НА РІЗНИХ ТАБЛИЦЯ

-1

перевірити о

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

Сподіваюсь, це допомагає


-1

Зазвичай це означає, що у вас "несумісність з поточною версією MySQL Server", див. Mysql_upgrade. Я зіткнувся з цим самим питанням і просто довелося бігти:

mysql_upgrade --password У документації зазначено, що "mysql_upgrade має виконуватися кожного разу при оновленні MySQL".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.