6.2.2.6 选项默认值、选项期望值和 = 符号

按照惯例,分配值的选项的长形式用等号 ( =) 书写,如下所示:

mysql --host=tonfisk --user=jon
对于需要值(即没有默认值)的选项,等号不是必需的,因此以下内容也是有效的:

mysql --host tonfisk --user jon
在这两种情况下,mysql客户端都尝试使用用户名为“ jon ”的账户 连接到名为“ tonfisk ”的主机上运行的 MySQL 服务器 。

由于这种行为,当没有为期望有值的选项提供任何值时,偶尔会出现问题。考虑以下示例,其中用户以tonfisk用户身份 连接到在主机上运行的 MySQL 服务器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: 9.0.0 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.err,其中是运行 MySQL 的主机的名称。假设您在主机名为“ tonfisk ”host_name的计算机上运行 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客户端读取此文件时,这些条目将被解析为或 ,结果显示如下: --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: 9.0.0 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: 9.0.0 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)
如果指定一个需要值的选项,而选项文件中没有值,则会导致服务器因错误而中止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值