Spec-Zone .ru
спецификации, руководства, описания, API
|
Клиентская библиотека MySQL может выполнить автоматическое пересоединение с сервером, если это находит, что соединение снижается, когда Вы пытаетесь отправить оператор серверу, который будет выполняться. В этом случае библиотека пробует однажды повторно соединиться с сервером и отправить оператор снова.
В MySQL 5.7 % автоповторно соединитесь, отключается по умолчанию.
Если для Вашего приложения важно знать, что соединение было отброшено (так, чтобы был, может выйти или принять
меры, чтобы корректироваться за потерю информации о состоянии), убедитесь, что % автоповторно соединяются,
отключается. Чтобы гарантировать это, вызвать mysql_options()
с MYSQL_OPT_RECONNECT
опция:
my_bool reconnect = 0;mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
Если соединение потеряло работоспособность, эффект mysql_ping()
зависит от!P автоповторно соединить состояния. Если % автоповторно соединяются, включается, mysql_ping()
выполняет повторно соединение. Иначе, это возвращает ошибку.
Некоторые клиентские программы могли бы обеспечить возможность управления автоматическим пересоединением.
Например, mysql повторно соединяется по умолчанию, но --skip-reconnect
опция может использоваться, чтобы подавить это поведение.
Если автоматическое пересоединение действительно происходит (например, в результате вызова mysql_ping()
), нет никакой явной индикации относительно этого. Чтобы проверить на
пересоединение, вызвать mysql_thread_id()
получить исходный идентификатор соединения перед вызовом mysql_ping()
, тогда вызовите mysql_thread_id()
снова, чтобы видеть, изменился ли идентификатор.
Автоматическое пересоединение может быть удобным, потому что Вы не должны реализовать свое собственное, повторно соединяют код, но если пересоединение действительно происходит, несколько аспектов состояния соединения сбрасываются на стороне сервера, и Ваше приложение не будет знать об этом. На связанное с соединением состояние влияют следующим образом:
Любые активные транзакции откатываются и автоматически фиксируют режим, сбрасывается.
Все блокировки таблицы выпускаются.
Все TEMPORARY
таблицы закрываются (и отбрасываются).
Переменные сеанса повторно инициализируются к значениям соответствующих переменных.
Это также влияет на переменные, которые устанавливаются неявно операторами такой как SET NAMES
.
Пользовательские настройки переменной теряются.
Опубликовываются готовые заявления.
HANDLER
переменные закрываются.
Значение LAST_INSERT_ID()
сбрасывается к 0.
Блокировки, полученные с GET_LOCK()
выпускаются.
Ассоциация клиента со Схемой Производительности threads
строка таблицы, которая определяет инструментарий потока
соединения, теряется. Если клиент повторно соединится то после разъединения сеанс будет связан с новой
строкой в threads
таблица и
контрольное состояние потока могут отличаться. См. Раздел
20.9.9.3," threads
Таблица".
Если соединение отбрасывает, возможно, что сеанс, связанный с соединением на стороне сервера, будет все еще
работать, если сервер еще не обнаружил, что клиент больше не соединяется. В этом случае любые блокировки,
сохраненные исходным соединением все еще, принадлежат тому сеансу, таким образом, можно хотеть уничтожить это,
вызывая mysql_kill()
.