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 | 模式指定日志记录要忽略的语句 |
--host | MySQL服务器所在的主机 |
--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-length | TCP / 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 | 禁用重新连接 |
--socket | Unix套接字文件或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或使用该命令加载的输入)。charset
delimiter
source
--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_name
d: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_SPACE
SQL模式的讨论中描述了这种方法的效果(请参见“服务器SQL模式”)。--init-command=str
连接到服务器后执行的SQL语句。如果启用了自动重新连接,则在重新连接发生后再次执行该语句。
--line-numbers
输入行号以查找错误。使用禁用此功能
--skip-line-numbers
。--local-infile[={0|1}]
默认情况下,的
LOCAL
功能LOAD DATA
由编译到MySQL客户端库中的默认值决定。要LOCAL
显式启用或禁用,请使用该--local-infile
选项。如果没有给出任何值,则该选项将启用LOCAL
。当指定为--local-infile=0
or时--local-infile=1
,该选项显式禁用或启用LOCAL
。要
LOCAL
在mysql中成功使用加载操作,还需要服务器允许本地加载。请参见“ 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.cnf
由mysql_config_editor实用程序创建。请参见“mysql_config_editor-MySQL配置实用程序”。)有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
--one-database
,-o
忽略除默认数据库是命令行上命名的语句以外的语句。此选项是基本的,应谨慎使用。语句过滤仅基于
USE
语句。最初,mysql在输入中执行语句,因为
db_name
在命令行上指定数据库等效于在输入的开头插入数据库。然后,对于遇到的每条语句,mysql会接受还是拒绝以下语句,具体取决于命名数据库是否为命令行上的数据库。声明内容无关紧要。USE db_name
USE
假设调用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 TABLE
和CREATE TABLE
语句不被执行,因为默认数据库不db1
,即使语句命名的表db1
。 - 该
INSERT
和CREATE TABLE
语句执行,因为默认数据库db1
,即使CREATE TABLE
语句定义一个表在不同的数据库。
--pager[=command]
使用给定命令进行分页查询输出。如果省略该命令,则默认的寻呼机是您的
PAGER
环境变量的值。有效的寻呼机为less,more,cat[>文件名]等。该选项仅在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_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。如果给出并指定了有效的公共密钥文件,则优先于。
--server-public-key-path=file_name
--get-server-public-key
仅当使用OpenSSL构建MySQL时,此选项才可用。
有关
sha256_password
和caching_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-mode
是OFF
。在这种情况下,设置--ssl-fips-mode
为ON
或STRICT
导致客户端在启动时发出警告并以非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>
--xml
与mysql一起使用时的输出与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
或:\h
mysql>
mysql>help List of ll MySQL commands: Note thatll text commands must befirst on line ndend with ';' ? (\?) Synonymfor `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'twrite into outfile . pager (\P)Set PAGER [to_pager]. Print thequery results via PAGER. print (\p) Printcurrent command. prompt (\R)Change your mysql prompt. quit (\q) Quit mysql. rehash (\#)Rebuild completion hash .source (\.)Execute anSQL scriptfile . Takes afile name s an argument.status (\s)Get status informationfrom theserver .system (\!)Execute asystem shell command. tee (\T)Set outfile [to_outfile]. Append everythinginto givenoutfile .use (\u)Use anotherdatabase . Takesdatabase name s argument. charset (\C) Switchto anothercharset . Might be neededfor processingbinlog 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命令除禁用charset
和delimiter
非交互模式(用于输入管道输送到的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
,则将无法使用INDEX
in语句中的单词。mysql将其解释为INDE
后跟定界符X
。当mysql识别的分隔符设置为默认值以外的其他值时
;
,该字符的实例将不解释地发送到服务器。但是,服务器本身仍将其解释;
为语句定界符并相应地处理语句。服务器端的此行为对于多语句执行(请参见“ C API多语句执行支持”)以及对存储过程和函数,触发器和事件的主体进行解析(请参见)起作用,“定义存储的程序”)。edit
,\e
编辑当前输入语句。mysql检查
EDITOR
和VISUAL
环境变量的值,以确定要使用哪个编辑器。如果未设置任何变量,则默认编辑器为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程序(如less,more或任何其他类似程序)浏览或搜索查询结果。如果您没有为该选项指定值,则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
选项少可以使结果集更具有可读性,因为你可以使用水平左箭头,右箭头键滚动它。您还可以-S
在less之内交互使用来打开和关闭水平浏览模式。有关更多信息,请阅读较少手册的页面: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在屏幕上显示结果。
您也可以组合tee
和pager
功能。tee
启用一个文件并将其pager
设置为less,您就可以使用less程序浏览结果,同时仍将所有内容附加到文件中。该命令tee
使用的Unix pager
和mysql内置命令之间的区别在于,即使您没有可用的Unix teetee
,该内置程序tee
也可以工作。内置功能还记录了屏幕上打印的所有内容,而Unix tee与tee
pager
记录得并不多。另外,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 | 您的全名 |
\u | 您的用户名 |
\v | 服务器版本 |
\w | 星期三的三字母格式(星期一,星期二,…) |
\Y | 当前年份,四位数 |
\y | 当前年份,两位数 |
\_ | 空间 |
\ | 空格(反斜杠后跟空格) |
\' | 单引号 |
\" | 双引号 |
\\ | 文字\ 反斜杠字符 |
\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 Returningto default PROMPTof 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
环境变量。(如果同时指定了两者,则选项值优先。)该值应该是一个或多个以冒号分隔的模式的列表,并附加到默认模式列表中。
命令行上指定的模式可能需要加引号或转义,以防止命令解释器对其进行特殊处理。例如,除了引用密码的语句之外,要禁止记录UPDATE
和DELETE
语句,请像下面这样调用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
优先级。请查阅系统文档以配置日志记录功能。syslog
syslog
EVENTLOG_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 Nothingfound Please tryto run 'help contents'for alist of ll ccessible topics
使用帮助内容参见帮助类别的列表:
mysql>help contents You askedfor help abouthelp category: "Contents"For more information,type 'help <item>',where <item > isone of thefollowing categories:Account Management AdministrationDat Definition Dat ManipulationDat Types Functions Functions nd Modifiersfor Use with GROUP BY Geographic FeaturesLanguage StructurePlugins Storage Engines Stored RoutinesTable Maintenance TransactionsTriggers
如果搜索字符串匹配多个项目,则mysql显示匹配主题的列表:
mysql>help logs Manyhelp itemsfor your request exist.To make a morespecific request, pleasetype 'help <item>',where <item > isone of thefollowing topics:SHOW SHOW BINARYLOGS SHOW ENGINE SHOW LOGS
使用主题作为搜索字符串,以参见该主题的帮助条目:
mysql>help show binarylogs Name : 'SHOW BINARY LOGS'Description : Syntax:SHOW BINARYLOGS SHOW MASTER LOGS Lists the binary log fileson theserver . This statement is useds partof theprocedure describedin [purge -binary-logs ], that shows howto determine whichlogs can be purged. mysql>SHOW BINARYLOGS ; +--------------- +----------- +----------- + | Log_name | File_size | Encrypted | +--------------- +----------- +----------- + | binlog.000015 | 724935 | Yes | | binlog.000016 | 733481 | Yes | +--------------- +----------- +----------- +
搜索字符串可以包含通配符%
和_
。这些具有与操作员执行的模式匹配操作相同的含义LIKE
。例如,HELP rep%
返回以开头的主题列表rep
:
mysql>HELP rep% Manyhelp itemsfor your request exist.To make a morespecific request, pleasetype 'help <item>',where <item > isone of thefollowing 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的输入库(例如libedit
or readline
库)。
libedit
和readline
库的文档可在线获得。要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。这是在您的家目录中的文件:.editrc
对libedit
和.inputrc
对readline
。
例如,在中libedit
,Control + W删除当前光标位置之前的所有内容,而Control + U删除整个行。在中readline
,Control + W删除光标之前的单词,而Control + U删除当前光标位置之前的所有内容。如果mysql是使用构建的libedit
,则喜欢readline
这两个键的行为的用户可以在.editrc
文件中放置以下行(如果需要,可以创建文件):
bind "^W" ed-delete-prev-word bind "^U" vi-kill-line-prev
要参见当前的键绑定集,请暂时bind
在的末尾放置一行.editrc
。mysql将在启动时显示绑定。
禁用互动历史记录
该向上箭头键使您能够从当前和前几届会议召回输入线。在共享控制台的情况下,此行为可能不合适。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字符集:
- 打开控制台窗口。
- 转到控制台窗口属性,选择字体选项卡,然后选择Lucida Console或其他兼容的Unicode字体。这是必需的,因为默认情况下控制台窗口是使用Unicode不足的DOS栅格字体启动的。
- 使用(或)选项执行mysql.exe。此选项是必需的,因为它是不能用作客户端字符集的字符集之一。请参阅不允许的客户字符集。
--default-character-set=utf8
utf8mb4
utf16le
进行这些更改后,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 mailsWHERE LENGTH(txt) < 300LIMIT 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 orUnicode? Otherwise , I'll put thison my John > TODOlist nd see what happens . Yes , pleasedo that . Regards , Jonesfile : inbox-jani-1hash : 1904029441 row in set (0.09 sec)
使用安全更新模式(-安全更新)
对于初学者,一个有用的启动选项是--safe-updates
(或--i-am-a-dummy
,效果相同)。当您可能发出了UPDATE
or DELETE
语句但忘记了WHERE
指示要修改的行的子句时,安全更新模式很有用。通常,此类语句会更新或删除表中的所有行。使用--safe-updates
,您只能通过指定标识行或LIMIT
子句或两者的键值来修改行。这有助于防止事故发生。安全更新模式还限制SELECT
了产生(或估计产生)非常大的结果集的语句。
该--safe-updates
选项的原因的mysql当它连接到MySQL服务器,设置的会话值来执行下面的语句sql_safe_updates
,sql_select_limit
和max_join_size
系统变量:
SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
该SET
语句影响语句处理,如下所示:
如果
sql_safe_updates
原因UPDATE
和DELETE
语句未在WHERE
子句中指定关键约束,或未提供LIMIT
子句,或两者均未启用,则使它们产生错误。例如:UPDATE tbl_nameSET not_key_column=valWHERE key_column=val;UPDATE tbl_nameSET not_key_column=valLIMIT 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开始,安全更新模式还包含以下行为:
EXPLAIN
与UPDATE
和DELETE
语句一起使用不会产生安全更新错误。这样可以使用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 tVALUES (@ ); 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_QUOTES
SQL模式考虑在内。不管是否启用,它将以"
,'
和`
字符分隔的字符串视为相同ANSI_QUOTES
。在
/*!...*/
和/* +...*/
注释中,mysql客户端解析器解释简短的mysql命令。服务器解析器不会解释它们,因为这些命令在服务器端没有任何意义。如果期望的是MySQL的不解释注释中短格式命令,一个局部的解决方法是使用
--binary-mode
选项,这导致所有的MySQL除了被禁用命令\C
和\d
非交互模式(用于输入管道输送到的MySQL或装载使用source
命令)。