Spec-Zone .ru
спецификации, руководства, описания, API
|
Условно, длинные формы опций, которые присваивают значение, пишутся с равнянием (=
)
знак, как это:
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 jon
Welcome 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
--user
mysql: option '--user' requires an argument
В этом случае mysql
был неспособен найти значение после --user
опция, потому что ничто не прибыло после этого в командную строку.
Однако, если Вы опускаете значение для опции, которая не является
последней опцией, которая будет использоваться, Вы получаете различную ошибку, которую Вы не можете ожидать:
shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
Поскольку mysql предполагает что любая строка после --host
на командной строке имя хоста, --host
--user
интерпретируется как --host=--user
, и клиент пытается соединиться с сервером MySQL, работающим на узле,
названном "-пользователь".
Опции, имеющие значения по умолчанию всегда, требуют, равняется знаку, присваивая значение; будучи не в
состоянии сделать так причины ошибка. Например, сервер MySQL --log-error
у опции есть значение по умолчанию
, где host_name
.errhost_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.err
080111 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> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
Однако, в файлах опции, равняется знаку, не принимается. Предположите my.cnf
файл
как показано здесь:
[mysql]user jon
Попытка запустить mysql в этом случае вызывает различную ошибку:
shell> mysql
mysql: unknown option '--user jon'
Подобная ошибка произошла бы, если Вы должны были записать host tonfisk
в файле
опции, а не host=tonfisk
. Вместо этого следует использовать, равняется знаку:
[mysql]user=jon
Теперь попытка входа в систему успешно выполняется:
shell>mysql
Welcome 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 tonfisk
Welcome 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.err
090514 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)