按照惯例,赋值的长形式选项用等号 ( =
) 书写,如下所示:
mysql --host=tonfisk --user=jon
对于需要值(即没有默认值)的选项,不需要等号,因此以下内容也有效:
mysql --host tonfisk --user jon
在这两种情况下,mysql客户端都会尝试 使用用户名为“ jon ”的帐户 连接到在名为“ tonfisk ”的主机上运行的 MySQL 服务器。
由于这种行为,当没有为期望值的选项提供值时,偶尔会出现问题。考虑以下示例,其中用户以用户身份连接到在主机上运行的 MySQLtonfisk
服务器
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.0.31 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
命令行后面的任何字符串都是主机名,被解释为
,并且客户端尝试连接到运行在名为
“ --user ”的主机上的 MySQL 服务器。
--host
--user
--host=--user
具有默认值的选项在赋值时总是需要一个等号;不这样做会导致错误。例如,MySQL 服务器
--log-error
选项具有默认值
,其中host_name
.errhost_name
是运行 MySQL 的主机的名称。假设您在主机名为“ tonfisk ”的计算机上运行 MySQL ,并考虑以下
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客户端读取此文件时,这些条目被解析为or
,结果如下所示:
--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.0.31 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.0.31 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)
在选项文件中指定需要值而没有值的选项会导致服务器异常中止。