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.errhost_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.