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

Это хорошая идея для доступа к таким данным?

Я не вижу никакой выгоды, он просто добавляет много шаблонного.

Если позже вам понадобится какой-нибудь метод получения / установки, вы можете прозрачно добавить его, ничего не нарушая.

{ example: "test", }
// can be turned into
{ 
  get example() { /*..*/ },
  set example(v) { /*...*/ },
 }

Насколько я вижу, то же самое относится и к C #:

 string example
 // can be turned to
 string example {
   get {
     //...
   }
 }

, поэтому я не уверен, о каких «лучших практиках» вы говорите.

... если вы что-то меняете в переменных a и b, вам не нужно менять весь код, который их использует.

Но ... если эти свойства изменяются таким образом, что это влияет на их функциональность, код, использующий его, тоже должен быть изменен, использование getters / setters, чтобы «заставить его все еще работать как-то», не долго срок решения.

19
задан acemtp 28 October 2008 в 15:03
поделиться

3 ответа

Нет никакой конфигурации тайм-аута в расчете на пользователя, но можно установить эти wait_timeout значение динамично. Таким образом, после того, как Вы устанавливаете связь как данный пользователь, можно сделать заявление для изменения значения тайм-аута на то, чем Вы хотите, чтобы оно было для сессии того пользователя.

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

mysql> SHOW VARIABLES LIKE 'wait_timeout';

... шоу 28800 (т.е. 8 часов), который является значением по умолчанию wait_timout.

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

... шоу 60.

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

можно также открыть второе окно и запустить отдельную mysql клиентскую сессию, чтобы доказать, что изменение wait_timeout на одной сессии не влияет на другие параллельные сессии.

27
ответ дан 30 November 2019 в 03:34
поделиться

Я проверил mysql.user таблица, и не похоже, что существует установка там для него:

+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     |         |       |
| x509_issuer           | blob                              | NO   |     |         |       |
| x509_subject          | blob                              | NO   |     |         |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.00 sec)

В зависимости от того, используете ли Вы MySQLi или PDO, Ваши Подключения mysql PHP должны или зависнуть, когда запрос делает, или быть совместно использованным в пуле для процесса Apache.

, Например, с PDO, для выключения постоянных соединений (я думаю, что это - значение по умолчанию), подключение к DB с:

$pdo = новый PDO ($dsn, $user, $pass, Массив (PDO:: ATTR_PERSISTENT => ложь));

, Если Вы хотите, чтобы Ваши сценарии использовали постоянные соединения, но у Вас есть слишком много соединений, открытых для Вашей базы данных в режиме ожидания, необходимо думать о конфигурировании Apache MaxServers, MaxSpareServers, MinSpareServers и StartServers так, чтобы не так многие бродили вокруг, когда они не необходимы.

0
ответ дан 30 November 2019 в 03:34
поделиться

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

различие между интерактивными и неинтерактивными клиентами, кажется, просто, указали ли Вы CLIENT_INTERACTIVE опция при соединении.

я не знаю, помогает ли это Вам, потому что необходимо так или иначе сделать mysql_real_connect() передача что опция в client_flag параметр. Я не уверен, какой язык или интерфейс Вы используете, таким образом, я не знаю, разрешает ли он Вам указывать этот флаг соединения.

Так или иначе, если можно передать тот клиентский флаг, и Вам только нужны два различных типов пользователей, затем Вы могли настроить wait_timeout и interactive_timeout по-другому в конфигурации сервера MySQL и затем использовать ту с более коротким значением, когда Вы хотите, чтобы данная сессия испытала таймаут быстро.

2
ответ дан 30 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: