暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 8官方文档中文版 4.2.2.6选项默认值,选项期望值和=符号

原创 由迪 2020-11-09
1114

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

mysql --host=tonfisk --user=jon
复制

对于需要一个值(即没有默认值)的选项,不需要等号,因此以下内容也有效:

mysql --host tonfisk --user jon
复制

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

由于此行为,如果没有为期望一个选项提供任何值,则偶尔会出现问题。看看下面的例子,当用户连接到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 3
Server version: 8.0.24 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)
复制

忽略这些选项之一的必需值会产生错误,例如以下所示:

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命令行后面的任何字符串都是主机名,所以将其解释为 ,并且客户端尝试连接到在名为“ --user ”的主机上运行的MySQL服务器 。 --host --user--host=--user

具有默认值的选项在分配值时始终需要等号;否则会导致错误。例如,MySQL服务器 --log-error选项具有默认值 *host_name*.err,其中*host_name*是运行MySQL的主机的名称。假设您正在主机名为“ tonfisk ”的计算机上运行MySQL ,并考虑对mysqld_safe进行以下调用 :

shell> mysqld_safe &
[1] 11699
shell> 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
shell>
复制

关闭服务器后,按以下方式重新启动它:

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

结果是相同的,因为 --log-error在命令行上没有任何其他内容,并且它提供了自己的默认值。(该&字符告诉操作系统在后台运行MySQL; MySQL本身将忽略它。)现在假设您希望将错误记录到名为的文件中my-errors.err。您可以尝试使用启动服务器--log-error my-errors,但这没有达到预期的效果,如下所示:

shell> mysqld_safe --log-error my-errors &
[1] 31357
shell> 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用作错误日志,但随后关闭。检查此文件的最后几行显示了原因:

shell> 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 选项提供了默认值,因此您必须使用等号为它分配一个不同的值,如下所示:

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

shell>
复制

现在,服务器已成功启动,并且正在将错误记录到文件中 /usr/local/mysql/var/my-errors.err

在选项文件中指定选项值时,可能会出现类似的问题。例如,考虑一个my.cnf包含以下内容的文件:

[mysql] host user
复制

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 5
Server version: 8.0.24 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)
复制

这与在命令行上不需要等号的行为不同:

shell> 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.24 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)
复制

在选项文件中指定需要值而没有值的选项会导致服务器中止并显示错误。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论