Spec-Zone.ru › MySQL 9.2

6.2.2.6 Параметры по умолчанию, параметры, ожидающие значения, и знак =

По соглашению, длинные формы параметров, присваивающие значение, записываются со знаком равенства (=), например так:

mysql --host=tonfisk --user=jon

Для параметров, требующих значения (то есть не имеющих значения по умолчанию), знак равенства не требуется, и поэтому следующее также допустимо:

mysql --host tonfisk --user jon

В обоих случаях клиент mysql пытается подключиться к серверу MySQL, работающему на хосте с именем “tonfisk”, используя учетную запись с именем пользователя “jon”.

Из-за этого поведения время от времени могут возникать проблемы, когда для параметра, ожидающего значение, не указано значение. Рассмотрим следующий пример, где пользователь подключается к серверу MySQL, работающему на хосте tonfisk, как пользователь jon:

$> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 9.2.0 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@%          |
+----------------+
1 row in set (0.00 sec)

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

$> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument

В этом случае mysql не смог найти значение после параметра --user, потому что ничего не последовало за ним в командной строке. Однако, если вы пропустите значение для параметра, который не является последним используемым параметром, вы получите другую ошибку, которой вы можете не ожидать:

$> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

Поскольку mysql предполагает, что любая строка, следующая за --host в командной строке, является именем хоста, --host --user интерпретируется как --host=--user, и клиент пытается подключиться к серверу MySQL, работающему на хосте с именем “--user”.

Параметры, имеющие значения по умолчанию, всегда требуют знак равенства при присвоении значения; пропуск этого приводит к ошибке. Например, параметр сервера MySQL --log-error имеет значение по умолчанию host_name.err, где host_name - имя хоста, на котором работает MySQL. Предположим, что вы запускаете MySQL на компьютере с именем хоста “tonfisk”, и рассмотрите следующий вызов mysqld_safe:

$> mysqld_safe &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>

После остановки сервера запустите его заново следующим образом:

$> mysqld_safe --log-error &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>

Результат тот же, поскольку --log-error не следует ничего другого в командной строке, и он предоставляет собственное значение по умолчанию. (Символ & сообщает операционной системе запустить MySQL в фоновом режиме; он игнорируется самим MySQL). Теперь предположим, что вы хотите записывать ошибки в файл с именем my-errors.err. Вы можете попробовать запустить сервер с --log-error my-errors, но это не имеет ожидаемого эффекта, как показано здесь:

$> mysqld_safe --log-error my-errors &
[1] 31357
$> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

[1]+  Done                    ./mysqld_safe --log-error my-errors

Сервер попытался запуститься, используя /usr/local/mysql/var/tonfisk.err в качестве файла журнала ошибок, но затем остановился. Просмотр последних нескольких строк этого файла показывает причину:

$> tail /usr/local/mysql/var/tonfisk.err
2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24T15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete

Поскольку параметр --log-error предоставляет значение по умолчанию, вы должны использовать знак равенства, чтобы назначить ему другое значение, как показано здесь:

$> mysqld_safe --log-error=my-errors &
[1] 31437
$> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

$>

Теперь сервер успешно запущен и записывает ошибки в файл /usr/local/mysql/var/my-errors.err.

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

[mysql]

host
user

Когда клиент mysql читает этот файл, эти записи интерпретируются как --host --user или --host=--user, с результатом, показанным здесь:

$> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

Однако в файлах параметров знак равенства не предполагается. Предположим, что файл my.cnf выглядит следующим образом:

[mysql]

user jon

Попытка запуска mysql в этом случае приводит к другой ошибке:

$> mysql
mysql: unknown option '--user jon'

Аналогичная ошибка возникнет, если вы напишете host tonfisk в файле параметров вместо host=tonfisk. Вместо этого вы должны использовать знак равенства:

[mysql]

user=jon

Теперь попытка входа успешно завершается:

$> mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 9.2.0 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)

Это отличается от поведения в командной строке, где знак равенства не требуется:

$> mysql --user jon --host tonfisk
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 9.2.0 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@tonfisk   |
+---------------+
1 row in set (0.00 sec)

Указание параметра, требующего значения, без значения в файле параметров заставляет сервер прервать работу с ошибкой.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/option-defaults-equals.html

Spec-Zone.ru

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