Spec-Zone .ru
спецификации, руководства, описания, API

4.2.3.6. Значения по умолчанию опции, Опции, Ожидающие Значения, и =Знак

Условно, длинные формы опций, которые присваивают значение, пишутся с равнянием (=) знак, как это:

shell> mysql --host=tonfisk
        --user=jon

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

shell> mysql --host tonfisk --user
        jon

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

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

shell> mysql --host 85.224.35.45 --user
        jonWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.2 Source distributionType '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)

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

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

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

shell> mysql --host --user jonERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

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

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

shell> mysqld_safe &[1] 11699shell> 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/varshell>

После завершения работы сервера перезапустите это следующим образом:

shell> mysqld_safe --log-error &[1] 11699shell> 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/varshell>

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

shell> mysqld_safe --log-error my-errors &[1] 31357shell> 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/var080111 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 как журнал ошибок, но тогда выключенный. Исследование последних немногих строк этого файла показывает причину:

shell> tail
        /usr/local/mysql/var/tonfisk.err080111 22:53:32  InnoDB: Started; log sequence number 0 46409/usr/local/mysql/libexec/mysqld: Too many arguments (first extra is 'my-errors').Use --verbose --help to get a list of available options080111 22:53:32 [ERROR] Aborting080111 22:53:32  InnoDB: Starting shutdown...080111 22:53:34  InnoDB: Shutdown completed; log sequence number 0 46409080111 22:53:34 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

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

shell> mysqld_safe --log-error=my-errors &[1] 31437shell> 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/varshell>

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

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

[mysql]hostuser

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

shell> mysqlERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

Однако, в файлах опции, равняется знаку, не принимается. Предположите my.cnf файл как показано здесь:

[mysql]user jon

Попытка запустить mysql в этом случае вызывает различную ошибку:

shell> mysqlmysql: unknown option '--user jon'

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

[mysql]user=jon

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

shell> mysqlWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.7.2 Source distributionType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> SELECT USER();+---------------+| USER()        |+---------------+| jon@localhost |+---------------+1 row in set (0.00 sec)

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

shell> mysql --user jon --host
        tonfiskWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.7.2 Source distributionType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> SELECT USER();+---------------+| USER()        |+---------------+| jon@tonfisk   |+---------------+1 row in set (0.00 sec)

В MySQL 5.7, определяя опцию, требующую значения без значения в файле опции, заставляет сервер прерываться с ошибкой. Предположите это my.cnf содержит следующее:

[mysqld]log_errorrelay_logrelay_log_index

Это заставляет сервер перестать работать на запуске, как показано здесь:

shell> mysqld_safe &090514 09:48:39 mysqld_safe Logging to '/home/jon/bin/mysql-5.5/var/tonfisk.err'.090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql-5.5/var090514 09:48:39 mysqld_safe mysqld from pid file /home/jon/bin/mysql-5.5/var/tonfisk.pid ended

--log-error опция не требует параметра; однако, --relay-log опция требует один, как показано в журнале ошибок (который в отсутствие указанного значения, значений по умолчанию к datadir/hostname.err):

shell> tail -n 3 ../var/tonfisk.err090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql-5.5/var090514  9:48:39 [ERROR] /home/jon/bin/mysql-5.5/libexec/mysqld: option '--relay-log' requires an argument090514  9:48:39 [ERROR] Aborting

Это - изменение от предыдущего поведения, где сервер интерпретировал бы последние две строки в примере my.cnf файл как --relay-log=relay_log_index и создаваемый релейный файл журнала, используя "relay_log_index" как базовое имя. (Ошибка #25192)