Spec-Zone.ru › MySQL 9.2

7.1.9 Использование системных переменных

  • 7.1.9.1 Привилегии на системные переменные
  • 7.1.9.2 Динамические системные переменные
  • 7.1.9.3 Постоянные системные переменные
  • 7.1.9.4 Непостоянные и ограниченные по сохранению системные переменные
  • 7.1.9.5 Структурированные системные переменные

Сервер MySQL поддерживает множество системных переменных, которые конфигурируют его работу. Раздел 7.1.8, «Системные переменные сервера», описывает значение этих переменных. Каждая системная переменная имеет значение по умолчанию. Системные переменные могут быть установлены при запуске сервера с помощью параметров в командной строке или в файле параметров. Большинство из них могут быть изменены динамически во время работы сервера с помощью оператора SET, который позволяет изменять работу сервера, не останавливая и не перезапуская его. Вы также можете использовать значения системных переменных в выражениях.

Многие системные переменные встроены. Системные переменные также могут быть установлены плагинами или компонентами сервера:

  • Системные переменные, реализованные плагином сервера, появляются при установке плагина и имеют имена, начинающиеся с имени плагина. Например, плагин audit_log реализует системную переменную с именем audit_log_policy.

  • Системные переменные, реализованные компонентом, появляются при установке компонента и имеют имена, начинающиеся с префикса, специфичного для компонента. Например, компонент фильтрации журнала ошибок log_filter_dragnet реализует системную переменную с именем log_error_filter_rules, полное имя которой — dragnet.log_error_filter_rules. Чтобы обратиться к этой переменной, используйте полное имя.

Существуют два контекста существования системных переменных. Глобальные переменные влияют на общую работу сервера. Сеансовые переменные влияют на его работу для отдельных подключений к клиенту. Данная системная переменная может иметь как глобальное, так и сеансовое значение. Глобальные и сеансовые системные переменные связаны следующим образом:

  • При запуске сервера каждая глобальная переменная инициализируется своим значением по умолчанию. Эти значения по умолчанию могут быть изменены параметрами, указанными в командной строке или в файле параметров. (См. Раздел 6.2.2, «Указание параметров программы».)

  • Сервер также поддерживает набор сеансовых переменных для каждого подключающегося клиента. Сеансовые переменные клиента инициализируются во время подключения, используя текущие значения соответствующих глобальных переменных. Например, режим SQL клиента контролируется сеансовым значением sql_mode, которое инициализируется при подключении клиента со значением глобальной sql_mode переменной.

    Для некоторых системных переменных сеансовое значение не инициализируется из соответствующего глобального значения; в этом случае это указывается в описании переменной.

Значения системных переменных могут быть установлены глобально при запуске сервера с помощью параметров в командной строке или в файле параметров. При запуске синтаксис для системных переменных такой же, как для параметров командной строки, поэтому в именах переменных дефисы и подчёркивания могут использоваться взаимозаменяемо. Например, --general_log=ON и --general-log=ON эквивалентны.

При использовании параметра запуска для установки переменной, принимающей числовое значение, значение может быть задано с суффиксом K, M, G, T, P или E (как заглавными, так и строчными буквами) для указания множителя 1024, 10242, 10243, 10244, 10245 или 10246 соответственно. То есть, единицы измерения килобайты, мегабайты, гигабайты, терабайты, петабайты или эксабайты. Таким образом, следующая команда запускает сервер с размером буфера сортировки 256 килобайт и максимальным размером пакета один гигабайт:

mysqld --sort-buffer-size=256K --max-allowed-packet=1G

В файле параметров эти переменные устанавливаются так:

[mysqld]
sort_buffer_size=256K
max_allowed_packet=1G

Регистр букв в суффиксах не имеет значения; 256K и 256k эквивалентны, как и 1G и 1g.

Для ограничения максимального значения, до которого системная переменная может быть установлена во время выполнения с помощью оператора SET, укажите это максимальное значение, используя параметр вида --maximum-var_name=value при запуске сервера. Например, чтобы предотвратить увеличение значения sort_buffer_size более чем до 32 МБ во время выполнения, используйте параметр --maximum-sort-buffer-size=32M.

