Задавайте вопросы, мы ответим
Вы не зашли.
Использую для подключения к удаленной базе MySql.
Вначале соединяюсь с базой, потом делаю несколько запросов, и в конце закрываю соединение.
Всё работает прекрасно, но есть одна БОЛЬШАЯ проблема, с которой не могу справиться.
Если в процессе работы уже после состоявшегося соединения произвести разрыв связи (ну просто вытаскиваем штекер из сетевой карты), то при очередном запросе - всё висит!!! Просто висит, никаких ошибок - ничего. Я никак не могу отловить такой разрыв связи.
Проект достаточно большой и серьезный и вот в самом конце наткнулся на такую проблему. И она портит всё. Потому, что получается - при любом "не коннекте" вся система улетает в никуда.
P.S. программа на freepascal работает на Linux.
Подскажите пожалуйста - как контролировать СЕТЕВОЕ соединение с базой???
Неактивен
Выяснил, что ровно через 18 минут срабатывает исключение sql error lost connection...
Почему так долго и где можно изменить это время до 10 секунд.
Я понимаю, что выставляться это должно на клиенте, так как после разрыва сети сервер недоступен...
Помогите разобраться...
Неактивен
Попробуйте подкрутить в my.cnf (или my.ini в случае windows-сервера )
параметры
wait_timeout
и
interactive_timeout
Неактивен
Попробуйте подкрутить в my.cnf (или my.ini в случае windows-сервера ) параметры wait_timeout и interactive_timeout написал:
Крутил - ничего не меняется - опять 18 минут ждем и потом только ошибка.
Неактивен
Смотрите, ситуация такая. Клиент посылает запрос серверу, после чего ждет ответа от последнего.
Сервер не посылает никаких пакетов подтверждения, только ответ. Чтобы определять такие обрывы,
нужно посылать периодические ping-пакеты. Некоторые коннекторы умеют делать это нативно, какой
использует freepascal — не представляю. В крайнем случае, в libmysqlclient есть опция
MYSQL_OPT_READ_TIMEOUT, которая Вам должна помочь.
Ну или устанавливать SO_KEEPALIVE на соединение и крутить настройки TCP-стека. Не знаю, впрочем,
насколько это применимо в Вашем случае.
Неактивен
Создал отдельный поток и в нем через интервал (10 сек) проверяю open-close через дополнительное соединение к этой же базе. Как только выскакивает исключение - значит соединение разорвано и нужно закрыть все другие соединения к базе.
Мне кажется было бы конечно правильнее, если сам запрос просто выдавал бы исключение в случае потери связи и все.
Спасибо Вам за помощь...
Неактивен