SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.10.2013 01:58:26

dmadma
Участник
Зарегистрирован: 14.10.2013
Сообщений: 4

Как опознать разрыв сетевого соединения с базой?

Использую для подключения к удаленной базе MySql.
Вначале соединяюсь с базой, потом делаю несколько запросов, и в конце закрываю соединение.

Всё работает прекрасно, но есть одна БОЛЬШАЯ проблема, с которой не могу справиться.
Если в процессе работы уже после состоявшегося соединения произвести разрыв связи (ну просто вытаскиваем штекер из сетевой карты), то при очередном запросе - всё висит!!! Просто висит, никаких ошибок - ничего. Я никак не могу отловить такой разрыв связи.

Проект достаточно большой и серьезный и вот в самом конце наткнулся на такую проблему. И она портит всё. Потому, что получается - при любом "не коннекте" вся система улетает в никуда.

P.S. программа на freepascal работает на Linux.

Подскажите пожалуйста - как контролировать СЕТЕВОЕ соединение с базой???

Неактивен

 

#2 14.10.2013 02:00:38

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как опознать разрыв сетевого соединения с базой?

Посмотрите здесь.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 14.10.2013 13:45:52

dmadma
Участник
Зарегистрирован: 14.10.2013
Сообщений: 4

Re: Как опознать разрыв сетевого соединения с базой?

Выяснил, что ровно через 18 минут срабатывает исключение sql error lost connection...

Почему так долго и где можно изменить это время до 10 секунд.
Я понимаю, что выставляться это должно на клиенте, так как после разрыва сети сервер недоступен...

Помогите разобраться...

Неактивен

 

#4 14.10.2013 13:51:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как опознать разрыв сетевого соединения с базой?

Попробуйте подкрутить в my.cnf (или my.ini в случае windows-сервера  )
параметры
wait_timeout
и
interactive_timeout


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 14.10.2013 20:25:21

dmadma
Участник
Зарегистрирован: 14.10.2013
Сообщений: 4

Re: Как опознать разрыв сетевого соединения с базой?

Попробуйте подкрутить в my.cnf (или my.ini в случае windows-сервера  ) параметры wait_timeout и interactive_timeout написал:

Крутил - ничего не меняется - опять 18 минут ждем и потом только ошибка.

Неактивен

 

#6 14.10.2013 23:02:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как опознать разрыв сетевого соединения с базой?

Смотрите, ситуация такая. Клиент посылает запрос серверу, после чего ждет ответа от последнего.
Сервер не посылает никаких пакетов подтверждения, только ответ. Чтобы определять такие обрывы,
нужно посылать периодические ping-пакеты. Некоторые коннекторы умеют делать это нативно, какой
использует freepascal — не представляю. В крайнем случае, в libmysqlclient есть опция
MYSQL_OPT_READ_TIMEOUT, которая Вам должна помочь.

Ну или устанавливать SO_KEEPALIVE на соединение и крутить настройки TCP-стека. Не знаю, впрочем,
насколько это применимо в Вашем случае.

Неактивен

 

#7 15.10.2013 20:21:29

dmadma
Участник
Зарегистрирован: 14.10.2013
Сообщений: 4

Re: Как опознать разрыв сетевого соединения с базой?

Создал отдельный поток и в нем через интервал (10 сек) проверяю open-close через дополнительное соединение к этой же базе. Как только выскакивает исключение - значит соединение разорвано и нужно закрыть все другие соединения к базе.

Мне кажется было бы конечно правильнее, если сам запрос просто выдавал бы исключение в случае потери связи и все.

Спасибо Вам за помощь...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson