it-swarm.com.ru

MySQL Workbench разрывает соединение в режиме ожидания

Я использую MySQL Workbench 6.3 на моей OS X 10.9.5 для управления несколькими облачными базами данных (размещенными в Rackspace), и у меня возникает следующая проблема:

При неактивности в течение 5 минут возникают следующие проблемы:

  • Я не могу выполнить любой запрос (ошибка 2013: потеря соединения с сервером MySQL во время запроса)
  • при попытке просмотра таблиц в моей БД я получаю сообщения типа «Таблицы не могут быть извлечены», «Представления не могут быть извлечены» и т. д.
  • при обновлении левой панели я получаю сообщение «Код ошибки: сервер MySQL 2006 исчез»

Так что в основном связь исчезла.

Это действительно раздражает, так как это происходит после 5 минут бездействия. Поэтому мне нужно закрыть соединение и открывать его каждый раз.

Я также попробовал это: MySQL Workbench: как сохранить соединение , который ничего не изменил . На моей вкладке Настройки Workbench у меня есть следующие настройки:

  • Интервал поддержания соединения с СУБД (в секундах): 600
  • Время чтения соединения с СУБД (в секундах): 600
  • Время ожидания подключения к СУБД (в секундах): 60

Обратите внимание, что эта проблема возникает именно после 5 минут бездействия! Если я выполняю два запроса с интервалом в 4'59 минут, это прекрасно работает .. Также у моих коллег, которые подключаются к одной и той же базе данных на своем Workbench, такой проблемы нет.

У кого-нибудь есть решение для этого?

32
Michel Y

Перейдите в Edit -> Preferences -> SQL Editor и там вы увидите:

DBMS connection keep-alive interval (in seconds): 600
DBMS connection read time out (in seconds): 600
DBMS connection time out (in seconds): 60

Интервал поддержания соединения с СУБД означает, как часто Workbench отправляет серверу запрос на поддержание соединения, чтобы поддерживать соединение.

Поскольку 5 минут == 300 секунд, Установить интервал поддержания активности соединения СУБД <300 (например, 250)

Это будет означать «отправлять запрос подтверждения активности каждые 250 секунд». Нажмите ОК.

Затем выйдите из MySQL Workbench и перезапустите его, чтобы изменения вступили в силу.

Если вы используете стандартный метод соединения TCP/IP через SSH, также может быть полезно настроить ssh ServerAliveInterval.

24
Kosh Very

Эта ошибка существует во всех версиях MySQL Workbench, кроме 6.0 (в настоящее время ошибка 6.1, 6.2 и 6.3).

Переход на MySQL Workbench 6.0.x кажется единственным способом решения этой проблемы.

Загрузите MySQL Workbench 6.0.x: http://dev.mysql.com/downloads/workbench/6.0.html

14
lepix

FWIW: Следуя рекомендации Коша, я изменил настройки следующим образом, и, похоже, устранил проблему на WB 6.3, работающем на Ubuntu 16:

DBMS connection keep-alive interval (in seconds): 60
DBMS connection read time out (in seconds): 60
DBMS connection time out (in seconds): 30

Это может быть излишним, но это работает.

2
Max

Это решило меня, установив tcp_keepalive_time на 120 секунд в Ubuntu 14.04, размещенной в Windows Azure.

Продолжительность активности TCP в балансировщике нагрузки Azure по умолчанию составляет 240 секунд, что может привести к автоматическому отключению соединений, если значение активности активности TCP в ваших системах Azure больше этого значения. Вы должны установить tcp_keepalive_time на 120, чтобы решить эту проблему.

  1. Чтобы проверить tcp_keepalive_time

    cat/proc/sys/net/ipv4/tcp_keepalive_time

7200 (по умолчанию 2 часа)

2. установить значение от 2 часов до 120 секунд.

Sudo sysctl -w net.ipv4.tcp_keepalive_time = 120

net.ipv4.tcp_keepalive_time = 120

  1. перепроверить значение после изменения .

    cat/proc/sys/net/ipv4/tcp_keepalive_time

120

4.Установите значение в файле sysctl, чтобы оно оставалось даже после перезагрузки.

vi /etc/sysctl.conf

Нажмите i (для вставки в файл) Net.ipv4.tcp_keepalive_time = 120 (добавьте эту строку внизу файла) : wq (сохранить и выйти)

1
Srikanth P

Это сводило меня с ума в течение нескольких месяцев. Мои соединения были с сервером Hostgator. Я бы подключился и мог редактировать таблицу в течение 10 секунд или около того после подключения, затем я бы сделал, скажем, фиксацию таблицы, и таблица изменилась бы на «Только чтение» с сообщением при наведении мыши на «Не удалось определить уникальный идентификатор строки (сервер MySQL пропал) или "(потеря соединения с сервером MySQL во время запроса).

Как и другие предложения здесь, решение было УМЕНЬШИТЬ настройку поддержки активности. В моем случае это должно было снизиться до 10 секунд (очевидно, Hostgator, если довольно скупо с их пропускной способностью!)

Сначала я попытался уменьшить SSH KeepAlivePreferences/Others/Timeouts), но это не сработало.

Что помогло, уменьшив DBMS connection keep-alive intervalPreferences/SQL Editor/MySQL Session). Мне пришлось довести его до 10 секунд, пока соединение не останется стабильным. Ваш Хост может быть другим.

Наконец, больше не «Обновить все», подождите, сделайте что-нибудь, сполосните и повторите.

0
SteveCinq

Ответ Кош Вера не сработал для меня, поэтому я нашел другое решение для этого:

измените max_allowed_packet в файле my.ini. (C:\ProgramData\MySQL\MySQL Server 5.6)

max_allowed_packet = 16M

теперь перезапустите службу MySQL, как только вы закончите.

0
JerryGoyal

Кош очень это правильный ответ. Для тех, кто не мог заставить его работать, вот другое решение:

Где мне нужно изменить огромную таблицу (удалить или добавить столбец или тому подобное), чтобы выполнить запрос (ы) по терминалу:

  1. Подключиться : mysql -u myusername -p 

  2. Вам будет предложено ввести пароль

  3. Выполнить длительный запрос (ы) вам нужно. Примечание: для написания запроса в терминале требуется конечная точка с запятой (;) для каждого. Пример: ALTER TABLE mydb.mytable DROP COLUMN mycol;
0
evilReiko