Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL
Сейчас у меня в спящем режиме более 100 9X_mysql подключений.
Некоторое соединение должно 9X_mysqld оставаться в состоянии сна (и не закрываться), потому 9X_mysql-table что это постоянное соединение, но некоторые 9X_mysqlsh другие (с другим именем пользователя) взяты 9X_mysql-server из некоторого скрипта php, и я хочу, чтобы 9X_mysql-if они очень быстро истекали по таймауту.
Можно 9X_mysqldump ли настроить время ожидания для каждого 9X_mysql-server пользователя? и если да, то как?
Ответ #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 параллельные сеансы.
Ответ #2
Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL
Вы должны установить следующие переменные 9X_mysql-if в вашем my.conf
:
[mysqld] interactive_timeout=180 wait_timeout=180
wait_timeout
- тайм-аут для автоматических подключений (на мой взгляд, более 30 на веб-сервере - это слишком много).
interactive_timeout
- это тайм-аут взаимодействия с консолью для 9X_mysqld сеанса ожидания.
- Многие (большинство?) Веб-серверов используют пул соединений. В этом случае 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 вы хотите, чтобы данный сеанс быстро истек.
Ответ #4
Ответ на вопрос: Как настроить тайм-аут соединения в зависимости от логина пользователя в MySQL
Если вы используете Connector/J, вы можете использовать 9X_mysqlclient переменные сеанса в URL-адресе JDBC клиента следующим образом: jdbc:mysql://hostname:3306/schema?sessionVariables=wait_timeout=600
Другие 9X_timeout соединители для других языков, вероятно, позволят 9X_mysqld то же самое.
Ответ #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";
-
3
-
10
-
2
-
15
-
2
-
21
-
3
-
3
-
4
-
1
-
1
-
9
-
1
-
1
-
1
-
9
-
4
-
2
-
22
-
20
-
4
-
6
-
18
-
5
-
12
-
2
-
16
-
9
-
2
-
3
-
4
-
7
-
12
-
6
-
5
-
4
-
5
-
3
-
5
-
10
-
6
-
4
-
26
-
8
-
18
-
4
-
6
-
5
-
4
-
2