Многие системные переменные динамические и могут быть изменены во время выполнения с помощью оператора SET. Список см. в Разделе 7.1.9.2, «Динамические системные переменные». Чтобы изменить системную переменную с помощью SET, ссылайтесь на неё по имени, необязательно с префиксом. Во время выполнения имена системных переменных должны быть записаны с использованием подчёркиваний, а не дефисов. Следующие примеры кратко иллюстрируют этот синтаксис:

  • Установка глобальной системной переменной:

    SET GLOBAL max_connections = 1000;
    SET @@GLOBAL.max_connections = 1000;
    
  • Сохранение глобальной системной переменной в файл mysqld-auto.cnf (и установка значения во время выполнения):

    SET PERSIST max_connections = 1000;
    SET @@PERSIST.max_connections = 1000;
    
  • Сохранение глобальной системной переменной в файл mysqld-auto.cnf (без установки значения во время выполнения):

    SET PERSIST_ONLY back_log = 1000;
    SET @@PERSIST_ONLY.back_log = 1000;
    
  • Установка сеансовой системной переменной:

    SET SESSION sql_mode = 'TRADITIONAL';
    SET @@SESSION.sql_mode = 'TRADITIONAL';
    SET @@sql_mode = 'TRADITIONAL';
    

Для получения полной информации о синтаксисе SET см. Раздел 15.7.6.1, «Синтаксис оператора SET для присваивания переменных». О требованиях к привилегиям для установки и сохранения системных переменных см. Раздел 7.1.9.1, «Привилегии на системные переменные»

Суффиксы для указания множителя значения могут использоваться при установке переменной при запуске сервера, но не для установки значения с помощью SET во время выполнения. С другой стороны, с помощью SET вы можете назначить значение переменной с помощью выражения, что неверно, когда вы устанавливаете переменную при запуске сервера. Например, первое из следующих строк допустимо при запуске сервера, но второе — нет:

$> mysql --max_allowed_packet=16M
$> mysql --max_allowed_packet=16*1024*1024

И наоборот, второе из следующих строк допустимо во время выполнения, но первое — нет:

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;

Для отображения имён и значений системных переменных используйте оператор SHOW VARIABLES:

mysql> SHOW VARIABLES;
+-------------------------------------------------------+----------------------+
| Variable_name                                         | Value                |
+-------------------------------------------------------+----------------------+
| activate_all_roles_on_login                           | OFF                  |
| admin_address                                         |                      |
| admin_port                                            | 33062                |
| admin_ssl_ca                                          |                      |
| admin_ssl_capath                                      |                      |
| admin_ssl_cert                                        |                      |
| admin_ssl_cipher                                      |                      |
| admin_ssl_crl                                         |                      |
| admin_ssl_crlpath                                     |                      |
| admin_ssl_key                                         |                      |
| admin_tls_ciphersuites                                |                      |
| admin_tls_version                                     | TLSv1.2,TLSv1.3      |
| authentication_policy                                 | *,,                  |
| auto_generate_certs                                   | ON                   |
| auto_increment_increment                              | 1                    |
| auto_increment_offset                                 | 1                    |
| autocommit                                            | ON                   |
| automatic_sp_privileges                               | ON                   |

...

| version                                               | 8.4.0                |
| version_comment                                       | Source distribution  |
| version_compile_machine                               | x86_64               |
| version_compile_os                                    | Linux                |
| version_compile_zlib                                  | 1.2.13               |
| wait_timeout                                          | 28800                |
| warning_count                                         | 0                    |
| windowing_use_high_precision                          | ON                   |
| xa_detach_on_prepare                                  | ON                   |
+-------------------------------------------------------+----------------------+

С помощью клаузы LIKE, оператор отображает только переменные, которые соответствуют шаблону. Чтобы получить определённое имя переменной, используйте клаузу LIKE как показано:

SHOW VARIABLES LIKE 'max_join_size';
SHOW SESSION VARIABLES LIKE 'max_join_size';

Чтобы получить список переменных, чьи имена соответствуют шаблону, используйте символ подстановки % в клаузе LIKE:

SHOW VARIABLES LIKE '%size%';
SHOW GLOBAL VARIABLES LIKE '%size%';

Символы подстановки могут использоваться в любой позиции шаблона, который нужно сопоставить. Строго говоря, так как _ является символом подстановки, который соответствует любому одиночному символу, вы должны экранировать его как \_, чтобы сопоставить его буквально. На практике это редко необходимо.

Для SHOW VARIABLES, если вы не укажете ни GLOBAL, ни SESSION, MySQL возвращает значения SESSION.

Причина, по которой требуется ключевое слово GLOBAL при установке переменных только для глобального уровня, но не при их получении, заключается в предотвращении проблем в будущем:

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

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/using-system-variables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API