• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 使用MySQL命令行工具

    调用MySQL命令行工具

    要从命令行(即从您的shell或命令提示符)调用MySQL程序,请输入程序名称,后跟指示该程序要执行的操作所需的任何选项或其他参数。以下命令显示了一些示例程序调用。shell>代表命令解释器的提示;它不属于您输入的内容。您看到的特定提示取决于命令解释器。典型的提示是$SHKSH,或庆典%CSHtcsh的,并且C:\>为Windows command.comCMD.EXE命令解释器。

    shell>mysql --user=root test
    shell>mysqladmin extended-status variables
    shell>mysqlshow --help
    shell>mysqldump -u root personnel
    

    以单破折号(---)开头的参数指定程序选项。选项通常指示程序应与服务器建立的连接类型或影响其操作模式。选项语法在“指定程序选项”中描述。

    非选项参数(无前划线的参数)为程序提供了其他信息。例如,mysql程序将第一个nonoption参数解释为数据库名称,因此该命令mysql --user=root test指示您要使用该test数据库。

    稍后描述单个程序的部分将说明程序支持哪些选项,并描述任何其他非选项参数的含义。

    一些程序共有一些选项。其中最常用的是用于指定连接参数的--host(或-h),--user(或-u)和--password(或-p)选项。它们指示运行MySQL服务器的主机,以及您的MySQL帐户的用户名和密码。所有的MySQL客户端程序都理解这些选项。它们使您可以指定要连接到的服务器以及在该服务器上使用的帐户。其他连接选项是--port(或-P)以指定TCP / IP端口号和--socket(或-S),以在Unix上指定Unix套接字文件(或在Windows上指定命名管道名称)。有关指定连接选项的选项的更多信息,请参见“使用命令选项连接到MySQL服务器”。

    您可能会发现有必要使用bin安装程序的路径名来调用MySQL程序。每当您尝试从目录以外的任何目录运行MySQL程序时,如果出现“找不到程序”错误,则可能是这种情况bin。为了使使用MySQL更加方便,可以将bin目录的路径名添加到PATH环境变量设置中。这样,您可以通过仅键入程序名称而不是整个路径名来运行程序。例如,如果在中安装了mysql,则/usr/local/mysql/bin可以通过将其作为mysql调用来运行该程序,并且不必将其作为/ usr / local / mysql / bin / mysql调用。

    有关设置PATH变量的说明,请查阅命令解释器的文档。设置环境变量的语法是特定于解释器的。(一些信息在“设置环境变量”中给出。)修改PATH设置后,在Windows上打开一个新的控制台窗口,或者在Unix上再次登录,以便该设置生效。



    指定命令行工具选项

    有几种方法可以指定MySQL程序的选项:

    • 在程序名称后的命令行上列出选项。这对于应用于程序的特定调用的选项来说很常见。
    • 在程序启动时读取的选项文件中列出选项。这对于希望程序每次运行都使用的选项来说很常见。
    • 列出环境变量中的选项(请)。对于要在程序每次运行时应用的选项,此方法很有用。实际上,选项文件通常用于此目的,但是“在Unix上运行多个MySQL实例”讨论了一种环境变量可能非常有用的情况。它描述了一种方便的技术,该技术使用此类变量为服务器和客户端程序指定TCP / IP端口号和Unix套接字文件。

    选项按顺序处理,因此,如果多次指定选项,则最后出现的选项优先。以下命令使mysql连接到在其上运行的服务器localhost

    mysql -h example.com -h localhost
    

    有一个例外:对于mysqld,该选项的第一个实例--user用作安全预防措施,以防止在命令行中覆盖选项文件中指定的用户。

    如果给出了冲突或相关的选项,则后面的选项优先于前面的选项。以下命令以“ no column names ”模式运行mysql

    mysql --column-names --skip-column-names
    

    MySQL程序首先通过检查环境变量,然后通过处理选项文件,然后通过检查命令行来确定给出哪些选项。由于后面的选项优先于前面的选项,因此处理顺序意味着环境变量的优先级最低,而命令行选项的优先级最高。

    对于服务器,一个例外适用:数据目录中的mysqld-auto.cnf选项文件最后被处理,因此它甚至优先于命令行选项。

    通过在选项文件中为程序指定默认选项值,可以利用MySQL程序处理选项的方式。这样一来,您可以避免在每次运行程序时都键入它们,同时可以根据需要使用命令行选项覆盖默认值。

    在命令行上使用选项

    在命令行上指定的程序选项遵循以下规则:

    • 选项在命令名称后给出。
    • 选项参数以一个破折号或两个破折号开头,具体取决于它是选项名称的短格式还是长格式。许多选项都有长短形式。例如,-?--help是指示MySQL程序显示其帮助消息的选项的长短形式。
    • 选项名称区分大小写。-v并且-V都是合法的,并有不同的含义。(它们是--verbose--version选项的相应缩写。)
    • 某些选项在选项名称后带有一个值。例如,-h localhost--host=localhost向客户端程序指示MySQL服务器主机。选项值告诉程序运行MySQL服务器的主机的名称。
    • 对于采用值的长期权,请用=符号将期权名称和值分开。对于采用值的短期期权,期权价值可以紧随期权字母之后,或者在-hlocalhost和之间可以有一个空格-h localhost。该规则的例外是用于指定MySQL密码的选项。该选项可以以或形式给出。在后一种情况下(未提供密码值),程序以交互方式提示您输入密码。密码选项也可以以或的简写形式给出--password=pass_val--password-ppass_val-p。但是,对于简写形式,如果给出了密码值,则它必须跟在选项字母后面,中间没有空格:如果空格跟在选项字母后面,则程序无法判断是否应该将后面的参数作为密码值或其他某种论点。因此,以下两个命令具有两个完全不同的含义:

      mysql -ptest
      mysql -p test
      

      第一个命令指示mysql使用密码值test,但不指定默认数据库。第二个命令指示mysql提示输入密码值并test用作默认数据库。

    • 在选项名称中,破折号(-)和下划线(_)可以互换使用。例如,--skip-grant-tables--skip_grant_tables是等效的。(但是,前导破折号不能作为下划线给出。)
    • MySQL服务器具有某些只能在启动时指定的命令选项,以及一组系统变量,其中一些可以在启动时,运行时或同时设置两者。系统变量名称使用下划线而不是破折号,并且在运行时引用时(例如,使用SETSELECT语句),必须使用下划线编写:

      SET GLOBAL general_log = ON;
      SELECT @@GLOBAL.general_log;
      

      服务器启动时,系统变量的语法与命令选项的语法相同,因此在变量名称中,破折号和下划线可以互换使用。例如,--general_log=ON--general-log=ON是等效的。(对于在选项文件中设置的系统变量也是如此。)

    • 对于采用数字值的选择,该值可以与一个后缀被给予KM或者G以指示1024一乘法器,1024 2或1024 3。从MySQL 8.0.14的,后缀也可以是TPE以指示1024乘法器4,1024 5或1024 6。后缀字母可以是大写或小写。

      例如,以下命令告诉mysqladmin对服务器ping 1024次,每次ping之间睡眠10秒:

      mysqladmin --count=1K --sleep=10 ping
      
    • 在将文件名指定为选项值时,请避免使用~Shell元字符。可能未按您预期的那样解释它。

    在命令行中给定包含空格的选项值时,必须用引号引起来。例如,--execute(或-e)选项可与mysql一起使用,以将一个或多个用分号分隔的SQL语句传递给服务器。当使用该选项时,mysql执行选项值中的语句并退出。声明必须用引号引起来。例如:

    shell>mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
    Enter password: ******
    +------------	+
    | VERSION()   |
    +------------	+
    | 8.0.19      |
    +------------	+
    +---------------------	+
    | NOW()                |
    +---------------------	+
    | 2019 -09 -03 10:36:48  |
    +---------------------	+
    shell>
    
    注意

    长格式(--execute)后跟等号(=)。

    要在语句中使用带引号的值,您必须转义内部的引号,或在语句内使用与引号本身不同的引号。命令处理器的功能决定了您可以选择使用单引号还是双引号以及转义引号字符的语法。例如,如果命令处理器支持使用单引号或双引号引起来的引用,则可以在语句周围使用双引号,并对语句内的所有带引号的值使用单引号。

    使用选项文件

    大多数MySQL程序可以从选项文件(有时称为配置文件)中读取启动选项。选项文件提供了一种方便的方法来指定常用选项,这样就不必在每次运行程序时都在命令行上输入它们。

    要确定程序是否读取选项文件,请使用--help选项调用它。(对于mysqld,请使用--verbose--help。)如果程序读取选项文件,则帮助消息将指示其查找的文件以及可识别的选项组。

    注意

    --no-defaults选项开头的MySQL程序除以外不读取选项文件.mylogin.cnf

    persisted_globals_load禁用系统变量的情况下启动的服务器无法读取mysqld-auto.cnf

    许多选项文件是使用任何文本编辑器创建的纯文本文件。例外是:

    • .mylogin.cnf包含登录路径选项的文件。这是由mysql_config_editor实用程序创建的加密文件。请参见“mysql_config_editor-MySQL配置实用程序”。一个“登录路径”是一个选项组只允许特定的选项:hostuserpasswordportsocket。客户端程序.mylogin.cnf使用该--login-path选项指定要读取的登录路径。

      要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。mysql-test-run.pl测试实用程序使用此变量,但mysql_config_editor和MySQL客户端(例如mysqlmysqladmin等)也可以识别该变量。

    • mysqld-auto.cnf数据目录中的文件。此JSON格式的文件包含持久的系统变量设置。它是由服务器在执行SET PERSISTSET PERSIST_ONLY语句后创建的。请参见“持久性系统变量”。的管理mysqld-auto.cnf应留给服务器,不要手动执行。
    • 选项文件处理顺序
    • 选项文件语法
    • 选项文件包含
    选项文件处理顺序

    MySQL按照以下讨论中描述的顺序查找选项文件,并读取所有存在的文件。如果您要使用的选项文件不存在,请使用刚刚讨论的适当方法来创建它。

    注意

    有关与NDB Cluster程序一起使用的选项文件的信息,请参见“ NDB Cluster的配置”。

    在Windows上,MySQL程序以指定的顺序从下表中显示的文件中读取启动选项(首先读取的文件优先,随后读取的文件优先)。

    表4.1在Windows系统上读取的选项文件

    文件名目的
    %WINDIR%\my.ini%WINDIR%\my.cnf全局选项
    C:\my.iniC:\my.cnf全局选项
    BASEDIR\my.iniBASEDIR\my.cnf全局选项
    defaults-extra-file用指定的文件--defaults-extra-file(如果有)
    %APPDATA%\MySQL\.mylogin.cnf登录路径选项(仅客户端)
    DATADIR\mysqld-auto.cnf系统变量使用SET PERSISTSET PERSIST_ONLY保留(仅服务器)

    在上表中,%WINDIR%代表Windows目录的位置。这很普遍C:\WINDOWS。使用以下命令从WINDIR环境变量的值确定其确切位置:

    C:\>echo %WINDIR%
    

    %APPDATA%表示Windows应用程序数据目录的值。使用以下命令从APPDATA环境变量的值确定其确切位置:

    C:\>echo %APPDATA%
    

    BASEDIR表示MySQL基本安装目录。使用MySQL Installer安装MySQL 8.0后,通常在该位置代表程序目录(通常在Windows的英语版本上),请参见“用于Windows的MySQL Installer”。C:\PROGRAMDIR\MySQL\MySQL 8.0 ServerPROGRAMDIRProgram Files

    DATADIR表示MySQL数据目录。如find一样mysqld-auto.cnf,它的默认值是编译MySQL时内置的数据目录位置,但是可以通过--datadir指定为在处理之前mysqld-auto.cnf处理的选项文件或命令行选项来更改。

    在Unix和类似Unix的系统上,MySQL程序以指定的顺序从下表中显示的文件中读取启动选项(首先列出的文件被首先读取,随后的文件被优先读取)。

    注意

    在Unix平台上,MySQL忽略可全局写入的配置文件。这是有意作为安全措施。

    表4.2在Unix和类似Unix的系统上读取的选项文件

    文件名目的
    /etc/my.cnf全局选项
    /etc/mysql/my.cnf全局选项
    SYSCONFDIR/my.cnf全局选项
    $MYSQL_HOME/my.cnf服务器特定的选项(仅服务器)
    defaults-extra-file用指定的文件--defaults-extra-file(如果有)
    ~/.my.cnf用户特定的选项
    ~/.mylogin.cnf用户特定的登录路径选项(仅限客户端)
    DATADIR/mysqld-auto.cnf系统变量使用SET PERSISTSE PERSIST_ONLY保留(仅服务器)

    在上表中,~代表当前用户的主目录(的值$HOME)。

    SYSCONFDIR表示在构建MySQL时SYSCONFDIR使用CMake选项指定的目录。默认情况下,这是etc位于内置安装目录下的目录。

    MYSQL_HOME是一个环境变量,其中包含服务器特定my.cnf文件所在目录的路径。如果MYSQL_HOME未设置,并且您使用mysqld_safe程序启动服务器,则mysqld_safe将其设置BASEDIR为MySQL基本安装目录。

    DATADIR表示MySQL数据目录。如find一样mysqld-auto.cnf,它的默认值是编译MySQL时内置的数据目录位置,但是可以通过--datadir指定为在处理之前mysqld-auto.cnf处理的选项文件或命令行选项来更改。

    如果找到给定选项的多个实例,则最后一个实例优先,但有一个例外:对于mysqld,该选项的第一个实例--user用作安全预防措施,以防止在选项文件中指定的用户被覆盖。命令行。

    选项文件语法

    选项文件语法的以下说明适用于您手动编辑的文件。不包括.mylogin.cnf使用mysql_config_editor创建并加密的和mysqld-auto.cnf服务器以JSON格式创建的和。

    运行MySQL程序时在命令行上给出的任何长选项也可以在选项文件中给出。要获取程序的可用选项列表,请与该--help选项一起运行。(对于mysqld,请使用--verbose--help。)

    在选项文件中指定选项的语法类似于命令行语法(请参见“在命令行上使用选项”)。但是,在选项文件中,您省略了选项名称中的前两个破折号,并且每行仅指定了一个选项。例如,--quick--host=localhost在命令行上应被指定为quickhost=localhost上在选项文件单独的行。要在选项文件中指定表单的选项,请将其写为。--loose-opt_nameloose-opt_name

    选项文件中的空行将被忽略。非空行可以采用以下任何形式:

    • #comment;comment

      注释行以#或开头;。一个#注释也可以从行的中部开始。

    • [group]

      group是要为其设置选项的程序或组的名称。在组行之后,所有选项设置行都将应用于命名组,直到给出选项文件或另一组行的末尾。选项组名称不区分大小写。

    • opt_name

      这等效于在命令行上。--opt_name

    • opt_name=value

      这等效于在命令行上。在选项文件中,字符周围可以有空格,这在命令行上是不正确的。该值可以选择用单引号或双引号引起来,如果该值包含注释字符,则很有用。--opt_name=value=#

    前导和尾随空格会自动从选项名称和值中删除。

    您可以使用转义序列\t\n\r\\,并\s在选项值来表示退格,制表符,换行符,回车,回车,和空格字符。在选项文件中,适用以下转义规则:

    • 反斜杠后跟有效的转义序列字符将转换为该序列表示的字符。例如,\s转换为空格。
    • 没有有效转义序列字符的反斜杠保持不变。例如,\S按原样保留。

    前面的规则意味着字面反斜杠可以指定为\\,或者\好像后面没有有效的转义序列字符。

    选项文件中转义序列的规则与SQL语句中字符串文字中转义序列的规则略有不同。在后一种情况下,如果“x”不是有效的转义序列字符,则变为“”而不是。请参见“字符串文字”。\xx\x

    选项文件值的转义规则与Windows路径名特别相关,Windows路径名\用作路径名分隔符。Windows路径名中的分隔符必须写成\\好像后面跟着转义序列字符一样。可以写为\\\不写。或者,/可以在Windows路径名中使用,并将其视为\。假设要C:\Program Files\MySQL\MySQL Server 8.0在选项文件中指定的基本目录。这可以通过几种方法完成。一些例子:

    basedir="C:\Program Files\MySQL\MySQL Server 8.0"
    basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
    basedir="C:/Program Files/MySQL/MySQL Server 8.0"
    basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
    

    如果选项组名称与程序名称相同,则该组中的选项专门适用于该程序。例如,[mysqld][mysql]组分别应用于mysqld服务器和mysql客户端程序。

    [client]选项组是由MySQL分发提供(但所有的客户端程序读取通过的mysqld)。要了解使用C API的第三方客户端程序如何使用选项文件,请参见“ mysql_options()”中的C API文档。

    [client]组使您可以指定适用于所有客户端的选项。例如,[client]是用于指定用于连接服务器的密码的适当组。(但是请确保该选项文件只能由您自己访问,以便其他人无法找到您的密码。)请确保不要在该[client]组中放置一个选项,除非您使用的所有客户端程序可以识别该选项。如果您尝试运行不了解该选项的程序,则会在显示错误消息后退出。

    首先列出更多常规选项组,然后列出更多特定组。例如,一个[client]组更为通用,因为所有客户端程序都[mysqldump]可以读取该组,而mysqldump只能读取一个组。稍后指定的选项将覆盖先前指定的选项,因此将选项组置于order中[client][mysqldump]可使mysqldump特定的选项覆盖[client]选项。

    这是一个典型的全局选项文件:

    [client]
    port=3306
    socket=/tmp/mysql.sock
    
    [mysqld]
    port=3306
    socket=/tmp/mysql.sock
    key_buffer_size=16M
    max_allowed_packet=128M
    
    [mysqldump]
    quick
    

    这是一个典型的用户选项文件:

    [client]
    # The following password will be sent to all standard MySQL clients
    password="my password"
    
    [mysql]
    no-auto-rehash
    connect_timeout=2
    

    要创建选项组以仅由特定MySQL版本系列的mysqld服务器读取,请使用名称为[mysqld-5.7][mysqld-8.0]等的组。以下组指示该sql_mode设置仅应由具有8.0.x版本号的MySQL服务器使用:

    [mysqld-8.0]
    sql_mode=TRADITIONAL
    
    选项文件包含

    可以!include在选项文件中使用指令来包含其他选项文件,并!includedir在特定目录中搜索选项文件。例如,要包含/home/mydir/myopt.cnf文件,请使用以下指令:

    !include /home/mydir/myopt.cnf
    

    要搜索/home/mydir目录并读取在此找到的选项文件,请使用以下指令:

    !includedir /home/mydir
    

    MySQL不保证目录中选项文件的读取顺序。

    注意

    !includedir在Unix操作系统上使用伪指令查找和包含的所有文件都必须具有以结尾的文件名.cnf。在Windows上,此伪指令检查带有.ini.cnf扩展名的文件。

    像其他选项文件一样,编写包含的选项文件的内容。也就是说,它应该包含选项组,每组选项前都有一行,指示选项所适用的程序。[group]

    在处理包含文件时,仅使用当前程序正在寻找的组中的那些选项。其他组将被忽略。假设my.cnf文件包含以下行:

    !include /home/mydir/myopt.cnf
    

    并假设/home/mydir/myopt.cnf如下所示:

    [mysqladmin]
    force
    
    [mysqld]
    key_buffer_size=16M
    

    如果my.cnfmysqld处理,则仅使用[mysqld]/home/mydir/myopt.cnf。如果该文件由mysqladmin处理,则仅使用该[mysqladmin]组。如果文件是由其他程序处理的,则不/home/mydir/myopt.cnf使用in选项。

    !includedir除读取命名目录中的所有选项文件外,该指令的处理方式相似。

    如果选项文件包含!include!includedir指令,则在处理选项文件时,无论这些指令在文件中的位置如何,都将处理由这些指令命名的文件。

    为了使包含指令起作用,不应在引号中指定文件路径,并且文件路径不应包含转义序列。例如,提供的以下语句my.ini将读取选项文件myopts.ini

    !include C:/ProgramData/MySQL/MySQL Server/myopts.ini
    !include C:\ProgramData\MySQL\MySQL Server\myopts.ini
    !include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini
    

    在Windows上,如果是文件中的最后一行,请确保在末尾添加换行符,否则该行将被忽略。!include /path/to/extra.ini

    影响选项文件处理的命令行选项

    大多数支持选项文件的MySQL程序都处理以下选项。由于这些选项影响选项文件的处理,因此必须在命令行而不是选项文件中给出它们。为了正常工作,这些选项中的每个选项必须在其他选项之前给出,但以下情况除外:

    • --print-defaults可以后立即使用--defaults-file--defaults-extra-file--login-path
    • 在Windows上,如果服务器使用--defaults-file--install选项启动,则--install必须先启动。请参见“将MySQL作为Windows服务启动”。

    在将文件名指定为选项值时,请避免使用~shell元字符,因为它可能不会按您期望的方式解释。

    • --defaults-extra-file=file_name

      在全局选项文件之后但在用户选项文件之前(在Unix上)和(在所有平台上)登录路径文件之前(在所有平台上)读取此选项文件。(有关使用选项文件的顺序的信息,请参见“使用选项文件”。)如果该文件不存在或不可访问,则发生错误。file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。

      有关可以指定此选项的位置的限制,请参阅本节的简介。

    • --defaults-file=file_name

      只读给定的选项文件。如果该文件不存在或无法访问,则发生错误。file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。

      例外:即使使用--defaults-filemysqld也会读取,mysqld-auto.cnf而客户端程序也会读取.mylogin.cnf

      有关可以指定此选项的位置的限制,请参阅本节的简介。

    • --defaults-group-suffix=str

      不仅阅读常规选项组,而且阅读具有常规名称和后缀的组str。例如,mysql客户端通常读取[client][mysql]组。如果--defaults-group-suffix=_other给出了该选项,mysql还将读取[client_other][mysql_other]组。

    • --login-path=name

      .mylogin.cnf登录路径文件中的命名登录路径读取选项。阿“登录路径”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见“mysql_config_editor-MySQL配置实用程序”。

      客户端程序除了读取程序默认读取的选项组外,还读取与命名的登录路径相对应的选项组。考虑以下命令:

      mysql --login-path=mypath
      

      默认情况下,mysql客户端读取[client][mysql]选项组。因此,对于所示的命令,MySQL的读取[client][mysql]其他选项的文件,并[client][mysql]以及[mypath]从登录路径文件。

      即使使用该--no-defaults选项,客户端程序也会读取登录路径文件。

      要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。

      有关可以指定此选项的位置的限制,请参阅本节的简介。

    • --no-defaults

      不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,--no-defaults则可以使用该选项来防止读取它们。

      例外是,客户端程序会读取.mylogin.cnf登录路径文件(如果已存在),即使--no-defaults已使用该文件也是如此。即使--no-defaults存在密码,这也可以以比在命令行上更安全的方式指定密码。(.mylogin.cnfmysql_config_editor实用程序创建。请参见“mysql_config_editor-MySQL配置实用程序”。)

    • --print-defaults

      打印程序名称及其从选项文件中获取的所有选项。密码值被屏蔽。

      有关可以指定此选项的位置的限制,请参阅本节的简介。

    程序选项修饰符

    一些选项是“ boolean ”,并控制可以打开或关闭的行为。例如,mysql客户端支持一个--column-names选项,该选项确定是否在查询结果的开头显示一列名称。默认情况下,启用此选项。但是,您可能希望在某些情况下禁用它,例如,将mysql的输出发送到希望仅看到数据而看不到初始标头行的另一个程序中时。

    要禁用列名,可以使用以下任何一种形式指定选项:

    --disable-column-names
    --skip-column-names
    --column-names=0
    

    --disable--skip前缀和=0后缀都具有相同的作用:他们关闭该选项。

    该选项的“启用”形式可以通过以下任何一种方式指定:

    --column-names
    --enable-column-names
    --column-names=1
    

    ONTRUEOFF,和FALSE也被识别为布尔选项(不区分大小写)。

    如果选项以开头--loose,则程序无法识别该选项,则不会退出并显示错误消息,而是仅发出警告:

    shell>mysql --loose-no-such-option
    mysql: WARNING: unknown option '--loose-no-such-option'
    

    --loose当您在同一台计算机上运行多个MySQL安装版本的程序并在选项文件中列出选项时,该前缀很有用。可以使用--loose前缀(或loose在选项文件中)给出程序的所有版本可能无法识别的选项。识别该选项的程序版本会正常处理它,而无法识别该选项的版本会发出警告并忽略它。

    --maximum前缀仅适用于mysqld,并允许限制大型客户端程序可以设置会话系统变量的数量。为此,请使用--maximum带变量名的前缀。例如,--maximum-max_heap_table_size=32M防止任何客户端使堆表大小限制大于32M。

    --maximum前缀旨在与具有会话值的系统变量一起使用。如果将其应用于仅具有全局值的系统变量,则会发生错误。例如,使用--maximum-back_log=200,服务器将产生以下错误:

    Maximum value of 'back_log' cannot be set
    

    使用选项设置程序变量

    许多MySQL程序都有内部变量,可以在运行时使用该SET语句设置。请参见“变量分配的SET语法”和“使用系统变量”。

    这些大多数程序变量也可以在服务器启动时通过使用与指定程序选项相同的语法进行设置。例如,mysql有一个max_allowed_packet变量来控制其通信缓冲区的最大大小。要将mysqlmax_allowed_packet变量设置为16MB的值,请使用以下命令之一:

    mysql --max_allowed_packet=16777216
    mysql --max_allowed_packet=16M
    

    第一个命令以字节为单位指定值。第二个以兆字节为单位指定值。对于采用数字值的变量,该值可以与一个后缀被给予KM或者G以指示1024一乘法器,1024 2或1024 3。(例如,用于设置时max_allowed_packet,后缀表示以千字节,兆字节或千兆字节为单位)。如MySQL的8.0.14的,后缀也可以是TPE以指示1024乘法器4,1024 5或1024 6。后缀字母可以是大写或小写。

    在选项文件中,变量设置不带前导破折号:

    [mysql]
    max_allowed_packet=16777216
    

    要么:

    [mysql]
    max_allowed_packet=16M
    

    如果愿意,可以将变量名中的下划线指定为破折号。以下选项组是等效的。两者都将服务器密钥缓冲区的大小设置为512MB:

    [mysqld]
    key_buffer_size=512M
    
    [mysqld]
    key-buffer-size=512M
    

    可以通过完整或任何明确的前缀将其写入来指定变量。例如,该max_allowed_packet变量可以被设置的MySQL--max_ ,但不作为--max,因为后者是不明确的:

    shell>mysql --max=1000000
    mysql: ambiguous option '--max=1000000' (max_allowed_packet, max_join_size)
    

    请注意,在为程序实现新变量的情况下,使用变量前缀可能会导致问题。现在明确的前缀将来可能会变得不明确。

    在程序调用时设置变量时,可以使用用于指定值乘数的后缀,但SET在运行时不能使用后缀来设置值。另一方面,通过使用SET,您可以使用表达式来分配变量的值,而在服务器启动时设置变量时就不正确。例如,以下第一行在程序调用时是合法的,但第二行不是:

    shell>mysql --max_allowed_packet=16M
    shell>mysql --max_allowed_packet=16*1024*1024
    

    相反,以下第二行在运行时是合法的,但第一行则不是:

    mysql> SET GLOBAL max_allowed_packet=16M;
    mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
    

    选项默认值,选项期望值和=符号

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

    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.21 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.21 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.21 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)
    

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