Spec-Zone.ru › MySQL 8.4

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: 8.4.4 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: 8.4.4 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: 8.4.4 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-8.4-en/option-defaults-equals.html

Spec-Zone.ru

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