Spec-Zone .ru
спецификации, руководства, описания, API
|
Сервер MySQL поддерживает много системных переменных, которые указывают, как он конфигурируется. Раздел
5.1.4, "Системные Переменные Сервера", описывает значение этих переменных. У каждой системной
переменной есть значение по умолчанию. Системные переменные могут быть установлены в опциях использования
запуска сервера на командной строке или в файле опции. Большинство из них может быть изменено динамически, в то
время как сервер работает посредством SET
оператор, который позволяет Вам изменить работу сервера, не имея необходимость останавливать и перезапускать
это. Можно обратиться к системным значениям переменных в выражениях.
Сервер поддерживает два вида системных переменных. Глобальные переменные влияют на полную работу сервера. Переменные сеанса влияют на его работу для отдельных клиентских соединений. У данной системной переменной могут быть и глобальная переменная и значение сеанса. Глобальная переменная и системные переменные сеанса связываются следующим образом:
Когда сервер запускается, он инициализирует все глобальные переменные к их значениям по умолчанию. Эти значения по умолчанию могут быть изменены опциями, определенными на командной строке или в файле опции. (См. Раздел 4.2.3, "Определение Опций Программы".)
Сервер также поддерживает ряд переменных сеанса для каждого клиента, который
соединяется. Переменные сеанса клиента инициализируются во время соединения, используя текущую стоимость
соответствующих глобальных переменных. Например, режимом SQL клиента управляет сеанс sql_mode
значение, которое инициализируется, когда клиент соединяется
со значением глобальной переменной sql_mode
значение.
Системные значения переменных могут быть установлены глобально при запуске сервера при использовании опций на
командной строке или в файле опции. Когда Вы используете опцию запуска, чтобы установить переменную, которая
берет числовое значение, значение может быть дано с суффиксом 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
, дополнительно предшествовавший модификатором:
Чтобы указать явно, что переменная является глобальной переменной, предшествуйте ее
имени GLOBAL
или @@global.
. SUPER
полномочие обязано устанавливать глобальные переменные.
Чтобы указать явно, что переменная является переменной сеанса, предшествуйте ее
имени SESSION
, @@session.
, или @@
. Установка переменной сеанса не требует никакого специального
полномочия, но клиент может заменить только его собственные переменные сеанса, не таковые из любого
другого клиента.
LOCAL
и @@local.
синонимы
для SESSION
и @@session.
.
Если никакой модификатор не присутствует, SET
заменяет переменную сеанса.
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=16M
shell>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
переменная изменилась.