Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

Сейчас у меня в спящем режиме более 100 9X_mysql подключений.

Некоторое соединение должно 9X_mysqld оставаться в состоянии сна (и не закрываться), потому 9X_mysql-table что это постоянное соединение, но некоторые 9X_mysqlsh другие (с другим именем пользователя) взяты 9X_mysql-server из некоторого скрипта php, и я хочу, чтобы 9X_mysql-if они очень быстро истекали по таймауту.

Можно 9X_mysqldump ли настроить время ожидания для каждого 9X_mysql-server пользователя? и если да, то как?

20
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

Конфигурация тайм-аута для каждого пользователя 9X_mysql-table отсутствует, но вы можете установить значение 9X_mysqlsh wait_timeout динамически. То есть после того, как вы 9X_mysqlclient установите соединение в качестве данного 9X_mysql-table пользователя, вы можете выполнить инструкцию, чтобы 9X_mysql изменить значение тайм-аута на то, что вы 9X_mysql-server хотите, чтобы оно было для сеанса этого 9X_mysql-if пользователя.

Попробуйте провести следующий 9X_mysqlsh эксперимент в клиенте командной строки mysql:

mysql> SHOW VARIABLES LIKE 'wait_timeout';

... показывает 9X_mysql-table 28800 (т.е. 8 часов), что является значением 9X_mysql-table по умолчанию wait_timout.

mysql> SET SESSION wait_timeout = 60;
mysql> SHOW VARIABLES LIKE 'wait_timeout';

... показывает 60.

Затем вы 9X_mysql можете выйти из сеанса, повторно подключиться, и 9X_mysqldump снова wait_timeout по умолчанию - 28800. Таким образом, он 9X_mysql-query ограничен областью текущего сеанса.

Вы также 9X_mysql можете открыть второе окно и запустить отдельный 9X_mysqld клиентский сеанс mysql, чтобы доказать, что 9X_mysql-query изменение wait_timeout в одном сеансе не влияет на другие 9X_mysql-if параллельные сеансы.

31
0

Ответ #2

Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

Вы должны установить следующие переменные 9X_mysql-if в вашем my.conf:

[mysqld]
interactive_timeout=180
wait_timeout=180

wait_timeout - тайм-аут для автоматических подключений (на мой взгляд, более 30 на веб-сервере - это слишком много).
interactive_timeout - это тайм-аут взаимодействия с консолью для 9X_mysqld сеанса ожидания.

6
1

  • Многие (большинство?) Веб-серверов используют пул соединений. В этом случае 180, ...

Ответ #3

Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

Другая возможность: MySQL поддерживает две 9X_mysqldump разные переменные тайм-аута: wait_timeout для неинтерактивных 9X_mysql-table клиентов и interactive_timeout для интерактивных клиентов.

Разница 9X_mysqlclient между интерактивными и неинтерактивными 9X_mysql-server клиентами, кажется, просто в том, указали 9X_mysqlclient ли вы параметр CLIENT_INTERACTIVE при подключении.

Я не знаю, поможет 9X_mysql-if ли это вам, потому что вам нужно каким-то 9X_mysql образом заставить mysql_real_connect() передать эту опцию в 9X_timeout свой параметр client_flag. Я не уверен, какой язык 9X_mysql-if или интерфейс вы используете, поэтому не 9X_mysql-query знаю, позволяет ли он вам указывать этот 9X_my-sql флаг подключения.

В любом случае, если вы 9X_mysql-if можете передать этот флаг клиента, и вам 9X_mysql-table нужны только два разных типа пользователей, тогда 9X_my-sql вы можете настроить wait_timeout и interactive_timeout по-разному в конфигурации 9X_mysql сервера MySQL, а затем использовать тот, у 9X_mysqlclient которого более короткое значение, когда 9X_mysqld вы хотите, чтобы данный сеанс быстро истек.

3
0

Ответ #4

Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

Если вы используете Connector/J, вы можете использовать 9X_mysqlclient переменные сеанса в URL-адресе JDBC клиента следующим образом: jdbc:mysql://hostname:3306/schema?sessionVariables=wait_timeout=600

Другие 9X_timeout соединители для других языков, вероятно, позволят 9X_mysqld то же самое.

3
0

Ответ #5

Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL

init_connect будет выполняться всякий раз, когда 9X_my-sql пользователь входит в систему, поэтому мы 9X_mysqld можем написать небольшой оператор case и 9X_mysql-if установить значение в зависимости от пользователя. Обратите 9X_mysqlsh внимание, что init_connect не будет выполняться 9X_mysqldump для суперпользователя.

mysql> SET GLOBAL init_connect="SET @@wait_timeout = CASE WHEN CURRENT_USER() LIKE 'app1@%' THEN '30' ELSE @@wait_timeout END";

2
0