5.1.8 Использование системных переменных
Сервер MySQL поддерживает множество системных переменных, которые конфигурируют его работу. Раздел 5.1.7, «Переменные сервера», описывает значение этих переменных. Каждая системная переменная имеет значение по умолчанию. Системные переменные могут быть установлены при запуске сервера с помощью параметров командной строки или в файле параметров. Большинство из них могут быть изменены динамически во время работы сервера с помощью оператора SET, который позволяет изменять работу сервера без необходимости его остановки и перезапуска. Вы также можете использовать значения системных переменных в выражениях.
Многие системные переменные являются встроенными. Системные переменные, реализованные плагином сервера, отображаются при установке плагина и имеют имена, начинающиеся с имени плагина. Например, плагин audit_log реализует системную переменную с именем audit_log_policy.
Существуют две области, в которых существуют системные переменные. Глобальные переменные влияют на общую работу сервера. Сеансовые переменные влияют на его работу для отдельных клиентских подключений. Данная системная переменная может иметь как глобальное, так и сеансовое значение. Глобальные и сеансовые системные переменные связаны следующим образом:
При запуске сервера каждая глобальная переменная инициализируется своим значением по умолчанию. Эти значения по умолчанию могут быть изменены параметрами, указанными в командной строке или в файле параметров. (См. Раздел 4.2.2, «Указание параметров программы».)
-
Сервер также поддерживает набор сеансовых переменных для каждого подключенного клиента. Сеансовые переменные клиента инициализируются во время подключения с использованием текущих значений соответствующих глобальных переменных. Например, режим SQL клиента контролируется сеансовым значением
sql_mode, которое инициализируется при подключении клиента к значению глобальной переменнойsql_mode.Для некоторых системных переменных сеансовое значение не инициализируется из соответствующего значения глобальной переменной; если это так, это указывается в описании переменной.
Значения системных переменных могут быть установлены глобально при запуске сервера с помощью параметров командной строки или в файле параметров. При запуске синтаксис системных переменных такой же, как и для параметров командной строки, поэтому в именах переменных дефисы и подчеркивания могут использоваться взаимозаменяемо. Например, --general_log=ON и --general-log=ON эквивалентны.
При использовании параметра запуска для установки переменной, принимающей числовое значение, значение может быть указано с суффиксом K, M или G (как прописными, так и строчными буквами) для указания множителя 1024, 10242 или 10243 соответственно; то есть единицы килобайт, мегабайт или гигабайт соответственно. Таким образом, следующая команда запускает сервер с размером файла журнала InnoDB в 16 мегабайт и максимальным размером пакета в один гигабайт:
mysqld --innodb-log-file-size=16M --max-allowed-packet=1G
В файле параметров эти переменные устанавливаются так:
[mysqld]
innodb_log_file_size=16M
max_allowed_packet=1G
Регистр букв суффикса не имеет значения; 16M и 16m эквивалентны, так же как и 1G и 1g.
Для ограничения максимального значения, которое может быть установлено для системной переменной во время выполнения с помощью оператора SET, укажите это максимальное значение, используя параметр в формате --maximum- при запуске сервера. Например, чтобы предотвратить увеличение значения var_name=valueinnodb_log_file_size более чем на 32 МБ во время выполнения, используйте параметр --maximum-innodb-log-file-size=32M.
Многие системные переменные являются динамическими и могут быть изменены во время выполнения с помощью оператора SET. Список см. в разделе 5.1.8.2, «Динамические системные переменные». Для изменения системной переменной с помощью SET, ссылайтесь на нее по имени, необязательно предваряя модификатором. Во время выполнения имена системных переменных должны быть написаны с использованием подчеркиваний, а не дефисов. Следующие примеры кратко иллюстрируют этот синтаксис:
-
Установить глобальную системную переменную:
SET GLOBAL max_connections = 1000; SET @@GLOBAL.max_connections = 1000;
-
Установить сеансовую системную переменную:
SET SESSION sql_mode = 'TRADITIONAL'; SET @@SESSION.sql_mode = 'TRADITIONAL'; SET @@sql_mode = 'TRADITIONAL';
Для получения подробной информации о синтаксисе SET см. раздел 13.7.4.1, «Синтаксис оператора SET для присваивания переменных». Описание требований к привилегиям для установки системных переменных см. в разделе 5.1.8.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 |
+---------------------------------+-----------------------------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
| back_log | 50 |
| basedir | /home/mysql/ |
| binlog_cache_size | 32768 |
| bulk_insert_buffer_size | 8388608 |
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /home/mysql/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
...
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_size | 8388608 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
...
| version | 5.7.18-log |
| version_comment | Source distribution |
| version_compile_machine | i686 |
| version_compile_os | suse-linux |
| wait_timeout | 28800 |
+---------------------------------+-----------------------------------+
С помощью 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 при установке GLOBAL-только переменных, но не при их получении, заключается в предотвращении проблем в будущем:
Если переменная
SESSIONбыла удалена, имеющая то же имя, что и переменнаяGLOBAL, клиент с привилегиями, достаточными для изменения глобальных переменных, мог случайно изменить переменнуюGLOBALвместо того, чтобы просто изменить переменнуюSESSIONдля своего собственного сеанса.Если была добавлена переменная
SESSIONс тем же именем, что и переменнаяGLOBAL, клиент, намеревающийся изменить переменнуюGLOBAL, мог обнаружить, что изменилась только его собственная переменнаяSESSION.
© 2025 Oracle
Licensed under the GPLv2 License.