Spec-Zone.ru › MySQL 5.7

4.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: 5.7.44 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: 5.7.44 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: 5.7.44 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-5.7-en/option-defaults-equals.html

Spec-Zone.ru

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