Spec-Zone .ru
спецификации, руководства, описания, API

21.8.16. Управление Автоматическим Поведением Пересоединения

Клиентская библиотека 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() снова, чтобы видеть, изменился ли идентификатор.

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

Если соединение отбрасывает, возможно, что сеанс, связанный с соединением на стороне сервера, будет все еще работать, если сервер еще не обнаружил, что клиент больше не соединяется. В этом случае любые блокировки, сохраненные исходным соединением все еще, принадлежат тому сеансу, таким образом, можно хотеть уничтожить это, вызывая mysql_kill().