Spec-Zone .ru
спецификации, руководства, описания, API

5.1.5. Используя Системные Переменные

5.1.5.1. Структурированные Системные Переменные
5.1.5.2. Динамические Системные Переменные

Сервер MySQL поддерживает много системных переменных, которые указывают, как он конфигурируется. Раздел 5.1.4, "Системные Переменные Сервера", описывает значение этих переменных. У каждой системной переменной есть значение по умолчанию. Системные переменные могут быть установлены в опциях использования запуска сервера на командной строке или в файле опции. Большинство из них может быть изменено динамически, в то время как сервер работает посредством SET оператор, который позволяет Вам изменить работу сервера, не имея необходимость останавливать и перезапускать это. Можно обратиться к системным значениям переменных в выражениях.

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

Системные значения переменных могут быть установлены глобально при запуске сервера при использовании опций на командной строке или в файле опции. Когда Вы используете опцию запуска, чтобы установить переменную, которая берет числовое значение, значение может быть дано с суффиксом K, M, или G (или верхний регистр или нижний регистр), чтобы указать на множитель 1024, 10242 или 10243; то есть, модули килобайтов, мегабайтов, или гигабайтов, соответственно. Таким образом следующая команда запускает сервер с размера кэша запроса 16 мегабайтов и максимального пакетного размера одного гигабайта:

mysqld --query_cache_size=16M --max_allowed_packet=1G

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

[mysqld]query_cache_size=16Mmax_allowed_packet=1G

lettercase букв суффикса не имеет значения; 16M и 16m эквивалентны, как 1G и 1g.

Если Вы хотите ограничить максимальное значение, в которое системная переменная может быть установлена во времени выполнения с SET оператор, можно определить этот максимум при использовании опции формы --maximum-var_name=value при запуске сервера. Например, чтобы предотвратить значение query_cache_size от того, чтобы быть увеличенным больше чем до 32 МБ во времени выполнения используйте опцию --maximum-query_cache_size=32M.

Много системных переменных являются динамичными и могут быть заменены, в то время как сервер работает при использовании SET оператор. Для списка см. Раздел 5.1.5.2, "Динамические Системные Переменные". Заменить системную переменную с SET, обратитесь к этому как var_name, дополнительно предшествовавший модификатором:

A SET оператор может содержать многократные переменные присвоения, разделенные запятыми. Если Вы устанавливаете несколько системных переменных, новое GLOBAL или SESSION модификатор в операторе используется для следующих переменных, у которых нет никакого определенного модификатора.

Примеры:

SET sort_buffer_size=10000;SET @@local.sort_buffer_size=10000;SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;SET @@sort_buffer_size=1000000;SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;

@@var_name синтаксис для системных переменных поддерживается для совместимости с некоторыми другими системами баз данных.

Если Вы заменяете системную переменную сеанса, значение остается в силе до Ваших концов сеанса или пока Вы заменяете переменную к различному значению. Изменение не видимо другим клиентам.

Если Вы заменяете глобальную системную переменную, значение помнят и используется для новых соединений до перезапусков сервера. (Чтобы сделать глобальную системную переменную установкой постоянного, следует установить это в файле опции.) Изменение видимо любому клиенту, это получает доступ к той глобальной переменной. Однако, изменение влияет на соответствующую переменную сеанса только для клиентов, которые соединяются после изменения. Изменение глобальной переменной не влияет на переменную сеанса для любого клиента, который в настоящий момент соединяется (не даже тот из клиента, который выходит SET GLOBAL оператор).

Чтобы предотвратить неправильное использование, MySQL производит ошибку, если Вы используете SET GLOBAL с переменной, которая может только использоваться с SET SESSION или если Вы не определяете GLOBAL (или @@global.) устанавливая глобальную переменную.

Установить a SESSION переменная к GLOBAL значение или a GLOBAL оцените скомпилированному - в значении по умолчанию MySQL, используйте DEFAULT ключевое слово. Например, следующие два оператора идентичны в установке значения сеанса max_join_size к глобальному значению:

SET max_join_size=DEFAULT;SET @@session.max_join_size=@@global.max_join_size;

Не все системные переменные могут быть установлены в DEFAULT. В таких случаях, использовании DEFAULT результаты по ошибке.

Можно обратиться к значениям определенной глобальной переменной или системных переменных сеанса в выражениях при использовании одного из @@- модификаторы. Например, можно получить значения в a SELECT оператор как это:

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

Когда Вы обращаетесь к системной переменной в выражении как @@var_name (то есть, когда Вы не определяете @@global. или @@session.), MySQL возвращает значение сеанса, если это существует и глобальное значение иначе. (Это отличается от SET @@var_name = value, который всегда обращается к значению сеанса.)

Отметить

Некоторые переменные, выведенные на экран SHOW VARIABLES возможно, не доступное использование SELECT @@var_name синтаксис; Unknown system variable происходит. Как обходное решение в таких случаях, можно использовать SHOW VARIABLES LIKE 'var_name'.

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

shell> mysql --max_allowed_packet=16Mshell> mysql --max_allowed_packet=16*1024*1024

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

mysql> SET GLOBAL
        max_allowed_packet=16M;mysql> SET GLOBAL
        max_allowed_packet=16*1024*1024;
Отметить

Некоторые системные переменные могут быть включены с SET оператор, устанавливая их в ON или 1, или отключенный, устанавливая их в OFF или 0. Однако, чтобы установить такую переменную на командной строке или в файле опции, следует установить это в 1 или 0; установка этого к ON или OFF не будет работать. Например, на командной строке, --delay_key_write=1 работы, но --delay_key_write=ON не делает.

К именам переменной системы отображения и значениям, используйте 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            | latin1                            || character_set_connection        | latin1                            || character_set_database          | latin1                            || character_set_results           | latin1                            || character_set_server            | latin1                            || character_set_system            | utf8                              || character_sets_dir              | /home/mysql/share/mysql/charsets/ || collation_connection            | latin1_swedish_ci                 || collation_database              | latin1_swedish_ci                 || collation_server                | latin1_swedish_ci                 |...| innodb_additional_mem_pool_size | 1048576                           || 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.1.6-alpha-log                   || version_comment                 | Source distribution               || version_compile_machine         | i686                              || version_compile_os              | suse-linux                        || wait_timeout                    | 28800                             |+---------------------------------+-----------------------------------+

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

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

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

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

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

Для SHOW VARIABLES, если Вы не определяете ни одного GLOBAL ни SESSION, Возвраты MySQL SESSION значения.

Причина требования GLOBAL ключевое слово, устанавливая GLOBAL- только переменные, но не, получая их должен предотвратить проблемы в будущем. Если мы должны были удалить a SESSION переменная, у которой есть то же самое имя как a GLOBAL переменная, клиент с SUPER полномочие могло бы случайно измениться GLOBAL переменная, а не только SESSION переменная для ее собственного соединения. Если мы добавляем a SESSION переменная с тем же самым именем как a GLOBAL переменная, клиент, который намеревается измениться GLOBAL переменная могла бы найти только свое собственное SESSION переменная изменилась.