• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mysql 命令行客户端

    mysql是具有输入行编辑功能的简单SQL Shell。它支持交互和非交互使用。交互使用时,查询结果以ASCII表格式显示。当非交互式使用(例如,用作过滤器)时,结果以制表符分隔的格式显示。可以使用命令选项更改输出格式。

    如果由于内存不足而无法存储大型结果集而遇到问题,请使用该--quick选项。这迫使mysql一次从服务器上一次检索结果,而不是检索整个结果集并在显示之前将其缓冲在内存中。通过使用mysql_use_result()客户端/服务器库(而不是)中的C API函数返回结果集来完成此操作mysql_store_result()

    注意

    另外,MySQL Shell提供对X DevAPI的访问。有关详细信息,请参见 MySQL Shell 8.0(MySQL 8.0的一部分)。

    使用mysql非常简单。从命令解释器的提示中调用它,如下所示:

    shell>mysql db_name
    

    要么:

    shell>mysql --user=user_name --password db_name
    Enter password: your_password
    

    然后输入一个SQL语句,以结束它;\g或者\G按Enter键。

    键入Control + C会中断当前语句(如果存在),否则将取消任何部分输入行。

    您可以在脚本文件(批处理文件)中执行SQL语句,如下所示:

    shell>mysql db_name < script.sql > output.tab
    

    在Unix上,mysql客户端将交互式执行的语句记录到历史文件中。请参见“ mysql客户端日志记录”。

    mysql客户端选项

    mysql支持以下选项,可以在命令行或选项文件的[mysql][client]组中指定这些选项。有关MySQL程序使用的选项文件的信息,请参见“使用选项文件”。

    表4.11 mysql客户端选项

    选项名称描述
    --auto-rehash启用自动重新哈希
    --auto-vertical-output启用自动垂直结果集显示
    --batch不使用历史记录文件
    --binary-as-hex以十六进制显示二进制值
    --binary-mode禁用\ r \ n-到-n转换和将\ 0视为查询结束
    --bind-address使用指定的网络接口连接到MySQL Server
    --character-sets-dir字符集的安装目录
    --column-names在结果中写入列名称
    --column-type-info显示结果集元数据
    --comments在发送给服务器的语句中保留还是删除注释
    --compress压缩客户端和服务器之间发送的所有信息
    --compression-algorithms用于连接服务器的允许压缩算法
    --connect-expired-password指示服务器客户端可以处理过期密码沙箱模式
    --connect-timeout连接超时之前的秒数
    --database要使用的数据库
    --debug编写调试日志;仅当MySQL使用调试支持构建时才受支持
    --debug-check程序退出时打印调试信息
    --debug-info程序退出时打印调试信息,内存和CPU统计信息
    --default-auth身份验证插件使用
    --default-character-set指定默认字符集
    --defaults-extra-file除了通常的选项文件,还读取命名的选项文件
    --defaults-file只读命名的选项文件
    --defaults-group-suffix选项组后缀值
    --delimiter设置语句定界符
    --enable-cleartext-plugin启用明文身份验证插件
    --execute执行语句并退出
    --force即使发生SQL错误,也要继续
    --get-server-public-key从服务器请求RSA公钥
    --help显示帮助信息并退出
    --histignore模式指定日志记录要忽略的语句
    --hostMySQL服务器所在的主机
    --html产生HTML输出
    --ignore-spaces忽略函数名称后的空格
    --init-command连接后执行的SQL语句
    --line-numbers输入行号以查找错误
    --local-infile启用或禁用LOAD DATA的LOCAL功能
    --login-path从.mylogin.cnf中读取登录路径选项
    --max-allowed-packet发送到服务器或从服务器接收的最大数据包长度
    --max-join-size使用--safe-updates时联接中行的自动限制
    --named-commands启用命名的mysql命令
    --net-buffer-lengthTCP / IP和套接字通信的缓冲区大小
    --no-auto-rehash禁用自动重新哈希
    --no-beep发生错误时请勿发出哔声
    --no-defaults不读取选项文件
    --one-database忽略命令行中指定的默认数据库的语句以外的语句
    --pager使用给定命令进行分页查询输出
    --password连接服务器时使用的密码
    --pipe使用命名管道连接到服务器(仅Windows)
    --plugin-dir安装插件的目录
    --port用于连接的TCP / IP端口号
    --print-defaults打印默认选项
    --prompt将提示设置为指定格式
    --protocol使用的连接协议
    --quick不要缓存每个查询结果
    --raw写入列值而不进行转义转换
    --reconnect如果与服务器的连接丢失,则自动尝试重新连接
    --safe-updates,--i-am-a-dummy仅允许指定键值的UPDATE和DELETE语句
    --select-limit使用--safe-updates时SELECT语句的自动限制
    --server-public-key-path包含RSA公钥的文件的路径名
    --shared-memory-base-name用于共享内存连接的共享内存的名称
    --show-warnings在每个语句后显示警告(如果有)
    --sigint-ignore忽略SIGINT信号(通常是键入Control + C的结果)
    --silent静音模式
    --skip-auto-rehash禁用自动重新哈希
    --skip-column-names不要在结果中写列名
    --skip-line-numbers跳过行号以获取错误
    --skip-named-commands禁用命名的mysql命令
    --skip-pager禁用分页
    --skip-reconnect禁用重新连接
    --socketUnix套接字文件或Windows命名管道使用
    --ssl-c包含受信任的SSL证书颁发机构列表的文件
    --ssl-capath包含受信任的SSL证书颁发机构证书文件的目录
    --ssl-cert包含X.509证书的文件
    --ssl-cipher连接加密的允许密码
    --ssl-crl包含证书吊销列表的文件
    --ssl-crlpath包含证书吊销列表文件的目录
    --ssl-fips-mode是否在客户端启用FIPS模式
    --ssl-key包含X.509密钥的文件
    --ssl-mode与服务器连接的所需安全状态
    --syslog将交互式语句记录到syslog
    --table以表格格式显示输出
    --tee将输出副本追加到命名文件
    --tls-ciphersuites允许的TLSv1.3密码套件用于加密连接
    --tls-version允许的TLS协议进行加密连接
    --unbuffered每次查询后刷新缓冲区
    --user连接服务器时要使用的MySQL用户名
    --verbose详细模式
    --version显示版本信息并退出
    --vertical垂直打印查询输出行(每列值一行)
    --wait如果无法建立连接,请等待并重试,而不是中止
    --xml产生XML输出
    --zstd-compression-level与使用zstd压缩的服务器的连接的压缩级别
    • --help-?

      显示帮助消息并退出。

    • --auto-rehash

      启用自动重新哈希处理。默认情况下,此选项处于启用状态,它将启用数据库,表和列名称的完成。使用--disable-auto-rehash以禁用换汤不换药。这会使mysql更快地启动,但是如果要使用名称完成功能,则必须发出rehash命令或其\#快捷方式。

      要完成名称,请输入第一部分,然后按Tab。如果名称是明确的,则mysql完成它。否则,您可以再次按Tab键参见以您到目前为止输入的名称开头的可能名称。如果没有默认数据库,则不会完成。

      注意

      此功能需要使用readline库编译的MySQL客户端。通常,readline 库在Windows上不可用。

    • --auto-vertical-output

      如果结果集对于当前窗口而言太宽,则导致结果集垂直显示,否则使用常规表格格式。(这适用于以;或终止的语句\G。)

    • --batch-B

      使用tab作为列分隔符打印结果,每一行都换行。使用该选项,mysql不使用历史文件。

      批处理模式导致非表格输出格式和特殊字符的转义。可以通过使用原始模式来禁用转义。请参阅该--raw选项的说明。

    • --binary-as-hex

      给定此选项时,mysql使用十六进制表示法()显示二进制数据。无论总体输出显示格式是表格格式,垂直格式,HTML还是XML,都会发生这种情况。0xvalue

      从MySQL 8.0.19开始,当mysql以交互模式运行时,默认情况下启用此选项。另外,当隐式或显式启用该选项时,status(或\s)命令的输出包括以下行:

      Binary data as: Hexadecimal
      

      要禁用十六进制表示法,请使用--skip-binary-as-hex

    • --binary-mode

      该选项在处理可能包含值的mysqlbinlog输出时有帮助BLOB。默认情况下,mysql\r\n语句字符串转换为语句终止符\n并解释\0为语句终止符。--binary-mode禁用这两个功能。它还禁用除非交互模式和处于非交互模式之外的所有mysql命令(用于通过管道传输到mysql或使用该命令加载的输入)。charsetdelimitersource

    • --bind-address=ip_address

      在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。

    • --character-sets-dir=dir_name

      字符集的安装目录。请参见“字符集配置”。

    • --column-names

      在结果中写入列名称。

    • --column-type-info

      显示结果集元数据。

    • --comments-c

      是否在发送到服务器的语句中删除或保留注释。默认值为--skip-comments(条带注释),并启用--comments(保留注释)。

      注意

      MySQL的客户端总是通过优化程序提示到服务器,不管这个选项是否被给出。

      不建议使用注释剥离。此功能及其控制选项将在以后的MySQL版本中删除。

    • --compress-C

      如果可能,压缩客户端和服务器之间发送的所有信息。

      从MySQL 8.0.18开始,不推荐使用此选项。它将在将来的MySQL版本中删除。请参阅旧版连接压缩配置。

    • --compression-algorithms=value

      用于连接到服务器的允许的压缩算法。可用算法与protocol_compression_algorithms系统变量相同。默认值为uncompressed

      该选项是在MySQL 8.0.18中添加的。

    • --connect-expired-password

      向服务器指示如果用于连接的帐户密码已过期,则客户端可以处理沙箱模式。这对于mysql的非交互式调用很有用,因为通常服务器会断开非交互式客户端的连接,这些客户端尝试使用具有过期密码的帐户进行连接。(请参见“服务器处理过期的密码”。)

    • --connect-timeout=value

      连接超时之前的秒数。(默认值为0。)

    • --database=db_name-D db_name

      要使用的数据库。这主要在选项文件中有用。

    • --debug[=debug_options]-#[debug_options]

      编写调试日志。典型的debug_options字符串是。默认值为。d:t:o,file_named:t:o,/tmp/mysql.trace

      仅当MySQL是使用构建的时,此选项才可用WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。

    • --debug-check

      程序退出时,打印一些调试信息。

      仅当MySQL是使用构建的时,此选项才可用WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。

    • --debug-info-T

      程序退出时,打印调试信息以及内存和CPU使用情况统计信息。

      仅当MySQL是使用构建的时,此选项才可用WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。

    • --default-auth=plugin

      有关使用哪个客户端身份验证插件的提示。

    • --default-character-set=charset_name

      使用charset_name作为客户端和连接的默认字符集。

      如果操作系统使用一个字符集,而mysql客户端默认使用另一个字符集,则此选项很有用。在这种情况下,输出格式可能不正确。通常,您可以通过使用此选项强制客户端使用系统字符集来解决此类问题。

      有关更多信息,请参见“连接字符集和校验规则”和“字符集配置”。

    • --defaults-extra-file=file_name

      在全局选项文件之后但在用户选项文件之前(在Unix上)读取此选项文件。如果该文件不存在或无法访问,则发生错误。file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --defaults-file=file_name

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

      例外:即使这样--defaults-file,客户端程序也会读取.mylogin.cnf

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --defaults-group-suffix=str

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

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --delimiter=str

      设置语句定界符。默认为分号(;)。

    • --disable-named-commands

      禁用命名命令。\*仅使用表格,或仅在以分号(;)结尾的行的开头使用命名命令。mysql默认启用此选项。但是,即使使用此选项,长格式命令仍然可以从第一行开始工作。请参见“ mysql客户端命令”。

    • --enable-cleartext-plugin

      启用mysql_clear_password明文身份验证插件。(请参见“客户端明文可插入身份验证”。)

    • --execute=statement-e statement

      执行该语句并退出。默认输出格式类似于使用产生的格式--batch。有关某些示例,请参见“在命令行中使用选项”。使用该选项,mysql不使用历史文件。

    • --force-f

      即使发生SQL错误,也要继续。

    • --get-server-public-key

      从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

      如果给出并指定了有效的公共密钥文件,则优先于。--server-public-key-path=file_name--get-server-public-key

      有关caching_sha2_password插件的信息,请参见“缓存SHA-2可插拔身份验证”。

    • --histignore

      一个或多个冒号分隔的模式的列表,这些模式指定出于日志记录目的而忽略的语句。这些模式被添加到默认模式列表("*IDENTIFIED*:*PASSWORD*")。为该选项指定的值会影响记录到历史文件的语句的记录,并影响给定syslog--syslog选项。有关更多信息,请参见“ mysql客户端日志”。

    • --host=host_name-h host_name

      连接到给定主机上的MySQL服务器。

    • --html-H

      产生HTML输出。

    • --ignore-spaces-i

      忽略函数名称后的空格。在IGNORE_SPACESQL模式的讨论中描述了这种方法的效果(请参见“服务器SQL模式”)。

    • --init-command=str

      连接到服务器后执行的SQL语句。如果启用了自动重新连接,则在重新连接发生后再次执行该语句。

    • --line-numbers

      输入行号以查找错误。使用禁用此功能--skip-line-numbers

    • --local-infile[={0|1}]

      默认情况下,的LOCAL功能LOAD DATA由编译到MySQL客户端库中的默认值决定。要LOCAL显式启用或禁用,请使用该--local-infile选项。如果没有给出任何值,则该选项将启用LOCAL。当指定为--local-infile=0or时--local-infile=1,该选项显式禁用或启用LOCAL

      LOCALmysql中成功使用加载操作,还需要服务器允许本地加载。请参见“ LOAD DATA LOCAL的安全性问题”

    • --login-path=name

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

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --max-allowed-packet=value

      用于客户端/服务器通信的缓冲区的最大大小。默认值为16MB,最大为1GB。

    • --max-join-size=value

      使用时联接中行的自动限制--safe-updates。(默认值为1,000,000。)

    • --named-commands-G

      启用命名的mysql命令。允许使用长格式命令,而不仅仅是短格式命令。例如,quit并且\q两者都被识别。使用--skip-named-commands以禁用命名命令。请参见“ mysql客户端命令”。

    • --net-buffer-length=value

      TCP / IP和套接字通信的缓冲区大小。(默认值为16KB。)

    • --no-auto-rehash-A

      与效果相同--skip-auto-rehash。请参阅的说明--auto-rehash

    • --no-beep-b

      发生错误时请勿发出哔声。

    • --no-defaults

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

      唯一的例外是,.mylogin.cnf在所有情况下都会读取该文件(如果存在)。这样,即使--no-defaults使用密码,也可以通过比命令行更安全的方式指定密码。(.mylogin.cnfmysql_config_editor实用程序创建。请参见“mysql_config_editor-MySQL配置实用程序”。)

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --one-database-o

      忽略除默认数据库是命令行上命名的语句以外的语句。此选项是基本的,应谨慎使用。语句过滤仅基于USE语句。

      最初,mysql在输入中执行语句,因为db_name在命令行上指定数据库等效于在输入的开头插入数据库。然后,对于遇到的每条语句,mysql会接受还是拒绝以下语句,具体取决于命名数据库是否为命令行上的数据库。声明内容无关紧要。USE db_nameUSE

      假设调用mysql来处理以下语句:

      DELETE FROM db2.t2;
      USE db2;
      DROP TABLE db1.t1;
      CREATE TABLE db1.t1 (i INT);
      USE db1;
      INSERT INTO t1 (i) VALUES(1);
      CREATE TABLE db2.t1 (j INT);
      

      如果命令行是mysql --force --one-database db1,则mysql将按以下方式处理输入:

      • DELETE执行该语句是因为默认数据库为db1,即使该语句为另一个数据库中的表命名。
      • DROP TABLECREATE TABLE语句不被执行,因为默认数据库不db1,即使语句命名的表db1
      • INSERTCREATE TABLE语句执行,因为默认数据库db1,即使CREATE TABLE语句定义一个表在不同的数据库。
    • --pager[=command]

      使用给定命令进行分页查询输出。如果省略该命令,则默认的寻呼机是您的PAGER环境变量的值。有效的寻呼机为lessmorecat[>文件名]等。该选项仅在Unix上且仅在交互模式下有效。要禁用分页,请使用--skip-pager。“ mysql客户端命令”进一步讨论了输出分页。

    • --password[=password]-p[password]

      用于连接服务器的MySQL帐户的密码。密码值是可选的。如果未给出,则mysql提示输入1。如果给出,则或后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。--password=-p

      在命令行上指定密码应该被认为是不安全的。为避免在命令行上输入密码,请使用选项文件。请参见“最终用户密码安全准则”。

      要明确指定没有密码,并且mysql不应提示输入密码,请使用该--skip-password选项。

    • --pipe-W

      在Windows上,使用命名管道连接到服务器。仅当在named_pipe启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。

    • --plugin-dir=dir_name

      在其中查找插件的目录。如果该--default-auth选项用于指定身份验证插件,但mysql未找到,则指定此选项。

    • --port=port_num-P port_num

      对于TCP / IP连接,使用的端口号。

    • --print-defaults

      打印程序名称及其从选项文件中获取的所有选项。

      有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。

    • --prompt=format_str

      将提示设置为指定的格式。默认值为mysql>。提示可以包含的特殊序列在“ mysql客户端命令”中进行了描述。

    • --protocol={TCP|SOCKET|PIPE|MEMORY}

      用于连接到服务器的连接协议。当其他连接参数通常导致使用您想要的协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见“使用命令选项连接到MySQL服务器”。

    • --quick-q

      不要缓存每个查询结果,在接收到每一行时将其打印出来。如果输出被挂起,这可能会降低服务器的速度。使用该选项,mysql不使用历史文件。

    • --raw-r

      对于表格输出,列周围的“装箱”使一个列值可以与另一个列值区分开。对于非表格输出(例如在批处理模式下生成的--batch--silent指定了or 选项的输出),输出中会转义特殊字符,以便于识别。换行,制表符,NUL和反斜杠被写为\n\t\0,和\\。该--raw选项禁用此字符转义。

      下面的示例演示表格格式输出与非表格格式输出以及使用原始模式禁用转义:

      % mysql
      mysql> SELECT CHAR(92);
      +----------	+
      | CHAR(92)  |
      +----------	+
      | \         |
      +----------	+
      
      % mysql -s
      mysql> SELECT CHAR(92);
      CHAR(92)
      \\
      
      % mysql -s -r
      mysql> SELECT CHAR(92);
      CHAR(92)
      \
      
    • --reconnect

      如果与服务器的连接丢失,则自动尝试重新连接。每次断开连接都会进行一次重新连接尝试。要抑制重新连接行为,请使用--skip-reconnect

    • --safe-updates--i-am-a-dummy-U

      如果启用该选项,UPDATE并且DELETE不中使用的关键语句WHERE条款或LIMIT条款产生错误。此外,对SELECT产生(或估计产生)非常大的结果集的语句施加了限制。如果您在选项文件中设置了此选项,则可以--skip-safe-updates在命令行上使用它来覆盖它。有关此选项的更多信息,请参见使用安全更新模式(--safe-updates)。

    • --select-limit=value

      使用时的自动SELECT语句限制--safe-updates。(默认值为1,000。)

    • --server-public-key-path=file_name

      包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本的文件的路径名。该文件必须为PEM格式。此选项适用于使用sha256_passwordcaching_sha2_password身份验证插件进行身份验证的客户端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

      如果给出并指定了有效的公共密钥文件,则优先于。--server-public-key-path=file_name--get-server-public-key

      仅当使用OpenSSL构建MySQL时,此选项才可用。

      有关sha256_passwordcaching_sha2_password插件的信息,请参见“ SHA-256可插拔身份验证”和“缓存SHA-2可插拔身份验证”。

    • --shared-memory-base-name=name

      在Windows上,共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为MYSQL。共享内存名称区分大小写。

      仅当服务器在shared_memory启用系统变量以支持共享内存连接的情况下启动时,此选项才适用。

    • --show-warnings

      引起警告,如果有的话,在每个语句之后显示。此选项适用于交互式和批处理模式。

    • --sigint-ignore

      忽略SIGINT信号(通常是键入Control + C的结果)。

      如果没有此选项,则键入Control + C会中断当前语句(如果存在),否则将取消任何部分输入行。

    • --silent-s

      静音模式。产生较少的输出。可以多次指定此选项,以产生越来越少的输出。

      此选项导致非表格输出格式和特殊字符的转义。可以通过使用原始模式来禁用转义。请参阅该--raw选项的说明。

    • --skip-column-names-N

      不要在结果中写入列名。

    • --skip-line-numbers-L

      不要为错误写行号。当您想要比较包含错误消息的结果文件时很有用。

    • --socket=path-S path

      对于与的连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。

      在Windows上,仅当在named_pipe启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。

    • --ssl*

      以开头的选项--ssl指定是否使用SSL连接到服务器,并指示在何处查找SSL密钥和证书。请参阅加密连接的命令选项。

    • --ssl-fips-mode={OFF|ON|STRICT}

      控制是否在客户端上启用FIPS模式。该--ssl-fips-mode选项与其他选项的不同之处在于,该选项不用于建立加密连接,而是影响允许的加密操作。请参见“ FIPS支持”。--ssl-xxx

      这些--ssl-fips-mode值是允许的:

      • OFF:禁用FIPS模式。
      • ON:启用FIPS模式。
      • STRICT:启用“严格” FIPS模式。
      注意

      如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值--ssl-fips-modeOFF。在这种情况下,设置--ssl-fips-modeONSTRICT导致客户端在启动时发出警告并以非FIPS模式运行。

    • --syslog-j

      此选项使mysql将交互式语句发送到系统日志记录工具。在Unix上,这是syslog;在Windows上,它是Windows事件日志。记录的消息出现的目的地取决于系统。在Linux上,目标通常是/var/log/messages文件。

      这是在Linux上使用生成的输出示例--syslog。格式化此输出以提高可读性;每条记录的消息实际上只占一行。

      Mar  7 12:39:25 myhost MysqlClient[20824]:
      SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
      DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
      Mar  7 12:39:28 myhost MysqlClient[20824]:
      SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
      DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
      

      有关更多信息,请参见“ mysql客户端日志”。

    • --table-t

      以表格格式显示输出。这是交互使用的默认值,但可用于以批处理方式生成表输出。

    • --tee=file_name

      将输出副本追加到给定文件。此选项仅在交互模式下有效。“ mysql客户端命令”进一步讨论了tee文件。

    • --tls-ciphersuites=ciphersuite_list

      使用TLSv1.3的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可以为此选项命名的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参见“加密的连接TLS协议和密码”。

      该选项是在MySQL 8.0.16中添加的。

    • --tls-version=protocol_list

      加密连接允许的TLS协议。该值是一个或多个逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见“加密的连接TLS协议和密码”。

    • --unbuffered-n

      每次查询后刷新缓冲区。

    • --user=user_name-u user_name

      用于连接到服务器的MySQL帐户的用户名。

    • --verbose-v

      详细模式。产生有关程序功能的更多输出。可以多次指定此选项以产生越来越多的输出。(例如,-v -v -v即使在批处理模式下也产生表输出格式。)

    • --version-V

      显示版本信息并退出。

    • --vertical-E

      垂直打印查询输出行(每列值一行)。如果没有此选项,则可以通过终止单个语句来指定垂直输出\G

    • --wait-w

      如果无法建立连接,请等待并重试,而不是中止。

    • --xml-X

      产生XML输出。

      <field name="column_name">NULL</field>
      

      --xmlmysql一起使用时的输出与mysqldump的输出匹配--xml。有关详细信息,请参见“mysqldump-数据库备份程序”。

      XML输出还使用XML名称空间,如下所示:

      shell>mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'"
      <?xml version="1.0"?>
      
      <resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <row>
      <field name="Variable_name">version</field>
      <field name="Value">5.0.40-debug</field>
      </row>
      
      <row>
      <field name="Variable_name">version_comment</field>
      <field name="Value">Source distribution</field>
      </row>
      
      <row>
      <field name="Variable_name">version_compile_machine</field>
      <field name="Value">i686</field>
      </row>
      
      <row>
      <field name="Variable_name">version_compile_os</field>
      <field name="Value">suse-linux-gnu</field>
      </row>
      </resultset>
      
    • --zstd-compression-level=level

      用于与使用zstd压缩算法的服务器的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。

      该选项是在MySQL 8.0.18中添加的。

    mysql客户端命令

    mysql将您发出的每个SQL语句发送到要执行的服务器。mysql本身也解释了一组命令。有关这些命令的列表,请在提示符下键入help或:\hmysql>

    mysql> help
    
    List of ll MySQL commands:
    Note that ll text commands must be first on line nd end with ';'
    ?         (\?) Synonym for `help'.
    clear     (\c) Clear the current input statement.
    connect   (\r) Reconnect to the server. Optional arguments are db and host.
    delimiter (\d) Set statement delimiter.
    edit      (\e) Edit command with $EDITOR.
    ego       (\G) Send command to mysql server, display result vertically.
    exit      (\q) Exit mysql. Same as quit.
    go        (\g) Send command to mysql server.
    help      (\h) Display this help.
    nopager   (\n) Disable pager, print to stdout.
    notee     (\t) Don't write into outfile.
    pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
    print     (\p) Print current command.
    prompt    (\R) Change your mysql prompt.
    quit      (\q) Quit mysql.
    rehash    (\#) Rebuild completion hash.
    source    (\.) Execute an SQL script file. Takes a file name s an argument.
    status    (\s) Get status information from the server.
    system    (\!) Execute a system shell command.
    tee       (\T) Set outfile [to_outfile]. Append everything into given
    outfile.
    use       (\u) Use another database. Takes database name s argument.
    charset   (\C) Switch to another charset. Might be needed for processing
    binlog with multi-byte charsets.
    warnings  (\W) Show warnings fter every statement.
    nowarning (\w) Don't show warnings after every statement.
    resetconnection(\x) Clean session context.
    
    For server side help, type 'help contents'
    

    如果MySQL的与被调用的--binary-mode选项,所有的MySQL命令除禁用charsetdelimiter非交互模式(用于输入管道输送到的MySQL或使用所加载的source命令)。

    每个命令都有长号和短号两种形式。长格式不区分大小写;简称是。长格式后可以跟可选的分号终止符,而短格式则不能。

    /*...*/不支持在多行注释中使用简短格式的命令。简短格式的命令可以在单行/*!...*/版本注释中使用,/* +...*/优化程序提示注释也可以在对象定义中存储。如果有这样的顾虑:优化器提示注释可以存储在对象定义,以便转储文件时重新加载mysql会导致这种命令的执行,要么调用的MySQL--binary-mode选项或使用以外的重装客户端的MySQL

    • help[ rg],,,\h[ rg]\?[ rg]?[ rg]

      显示帮助消息,列出可用的mysql命令。

      如果为help命令提供参数,则mysql将其用作搜索字符串,以从《 MySQL参考手册》的内容访问服务器端帮助。有关更多信息,请参见“ mysql客户端服务器端帮助”。

    • charset charset_name\C charset_name

      更改默认字符集并发出一条SET NAMES语句。如果在启用了自动重新连接的情况下运行mysql,则该字符集可以在客户端和服务器上保持同步(不建议这样做),因为指定的字符集用于重新连接。

    • clear\c

      清除当前输入。如果您改变主意执行所输入的语句,请使用此选项。

    • connect[db_namehost_name]]\r[db_namehost_name]]

      重新连接到服务器。可以提供可选的数据库名称和主机名参数,以指定默认数据库或服务器运行所在的主机。如果省略,则使用当前值。

    • delimiter str\d str

      更改mysql解释为SQL语句之间的分隔符的字符串。默认为分号(;)。

      分隔符字符串可以在delimiter命令行上指定为不带引号或带引号的参数。可以使用单引号('),双引号(")或反引号(`)字符进行报价。要在带引号的字符串中包含引号,请使用其他引号字符对字符串进行引号,或使用反斜杠(\)字符对引号进行转义。应该避免在引号字符串之外使用反斜杠,因为反斜杠是MySQL的转义字符。对于不带引号的参数,定界符将读取到第一个空格或行尾。对于带引号的参数,定界符将一直读取到该行上匹配的引号。

      mysql会将定界符字符串的实例解释为语句定界符,无论出现在何处(带引号的字符串中除外)。在定义可能在其他字词中出现的定界符时要小心。例如,如果将定界符定义为X,则将无法使用INDEXin语句中的单词。mysql将其解释为INDE后跟定界符X

      mysql识别的分隔符设置为默认值以外的其他值时;,该字符的实例将不解释地发送到服务器。但是,服务器本身仍将其解释;为语句定界符并相应地处理语句。服务器端的此行为对于多语句执行(请参见“ C API多语句执行支持”)以及对存储过程和函数,触发器和事件的主体进行解析(请参见)起作用,“定义存储的程序”)。

    • edit\e

      编辑当前输入语句。mysql检查EDITORVISUAL环境变量的值,以确定要使用哪个编辑器。如果未设置任何变量,则默认编辑器为vi

      edit命令仅在Unix中有效。

    • ego\G

      将当前语句发送到要执行的服务器,并使用垂直格式显示结果。

    • exit\q

      退出mysql

    • go\g

      将当前语句发送到要执行的服务器。

    • nopager\n

      禁用输出分页。请参阅的说明pager

      nopager命令仅在Unix中有效。

    • notee\t

      禁止将输出复制到tee文件。请参阅的说明tee

    • nowarning\w

      禁止在每个语句之后显示警告。

    • pager[command]\P[command]

      启用输出分页。通过--pager在调用mysql时使用该选项,可以使用交互方式使用Unix程序(如lessmore或任何其他类似程序)浏览或搜索查询结果。如果您没有为该选项指定值,则mysql将检查PAGER环境变量的值并将分页器设置为该值。寻呼机功能仅在交互模式下有效。

      可以使用pager命令交互启用输出分页,并使用禁用输出分页nopager。该命令带有一个可选参数。如果给定,则将寻呼程序设置为此。如果不使用任何参数,则将寻呼机设置为在命令行上设置的寻呼机,或者stdout如果未指定任何寻呼机。

      输出分页仅在Unix中有效,因为它使用popen()Windows上不存在的功能。对于Windows,该tee选项可以代替保存查询输出,尽管pager在某些情况下它不如浏览输出方便。

    • print\p

      打印当前输入语句而不执行它。

    • prompt[str]\R[str]

      mysql提示符重新配置为给定的字符串。提示中可以使用的特殊字符序列将在本节后面介绍。

      如果您指定prompt不带参数的命令,mysql会将提示重置为默认值mysql>

    • quit\q

      退出mysql

    • rehash\#

      重建完成散列,该散列可在您输入语句时实现数据库,表和列名的完成。(请参阅--auto-rehash选项说明。)

    • resetconnection\x

      重置连接以清除会话状态。

      重置连接具有与mysql_change_user()自动重新连接类似的效果,不同之处在于未关闭并重新打开该连接并且不进行重新身份验证。请参见“ mysql_change_user()”和“ C API自动重新连接控制”。

      此示例显示如何resetconnection清除在会话状态下维护的值:

      mysql> SELECT LAST_INSERT_ID(3);
      +-------------------	+
      | LAST_INSERT_ID(3)  |
      +-------------------	+
      | 3  |
      +-------------------	+
      
      mysql> SELECT LAST_INSERT_ID();
      +------------------	+
      | LAST_INSERT_ID()  |
      +------------------	+
      | 3  |
      +------------------	+
      
      mysql> resetconnection;
      
      mysql> SELECT LAST_INSERT_ID();
      +------------------	+
      | LAST_INSERT_ID()  |
      +------------------	+
      | 0  |
      +------------------	+
      
    • source file_name\.file_name

      读取命名文件并执行其中包含的语句。在Windows上,将路径名称分隔符指定为/\\

      引号字符被当作文件名本身的一部分。为了获得最佳效果,该名称不应包含空格字符。

    • status\s

      提供有关连接和正在使用的服务器的状态信息。如果在--safe-updates启用状态下运行,status还将打印影响查询的mysql变量的值。

    • system command\!command

      使用默认命令解释器执行给定命令。

      在MySQL 8.0.19之前,该system命令仅在Unix中有效。从8.0.19开始,它也可以在Windows上运行。

    • tee[file_name]\T[file_name]

      通过--tee在调用mysql时使用该选项,可以记录语句及其输出。屏幕上显示的所有数据都将添加到给定文件中。这对于调试目的也非常有用。mysql在每条语句之后,即打印下一个提示符之前,将结果刷新到文件中。Tee功能仅在交互模式下有效。

      您可以使用tee命令以交互方式启用此功能。如果没有参数,则使用先前的文件。tee可以使用notee命令禁用该文件。tee再次执行将重新启用日志记录。

    • use db_name\u db_name

      使用db_name作为默认数据库。

    • warnings\W

      启用每个语句后的警告显示(如果有的话)。

    以下是有关该pager命令的一些提示:

    • 您可以使用它来写入文件,而结果仅进入文件:

      mysql> pager cat
      > /tmp/log.txt
      

      您还可以为要用作寻呼机的程序传递任何选项:

      mysql> pager less -n -i -S
      
    • 在前面的示例中,请注意该-S选项。您可能会发现它对于浏览广泛的查询结果非常有用。有时很难在屏幕上读取非常宽的结果集。该-S选项可以使结果集更具有可读性,因为你可以使用水平左箭头,右箭头键滚动它。您还可以-Sless之内交互使用来打开和关闭水平浏览模式。有关更多信息,请阅读较少手册的页面:

      shell>man less
      
    • -F-X选项可以与使用更少至导致其出口如果一个屏幕上,这是方便的,当没有滚动是必要的输出配合:

      mysql> pager less -n -i -S -F -X
      
    • 您可以指定非常复杂的寻呼机命令来处理查询输出:

      mysql> pager cat | tee /dr1/tmp/res.txt \
      | tee /dr2/tmp/res2.txt | less -n -i -S
      

      在此示例中,该命令会将查询结果发送到安装在/dr1和的两个不同文件系统上两个不同目录中的两个文件/dr2,但仍使用less在屏幕上显示结果。

    您也可以组合teepager功能。tee启用一个文件并将其pager设置为less,您就可以使用less程序浏览结果,同时仍将所有内容附加到文件中。该命令tee使用的Unix pagermysql内置命令之间的区别在于,即使您没有可用的Unix teetee,该内置程序tee也可以工作。内置功能还记录了屏幕上打印的所有内容,而Unix teeteepager记录得并不多。另外,tee可以从mysql内部以交互方式打开和关闭文件日志记录。当您想将某些查询而不是其他查询记录到文件时,此功能很有用。

    prompt命令将重新配置默认mysql>提示。用于定义提示的字符串可以包含以下特殊序列。

    选项描述
    \C当前的连接标识符
    \c针对您发出的每个语句递增的计数器
    \D完整的当前日期
    \d默认数据库
    \h服务器主机
    \l当前定界符
    \m当前时间
    \n换行符
    \O本月以三字母格式显示(1月,2月,…)
    \o当前月份(数字格式)
    \P上午下午
    \p当前的TCP / IP端口或套接字文件
    \R当前时间,以24小时军事时间(0–23)
    \r当前时间,标准的12小时制(1–12)
    \S分号
    \s当前时间的秒数
    \t制表符
    \U

    您的全名user_name@host_name

    \u您的用户名
    \v服务器版本
    \w星期三的三字母格式(星期一,星期二,…)
    \Y当前年份,四位数
    \y当前年份,两位数
    \_空间
    \空格(反斜杠后跟空格)
    \'单引号
    \"双引号
    \\文字\反斜杠字符
    \x

    x,对于上面未列出的任何“x

    您可以通过几种方式设置提示:

    • 使用环境变量。您可以将MYSQL_PS1环境变量设置为提示字符串。例如:

      shell>export MYSQL_PS1="(\u@\h) [\d]> "
      
    • 使用命令行选项。您可以--prompt在命令行上将该选项设置为 mysql。例如:

      shell>mysql --prompt="(\u@\h) [\d]> "
      (user@host) [database]>
      
    • 使用选项文件。您可以prompt[mysql]任何MySQL选项文件(例如/etc/my.cnf.my.cnf主目录中的文件)的组中设置该选项。例如:

      [mysql]
      prompt=(\\u@\\h) [\\d]>\\_
      

      在此示例中,请注意反斜杠被加倍。如果使用prompt选项文件中的选项设置提示,则在使用特殊提示选项时,建议将反斜杠加倍。在选项文件中可以识别的允许提示选项集和特殊转义序列集之间存在一些重叠。(选项文件中转义序列的规则在“使用选项文件”中列出。)如果使用单个反斜杠,则重叠可能会给您带来麻烦。例如,\s被解释为空格而不是当前秒值。以下示例显示如何在选项文件中定义提示,以hh:mm:ss>格式包含当前时间:

      [mysql]
      prompt="\\r:\\m:\\s> "
      
    • 以交互方式设置提示。您可以使用prompt(或\R)命令以交互方式更改提示。例如:

      mysql> prompt (\u@\h) [\d]
      >\_
      PROMPT set to '(\u@\h) [\d]>\_'
      (user@host) [database]
      >
      (user@host) [database]
      > prompt
      Returning to default PROMPT of mysql
      >
      mysql>
      

    mysql客户端记录

    MySQL的客户端可以做这些类型的日志记录,用于交互式执行的语句:

    • 在Unix上,mysql将语句写入历史文件。默认情况下,此文件.mysql_history在您的主目录中命名。要指定其他文件,请设置MYSQL_HISTFILE环境变量的值。
    • 在所有平台上,如果--syslog给出了该选项,mysql会将语句写入系统日志记录工具。在Unix上,这是syslog;在Windows上,它是Windows事件日志。记录的消息出现的目的地取决于系统。在Linux上,目标通常是/var/log/messages文件。

    以下讨论描述了适用于所有日志记录类型的特征,并提供了每种日志记录类型所特有的信息。

    • 记录如何发生
    • 控制历史记录文件
    • syslog日志记录特征
    记录如何发生

    对于每个启用的日志记录目标,语句日志记录如下发生:

    • 语句仅在交互式执行时才记录。语句是非交互式的,例如,从文件或管道中读取时。也可以通过使用--batch or --execute选项抑制语句记录。
    • 如果语句匹配“ ignore ”列表中的任何模式,则语句将被忽略并且不会记录。稍后将描述此列表。
    • mysql分别记录每个不可忽略的非空语句行。
    • 如果不可忽略的语句跨越多行(不包括终止定界符),则mysql将这些行连接起来以形成完整的语句,将换行符映射到空格,并记录结果以及定界符。

    因此,跨多行的输入语句可以记录两次。考虑以下输入:

    mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;
    

    在这种情况下,mysql将记录“ SELECT ”,“ Today is ”,“,”,“ CURDATE()”和“;”。”行读取它们。在映射SELECT\n'Today is'\n,\nCURDATE()SELECT 'Today is', CURDATE()以及定界符之后,它还会记录complete语句。因此,这些行出现在记录的输出中:

    SELECT
    'Today is'
    ,
    CURDATE()
    ;
    SELECT 'Today is' , CURDATE();
    

    出于记录目的, mysql忽略与“ ignore ”列表中的任何模式匹配的语句。默认情况下,模式列表为"*IDENTIFIED*:*PASSWORD*",以忽略引用密码的语句。模式匹配不区分大小写。在模式中,两个字符是特殊的:

    • ?匹配任何单个字符。
    • *匹配零个或多个字符的任何序列。

    要指定其他模式,请使用--histignore选项或设置MYSQL_HISTIGNORE环境变量。(如果同时指定了两者,则选项值优先。)该值应该是一个或多个以冒号分隔的模式的列表,并附加到默认模式列表中。

    命令行上指定的模式可能需要加引号或转义,以防止命令解释器对其进行特殊处理。例如,除了引用密码的语句之外,要禁止记录UPDATEDELETE语句,请像下面这样调用mysql

    shell>mysql --histignore="*UPDATE*:*DELETE*"
    
    控制历史记录文件

    .mysql_history文件应该以限制性的接入方式进行保护,因为敏感信息可能会被写入到它,如包含口令的SQL语句的文本。请参见“最终用户密码安全准则”。当使用向上箭头键调用历史记录时,可从mysql客户端访问文件中的语句。请参阅禁用交互式历史记录。

    如果您不想维护历史记录文件,请先删除.mysql_history它(如果存在)。然后,使用以下两种技术之一阻止其再次创建:

    • MYSQL_HISTFILE环境变量设置为/dev/null。要使此设置在您每次登录时生效,请将其放在外壳程序的启动文件之一中。
    • 创建.mysql_history到的符号链接/dev/null;只需执行一次:

      shell>ln -s /dev/null $HOME/.mysql_history
      
    syslog日志记录特征

    如果--syslog给出了该选项,则mysql将交互式语句写入系统日志记录工具。消息日志记录具有以下特征。

    记录发生在“信息”级别。这对应于Unix / Linux 功能和 Windows事件日志的LOG_INFO优先级。请查阅系统文档以配置日志记录功能。syslogsyslogEVENTLOG_INFORMATION_TYPE

    邮件大小限制为1024个字节。

    消息包含标识符,MysqlClient后跟这些值:

    • SYSTEM_USER

      操作系统用户名(登录名)或--用户未知。

    • MYSQL_USER

      MySQL用户名(由--user选项指定)或--用户未知。

    • CONNECTION_ID

      客户端连接标识符。这CONNECTION_ID()与会话中的函数值相同。

    • DB_SERVER

      服务器主机,或者--主机未知。

    • DB

      默认数据库,或者--如果未选择数据库。

    • QUERY

      记录的语句的文本。

    这是在Linux上使用生成的输出示例--syslog。格式化此输出以提高可读性;每条记录的消息实际上只占一行。

    Mar  7 12:39:25 myhost MysqlClient[20824]:
    SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
    DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
    Mar  7 12:39:28 myhost MysqlClient[20824]:
    SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
    DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
    

    mysql客户端服务器端帮助

    mysql> help search_string
    

    如果为help命令提供参数,则mysql将其用作搜索字符串,以从《 MySQL参考手册》的内容访问服务器端帮助。该命令的正确操作要求mysql使用帮助主题信息来初始化数据库中的帮助表(请参见“服务器端帮助支持”)。

    如果搜索字符串不匹配,则搜索失败:

    mysql> help me
    
    Nothing found
    Please try to run 'help contents' for a list of ll ccessible topics
    

    使用帮助内容参见帮助类别的列表:

    mysql> help contents
    You asked for help about help category: "Contents"
    For more information, type 'help <item>', where <item
    > is one of the
    following categories:
    Account Management
    Administration
    Dat  Definition
    Dat  Manipulation
    Dat  Types
    Functions
    Functions nd Modifiers for Use with GROUP BY
    Geographic Features
    Language Structure
    Plugins
    Storage Engines
    Stored Routines
    Table Maintenance
    Transactions
    Triggers
    

    如果搜索字符串匹配多个项目,则mysql显示匹配主题的列表:

    mysql> help logs
    Many help items for your request exist.
    To make a more specific request, please type 'help <item>',
    where <item
    > is one of the following topics:
    SHOW
    SHOW BINARY LOGS
    SHOW ENGINE
    SHOW LOGS
    

    使用主题作为搜索字符串,以参见该主题的帮助条目:

    mysql> help show binary logs
    Name: 'SHOW BINARY LOGS'
    Description:
    Syntax:
    SHOW BINARY LOGS
    SHOW MASTER LOGS
    
    Lists the binary log files on the server. This statement is used s
    part of the procedure described in [purge-binary-logs], that shows how
    to determine which logs can be purged.
    
    mysql> SHOW BINARY LOGS;
    +---------------	+-----------	+-----------	+
    | Log_name       | File_size  | Encrypted  |
    +---------------	+-----------	+-----------	+
    | binlog.000015  | 724935  | Yes        |
    | binlog.000016  | 733481  | Yes        |
    +---------------	+-----------	+-----------	+
    

    搜索字符串可以包含通配符%_。这些具有与操作员执行的模式匹配操作相同的含义LIKE。例如,HELP rep%返回以开头的主题列表rep

    mysql> HELP rep%
    Many help items for your request exist.
    To make a more specific request, please type 'help <item>',
    where <item
    > is one of the following
    topics:
    REPAIR TABLE
    REPEAT FUNCTION
    REPEAT LOOP
    REPLACE
    REPLACE FUNCTION
    



    从文本文件执行SQL语句

    MySQL的客户端通常交互使用,如下所示:

    shell>mysql db_name
    

    但是,也可以将SQL语句放入文件中,然后告诉mysql从该文件中读取其输入。为此,创建一个text_file包含您要执行的语句的文本文件。然后调用mysql,如下所示:

    shell>mysql db_name < text_file
    

    如果将语句作为文件中的第一条语句放置,则无需在命令行上指定数据库名称:USE db_name

    shell>mysql < text_file
    

    如果您已经在运行mysql,则可以使用以下source命令执行SQL脚本文件\.

    mysql> source file_name
    mysql> \. file_name
    

    有时,您可能希望您的脚本向用户显示进度信息。为此,您可以插入如下语句:

    SELECT '<info_to_display>' AS ' ';
    

    该语句显示输出<info_to_display>

    您也可以使用该选项调用mysql,该--verbose选项使每个语句在产生结果之前显示。

    mysql在输入文件的开头忽略Unicode字节顺序标记(BOM)字符。以前,它会读取它们并将其发送到服务器,从而导致语法错误。BOM的存在不会导致 mysql更改其默认字符集。为此,请使用诸如的选项调用mysql--default-character-set=utf8

    有关批处理模式的更多信息,请参见“在批处理模式下使用mysql”。

    mysql客户端提示

    本节提供有关更有效使用mysql的技术mysql操作行为的信息。

    • 输入行编辑
    • 禁用互动历史记录
    • Windows上的Unicode支持
    • 垂直显示查询结果
    • 使用安全更新模式(-安全更新)
    • 禁用mysql自动重新连接
    • MySQL客户端解析器与服务器解析器
    输入行编辑

    mysql支持输入行编辑,它使您可以就地修改当前输入行或调用以前的输入行。例如,箭头键和右箭头键在当前输入行中水平移动,而箭头键和下箭头键在先前输入的行中上下移动。Backspace删除光标之前的字符,并键入新字符在光标位置输入它们。要输入该行,请按 Enter

    在Windows上,编辑键序列与控制台窗口中的命令编辑支持的序列相同。在Unix上,键序列取决于用于构建mysql的输入库(例如libeditor readline库)。

    libeditreadline库的文档可在线获得。要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。这是在您的家目录中的文件:.editrclibedit.inputrcreadline

    例如,在中libeditControl + W删除当前光标位置之前的所有内容,而Control + U删除整个行。在中readlineControl + W删除光标之前的单词,而Control + U删除当前光标位置之前的所有内容。如果mysql是使用构建的libedit,则喜欢readline这两个键的行为的用户可以在.editrc文件中放置以下行(如果需要,可以创建文件):

    bind "^W" ed-delete-prev-word
    bind "^U" vi-kill-line-prev
    

    要参见当前的键绑定集,请暂时bind在的末尾放置一行.editrcmysql将在启动时显示绑定。

    禁用互动历史记录

    向上箭头键使您能够从当前和前几届会议召回输入线。在共享控制台的情况下,此行为可能不合适。mysql支持部分或全部禁用交互式历史记录,具体取决于主机平台。

    在Windows上,历史记录存储在内存中。Alt + F7删除当前历史记录缓冲区中存储在存储器中的所有输入行。它还删除用F7显示并用F9调用(按数字)的输入行前面的序列号列表。按下Alt + F7后输入的新输入行将重新填充当前历史记录缓冲区。如果使用该--syslog选项启动mysql,则清除缓冲区不会阻止登录Windows Event Viewer 。关闭控制台窗口也会清除当前历史记录缓冲区。

    要在Unix上禁用交互式历史记录,请首先删除该.mysql_history文件(如果存在)(否则将调用以前的条目)。然后使用忽略所有新输入行的选项启动mysql--histignore="*"。要重新启用撤回(和记录)行为,请在不使用该选项的情况下重新启动mysql

    如果阻止.mysql_history创建文件(请参阅控制历史记录文件)并用于--histignore="*"启动mysql客户端,则交互式历史记录调用功能将完全禁用。或者,如果您省略该--histignore选项,则可以调用在当前会话期间输入的输入行。

    Windows上的Unicode支持

    Windows提供了基于UTF-16LE的API来读取和写入控制台。Windows 的mysql客户端能够使用这些API。Windows安装程序会在MySQL菜单中创建一个名为的项目MySQL command line client - Unicode。此项调用设置了属性的mysql客户端,以使用Unicode通过控制台与MySQL服务器通信。

    要手动利用此支持,请在使用兼容Unicode字体的控制台中运行mysql,并将默认字符集设置为支持与服务器通信的Unicode字符集:

    1. 打开控制台窗口。
    2. 转到控制台窗口属性,选择字体选项卡,然后选择Lucida Console或其他兼容的Unicode字体。这是必需的,因为默认情况下控制台窗口是使用Unicode不足的DOS栅格字体启动的。
    3. 使用(或)选项执行mysql.exe。此选项是必需的,因为它是不能用作客户端字符集的字符集之一。请参阅不允许的客户字符集。--default-character-set=utf8utf8mb4utf16le

    进行这些更改后,mysql将使用Windows API使用UTF-16LE与控制台进行通信,并使用UTF-8与服务器进行通信。(前面提到的菜单项如上所述设置字体和字符集。)

    为了避免每次运行mysql时都要执行这些步骤,可以创建一个调用mysql.exe的快捷方式。快捷方式应将控制台字体设置为Lucida Console或其他兼容的Unicode字体,并将--default-character-set=utf8(或utf8mb4)选项传递给mysql.exe

    或者,创建一个仅设置控制台字体的快捷方式,然后在文件[mysql]组中设置字符集my.ini

    [mysql]
    default-character-set=utf8
    
    垂直显示查询结果

    垂直显示而不是通常的水平表格格式时,某些查询结果更具可读性。通过用\ G代替分号来终止查询,可以垂直显示查询。例如,包含换行符的较长文本值通常在垂直输出中更容易阅读:

    mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
    *************************** 1. row  ***************************
    msg_nro : 3068
    date : 2000-03-01 23 :29 :50
    time_zone : 	+0200
    mail_from : Jones
    reply : jones@example.com
    mail_to : "John Smith" <smith@example.com>
    sbj : UTF-8
    txt : >>>>> "John" == John Smith writes :
    
    John> Hi . I think this is a good ide  .  Is anyone familiar
    John
    > with UTF-8 or Unicode? Otherwise , I'll put this on my
    John
    > TODO list  nd see what happens .
    
    Yes , please do that .
    
    Regards ,
    Jones
    file: inbox-jani-1
    hash: 1904029441 row in set (0.09 sec)
    
    使用安全更新模式(-安全更新)

    对于初学者,一个有用的启动选项是--safe-updates(或--i-am-a-dummy,效果相同)。当您可能发出了UPDATEor DELETE语句但忘记了WHERE指示要修改的行的子句时,安全更新模式很有用。通常,此类语句会更新或删除表中的所有行。使用--safe-updates,您只能通过指定标识行或LIMIT子句或两者的键值来修改行。这有助于防止事故发生。安全更新模式还限制SELECT了产生(或估计产生)非常大的结果集的语句。

    --safe-updates选项的原因的mysql当它连接到MySQL服务器,设置的会话值来执行下面的语句sql_safe_updatessql_select_limitmax_join_size系统变量:

    SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
    

    SET语句影响语句处理,如下所示:

    • 如果sql_safe_updates原因UPDATEDELETE语句未在WHERE子句中指定关键约束,或未提供LIMIT子句,或两者均未启用,则使它们产生错误。例如:

      UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
      
      UPDATE tbl_name SET not_key_column=val LIMIT 1;
      
    • 设置sql_select_limit为1,000会使服务器将所有SELECT结果集限制为1,000行,除非该语句包含一个LIMIT子句。
    • 如果服务器估计必须检查超过1,000,000行组合,则设置max_join_size为1,000,000会导致多表SELECT语句产生错误。

    要指定结果集限制(不同于1,000和1,000,000),可以在调用mysql时使用--select-limit--max-join-size选项覆盖默认值:

    mysql --safe-updates --select-limit=500 --max-join-size=10000
    

    如果优化器决定不使用键列上的索引,则即使使用子句中指定的键,UPDATE nd DELETE语句也可能在安全更新模式下产生错误WHERE

    • 如果内存使用量超出range_optimizer_max_mem_size系统变量允许的范围,则无法使用索引上的范围访问。然后,优化器回退到表扫描。请参阅限制内存使用以进行范围优化。
    • 如果键比较需要类型转换,则可能不使用索引(请参见“ MySQL如何使用索引”)。假设使用将索引的字符串列c1与数字值进行比较WHERE c1 = 2222。对于此类比较,将字符串值转换为数字,并对操作数进行数字比较(请参见“表达式评估中的类型转换”),从而避免使用索引。如果启用了安全更新模式,则会发生错误。

    从MySQL 8.0.13开始,安全更新模式还包含以下行为:

    • EXPLAINUPDATEDELETE语句一起使用不会产生安全更新错误。这样可以使用EXPLAIN加号SHOW WARNINGS参见为什么不使用索引,这在range_optimizer_max_mem_size发生违例或类型转换并且优化器不使用索引的情况下很有用,即使在WHERE子句中指定了键列。
    • 当发生安全更新错误时,错误消息将包含所产生的第一个诊断,以提供有关失败原因的信息。例如,该消息可能指示range_optimizer_max_mem_size已超过该值或发生了类型转换,这两种情况都可能会阻止使用索引。
    • 对于多表删除和更新,仅当任何目标表使用表扫描时,才会在启用安全更新的情况下生成错误。
    禁用mysql自动重新连接

    如果mysql客户端在发送一条语句时失去了与服务器的连接,它将立即自动尝试重新连接一次到服务器并再次发送该语句。但是,即使mysql成功重新连接,您的第一个连接也已结束,并且之前的所有会话对象和设置都将丢失:临时表,自动提交模式以及用户定义的会话变量。同样,任何当前事务都会回滚。此行为对您可能很危险,如以下示例所示,在您不知道的情况下在第一条和第二条语句之间关闭并重新启动服务器:

    mysql> SET @ =1;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> INSERT INTO t VALUES(@ );
    ERROR 2006: MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id: 1
    Current database: test
    
    Query OK, 1 row affected (1.30 sec)
    
    mysql> SELECT * FROM t;
    +------	+
    | a     |
    +------	+
    | NULL  |
    +------	+
    1 row in set (0.05 sec)
    

    @用户变量已经失去了与连接,重新连接后,它是不确定的。如果丢失连接而使mysql终止并出错则很重要,则可以使用该选项启动mysql客户端--skip-reconnect

    有关自动重新连接及其在重新连接时对状态信息的影响的更多信息,请参见“ C API自动重新连接控制”。

    MySQL客户端解析器与服务器解析器

    MySQL的客户端使用在客户端不是由所使用的解析器完整的副本解析器的mysqld服务器端服务器。这可能导致某些构造物的处理差异。例子:

    • "如果ANSI_QUOTES启用了SQL模式,服务器解析器会将以字符分隔的字符串视为标识符,而不是纯字符串。

      MySQL的客户端分析器不把ANSI_QUOTESSQL模式考虑在内。不管是否启用,它将以"'`字符分隔的字符串视为相同ANSI_QUOTES

    • /*!...*//* +...*/注释中,mysql客户端解析器解释简短的mysql命令。服务器解析器不会解释它们,因为这些命令在服务器端没有任何意义。

      如果期望的是MySQL的不解释注释中短格式命令,一个局部的解决方法是使用--binary-mode选项,这导致所有的MySQL除了被禁用命令\C\d非交互模式(用于输入管道输送到的MySQL或装载使用source命令)。