【MySQL5.7指南】第四章 MySQL程序

Chapter 4 MySQL Programs

本章简要概述了 Oracle Corporation 提供的 MySQL 命令行程序。 它还讨论了在运行这些程序时指定选项的一般语法。 大多数程序都有特定于其自身操作的选项,但选项语法对所有程序都是相似的。 最后,本章提供了对各个程序的更详细描述,包括它们识别的选项。

4.1 MySQL程序概述

MySQL 安装中有许多不同的程序。 本节简要概述了它们。 后面的部分提供了对每一个的更详细的描述,除了 NDB Cluster 程序。 每个程序的描述都指明了它的调用语法和它支持的选项。 第 21.5 节,“NDB Cluster 程序”,描述了特定于 NDB Cluster 的程序。

大多数 MySQL 发行版包括所有这些程序,除了那些特定于平台的程序。 (例如,Windows 上不使用服务器启动脚本。)例外是 RPM 发行版更专业。 服务器有一个 RPM,客户端程序有另一个 RPM,依此类推。 如果您似乎缺少一个或多个程序,请参阅第 2 章,安装和升级 MySQL,了解有关分发类型及其包含的内容的信息。 可能是您的发行版不包含所有程序,并且您需要安装额外的软件包。

每个 MySQL 程序都有许多不同的选项。 大多数程序都提供了一个 --help 选项,您可以使用它来获取程序不同选项的描述。 例如,尝试 mysql --help。

您可以通过在命令行或选项文件中指定选项来覆盖 MySQL 程序的默认选项值。 有关调用程序和指定程序选项的一般信息,请参见第 4.2 节,“使用 MySQL 程序”。

MySQL 服务器 mysqld 是在 MySQL 安装中完成大部分工作的主程序。 服务器附带几个相关脚本,可帮助您启动和停止服务器:

在 MySQL 安装或升级期间有几个程序执行设置操作:

连接到 MySQL 服务器的 MySQL 客户端程序:

MySQL 管理和应用程序:

MySQL 程序开发实用程序:

其他程序:

Oracle 公司还提供 MySQL Workbench GUI 工具,用于管理 MySQL 服务器和数据库,创建、执行和评估查询,以及从其他关系数据库管理系统迁移模式和数据以与 MySQL 一起使用。

使用 MySQL 客户端/服务器库与服务器通信的 MySQL 客户端程序使用以下环境变量。

环境变量含义
MYSQL_UNIX_PORT默认的 Unix 套接字文件; 用于连接到 localhost
MYSQL_TCP_PORT默认端口号; 用于 TCP/IP 连接
MYSQL_PWD默认的密码
MYSQL_DEBUG调试时的调试跟踪选项
TMPDIR创建临时表和文件的目录

有关 MySQL 程序使用的环境变量的完整列表,请参阅第 4.9 节,“环境变量”

使用 MYSQL_PWD 是不安全的。 请参见第 6.1.2.1 节“密码安全的最终用户指南”

4.2 使用MySQL程序

[4.2.1 调用 MySQL 程序](#4.2.1 调用 MySQL 程序)

[4.2.2 指定程序选项](#4.2.2 指定程序选项)

[4.2.3 连接服务器的命令选项](#4.2.3 连接服务器的命令选项)

[4.2.4 使用命令选项连接 MySQL 服务器](#4.2.4 使用命令选项连接 MySQL 服务器)

[4.2.5 连接传输协议](#4.2.5 连接传输协议)

[4.2.6 连接压缩控制](#4.2.6 连接压缩控制)

[4.2.7 设置环境变量](#4.2.7 设置环境变量)

4.2.1 调用 MySQL 程序

要从命令行(即从 shell 或命令提示符)调用 MySQL 程序,请输入程序名称,后跟任何选项或其他参数,以指示程序执行您希望它执行的操作。 以下命令显示了一些示例程序调用。 $> 代表你的命令解释器的提示符; 它不是您键入的内容的一部分。 您看到的特定提示取决于您的命令解释器。 典型的提示符是 $ 代表 sh、ksh 或 bash,% 代表 csh 或 tcsh,C:> 代表 Windows command.com 或 cmd.exe 命令解释器。

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

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

非选项参数(没有前导破折号的参数)为程序提供附加信息。 例如,mysql 程序将第一个非选项参数解释为数据库名称,因此命令 mysql --user=root test 表明您要使用 test 数据库。

后面描述单个程序的部分指示程序支持哪些选项并描述任何其他非选项参数的含义。

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

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

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

4.2.2 指定程序选项

[4.2.2.1 在命令行中使用选项](4.2.2.1 在命令行中使用选项)

[4.2.2.2 使用选项文件](4.2.2.2 使用选项文件)

[4.2.2.3 影响选项文件处理的命令行选项](4.2.2.3 影响选项文件处理的命令行选项)

[4.2.2.4 程序选项修饰符](4.2.2.4 程序选项修饰符)

[4.2.2.5 使用选项设置程序变量](4.2.2.5 使用选项设置程序变量)

[4.2.2.6 选项默认值、选项期望值和 = 符号](4.2.2.6 选项默认值、选项期望值和 = 符号)

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

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

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

mysql -h example.com -h localhost

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

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

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

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

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

4.2.2.1 在命令行中使用选项

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

  • 选项在命令名称之后给出。

  • 选项参数以一个破折号或两个破折号开头,具体取决于它是选项名称的短格式还是长格式。许多选项都有短格式和长格式。例如,-?and--help 是指示 MySQL 程序显示其帮助消息的选项的短格式和长格式。

  • 选项名称区分大小写。-v并且 -V都是合法的并且具有不同的含义。(它们是 --verbose--version 选项的相应缩写形式。)

  • 某些选项在选项名称之后采用一个值。例如,-h localhost--host=localhost将 MySQL 服务器主机指示给客户端程序。选项值告诉程序运行 MySQL 服务器的主机的名称。

  • 对于带值的长选项,用=符号分隔选项名称和值。对于带值的空头期权,期权值可以紧跟在期权字母之后,或者在:-hlocalhost和之间可以有一个空格,-h localhost它们是等价的。此规则的一个例外是指定 MySQL 密码的选项。此选项可以以长格式 as 或 as给出。在后一种情况下(没有给出密码值),程序会交互式地提示您输入密码。此选项可以以 –password=pass_val–password 的长格式给出。 在后一种情况下(没有给出密码值),程序会交互式地提示您输入密码。 密码选项也可以简写为 -ppass_val 或 -p。 但是,对于简写形式,如果给出密码值,则它必须跟在选项字母后面,中间没有空格:如果选项字母后面有空格,程序无法判断后面的参数是否应该是密码 价值或某种其他类型的论点。 因此,以下两个命令具有两种完全不同的含义:

    mysql -ptest
    mysql -p test
    

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

  • 在选项名称中,破折号 (-) 和下划线 (_) 可以互换使用。 例如, --skip-grant-tables--skip_grant_tables 是等效的。 (但是,前导破折号不能作为下划线给出。)

  • MySQL 服务器具有某些只能在启动时指定的命令选项,以及一组系统变量,其中一些可以在启动时、运行时或两者兼而有之时设置。 系统变量名称使用下划线而不是破折号,并且在运行时引用时(例如,使用 SET 或 SELECT 语句),必须使用下划线编写:

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

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

  • 对于采用数值的选项,可以给该值加上后缀 K、M 或 G(大写或小写),以表示 1024、10242 或 10243 的乘数。例如,以下命令告诉 mysqladmin ping 服务器 1024 次,每次 ping 之间休眠 10 秒:

    mysqladmin --count=1K --sleep=10 ping
    
  • 将文件名指定为选项值时,请避免使用 ~ shell 元字符。 它可能不会像您期望的那样被解释。

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

$> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+------------+
| VERSION()  |
+------------+
| 5.7.29     |
+------------+
+---------------------+
| NOW()               |
+---------------------+
| 2019-09-03 10:36:28 |
+---------------------+
$>

Note

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

要在语句中使用带引号的值,您必须转义内部引号,或者在语句中使用与用于引用语句本身的引号不同类型的引号。 命令处理器的功能决定了您是否可以使用单引号双引号以及转义引号字符的语法。 例如,如果您的命令处理器支持使用单引号或双引号引起来,您可以在语句周围使用双引号,并为语句中的任何引用值使用单引号。

4.2.2.2 使用选项文件

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

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

Note

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

许多选项文件是纯文本文件,使用任何文本编辑器创建。 例外是包含登录路径选项的 .mylogin.cnf 文件。 这是由 mysql_config_editor 程序创建的加密文件。 请参阅第 4.6.6 节,“mysql_config_editor - MySQL 配置实用程序”。 “login path”是一个仅允许某些选项的选项组:主机、用户、密码、端口和套接字。 客户端程序使用 –login-path 选项指定从 .mylogin.cnf 读取的登录路径。

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

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

Note

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

选项文件处理顺序

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

文件名目的
%WINDIR%\my.ini, %WINDIR%\my.cnf全局选项
C:\my.ini, C:\my.cnf全局选项
BASEDIR\my.ini, BASEDIR\my.cnf全局选项
defaults-extra-file用 --defaults-extra-file 指定的文件,如果有的话
%APPDATA%\MySQL\.mylogin.cnf登录路径选项(仅限客户端)

在上表中,%WINDIR% 表示 Windows 目录的位置。 这通常是 C:\WINDOWS。 使用以下命令根据 WINDIR 环境变量的值确定其确切位置:

C:\> echo %WINDIR%

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

C:\> echo %APPDATA%

BASEDIR 代表 MySQL 基本安装目录。 当使用 MySQL Installer 安装 MySQL 5.7 时,这通常是 C:\PROGRAMDIR\MySQL\MySQL 5.7 Server,其中 PROGRAMDIR 代表程序目录(通常是英文版 Windows 上的 Program Files),请参阅第 2.3.3 节,“MySQL Windows 安装程序”


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

Note

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

文件名目的
/etc/my.cnf全局选项
/etc/mysql/my.cnf全局选项
SYSCONFDIR/my.cnf全局选项
$MYSQL_HOME/my.cnf服务器特定选项(仅限服务器)
defaults-extra-file用 --defaults-extra-file 指定的文件,如果有的话
~/.my.cnf用户特定选项
~/.mylogin.cnfUser-specific login path options (clients only)

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

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

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

DATADIR 通常是 /usr/local/mysql/data,尽管这可能因平台或安装方法而异。 该值是编译 MySQL 时内置的数据目录位置,而不是 mysqld 启动时使用 --datadir 选项指定的位置。 在运行时使用 --datadir 不会影响服务器在处理任何选项之前查找它读取的选项文件的位置

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

选项文件语法

以下选项文件语法描述适用于您手动编辑的文件。 这不包括使用 mysql_config_editor 创建并加密的 .mylogin.cnf。

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

在选项文件中指定选项的语法类似于命令行语法(请参阅第 4.2.2.1 节,“在命令行上使用选项”)。 但是,在选项文件中,您省略了选项名称的前两个破折号,并且每行仅指定一个选项。 例如,命令行上的–quick 和–host=localhost 应在选项文件的不同行中指定为quick 和host=localhost。 要在选项文件中指定 --loose-opt_name 形式的选项,请将其写为loose-opt_name

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

  • #comment, ;comment

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

  • [group]

    group 是您要为其设置选项的程序或组的名称。 在组行之后,任何选项设置行都适用于命名组,直到选项文件结束或给出另一个组行。 选项组名称不区分大小写。

  • opt_name

    这相当于命令行上的 --opt_name。

  • opt_name=value

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

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

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

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

前面的规则意味着文字反斜杠可以作为 \ 给出,或者如果后面没有有效的转义序列字符,则作为 \。

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

选项文件值的转义规则特别适用于 Windows 路径名,它使用 \ 作为路径名分隔符。 如果 Windows 路径名中的分隔符后跟转义序列字符,则必须将其写为 \。 如果不是,它可以写成 \ 或 \。 或者,/ 可用于 Windows 路径名并被视为 \。 假设您要在选项文件中指定 C:\Program Files\MySQL\MySQL Server 5.7 的基本目录。 这可以通过多种方式完成。 一些例子:

basedir="C:\Program Files\MySQL\MySQL Server 5.7"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.7"
basedir="C:/Program Files/MySQL/MySQL Server 5.7"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7

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

[client] 选项组被 MySQL 发行版中提供的所有客户端程序读取(但不是 mysqld)。 要了解使用 C API 的第三方客户端程序如何使用选项文件,请参阅 mysql_options() 中的 C API 文档。

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

首先列出更一般的选项组,然后列出更具体的组。 例如,[client] 组更通用,因为它被所有客户端程序读取,而 [mysqldump] 组仅由 mysqldump 读取。 稍后指定的选项会覆盖之前指定的选项,因此将选项组按 [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=8M

[mysqldump]
quick

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

[client]
# The following password is sent to all standard MySQL clients
password="my password"

[mysql]
no-auto-rehash
connect_timeout=2

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

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

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

!include /home/mydir/myopt.cnf

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

!includedir /home/mydir

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

Note

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

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

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

!include /home/mydir/myopt.cnf

并假设 /home/mydir/myopt.cnf 看起来像这样:

[mysqladmin]
force

[mysqld]
key_buffer_size=16M

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

!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 是文件中的最后一行,请确保在末尾附加换行符,否则该行将被忽略。

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

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

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

  • [--defaults-extra-file=file_name](https://dev.mysql.com/doc/refman/5.7/en/option-file-options.html#option_general_defaults-extra-file)

    在全局选项文件之后但(在 Unix 上)在用户选项文件之前和(在所有平台上)在登录路径文件之前读取此选项文件。 (有关使用选项文件的顺序的信息,请参阅第 4.2.2.2 节,“使用选项文件”。)如果文件不存在或无法访问,则会发生错误。 如果 file_name 不是绝对路径名,则相对于当前目录进行解释。

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

  • [--defaults-file=file_name](https://dev.mysql.com/doc/refman/5.7/en/option-file-options.html#option_general_defaults-file)

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

    例外:即使使用 –defaults-file,客户端程序也会读取 .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 程序。 请参阅第 4.6.6 节,“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.cnf,请使用 mysql_config_editor 实用程序。 请参阅第 4.6.6 节,“mysql_config_editor - MySQL 配置实用程序”

  • --print-defaults

    打印程序名称和它从选项文件中获得的所有选项。 密码值被屏蔽。

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

4.2.2.4 程序选项修饰符

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

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

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

--disable--skip 前缀和 =0 后缀都具有相同的效果:它们关闭选项。

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

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

对于布尔选项(不区分大小写),也可以识别值 ON、TRUE、OFF 和 FALSE。

如果一个选项以 --loose 为前缀,如果程序无法识别该选项,它不会退出并返回错误,而只会发出警告:

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

当您在同一台机器上运行来自多个 MySQL 安装的程序并在选项文件中列出选项时, --loose 前缀可能很有用。 可以使用 --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
4.2.2.5 使用选项设置程序变量

许多 MySQL 程序都有可以在运行时使用 SET 语句设置的内部变量。 请参阅第 13.7.4.1 节,“变量赋值的 SET 语法”第 5.1.8 节,“使用系统变量”

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

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

第一个命令以字节为单位指定值。 第二个指定以兆字节为单位的值。 对于采用数值的变量,该值可以用后缀 K、M 或 G(大写或小写)来表示乘数 1024、10242 或 10243。(例如,当用于设置 max_allowed_packet 时, 后缀表示单位为千字节、兆字节或千兆字节。)

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

[mysql]
max_allowed_packet=16777216

或者:

[mysql]
max_allowed_packet=16M

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

[mysqld]
key_buffer_size=512M

[mysqld]
key-buffer-size=512M

在旧版本的 MySQL 中,程序选项可以完整指定或作为任何明确的前缀指定。 例如,--compress 选项可以作为--compr 提供给mysqldump,但不能作为--comp,因为后者不明确。 在 MySQL 5.7 中,不再支持选项前缀; 只接受完整的选项。 这是因为当为程序实现新选项时,前缀可能会导致问题,并且当前明确的前缀将来可能会变得不明确。 这种变化的一些影响:

  • 现在必须将 --key-buffer 选项指定为 --key-buffer-size
  • --skip-grant 选项现在必须指定为 --skip-grant-tables

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

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

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

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
4.2.2.6 选项默认值、选项期望值和 = 符号

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

mysql --host=tonfisk --user=jon

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

mysql --host tonfisk --user jon

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

由于这种行为,当没有为期望值的选项提供值时,偶尔会出现问题。 考虑以下示例,其中用户以 jon 的身份连接到在主机 tonfisk 上运行的 MySQL 服务器:

$> 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: 5.7.37 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@%          |
+----------------+
1 row in set (0.00 sec)

省略这些选项之一的所需值会产生错误,例如此处显示的错误:

$> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument

在这种情况下,mysql 无法找到 --user 选项后面的值,因为在命令行后面没有任何内容。 但是,如果您省略了不是最后一个使用选项的选项的值,则会得到一个您可能没有预料到的不同错误:

$> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

因为mysql假定命令行中--host后面的任何字符串都是主机名,--host --user被解释为--host=--user,客户端尝试连接到运行在主机上的MySQL服务器 命名为“–user”。

具有默认值的选项在赋值时总是需要等号; 不这样做会导致错误。 例如,MySQL 服务器 --log-error 选项具有默认值 host_name.err,其中 host_name 是运行 MySQL 的主机的名称。 假设您在主机名为“tonfisk”的计算机上运行 MySQL,并考虑以下 mysqld_safe 调用:

$> mysqld_safe &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>

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

$> mysqld_safe --log-error &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>

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

$> mysqld_safe --log-error my-errors &
[1] 31357
$> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

[1]+  Done                    ./mysqld_safe --log-error my-errors

服务器尝试使用 /usr/local/mysql/var/tonfisk.err 作为错误日志开始,但随后关闭。 检查此文件的最后几行显示原因:

$> tail /usr/local/mysql/var/tonfisk.err
2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24T15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete

因为 --log-error 选项提供默认值,所以您必须使用等号为其分配不同的值,如下所示:

$> mysqld_safe --log-error=my-errors &
[1] 31437
$> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

$>

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

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

[mysql]

host
user

当 mysql 客户端读取此文件时,这些条目被解析为 --host --user--host=--user,结果如下所示:

$> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

但是,在选项文件中,不假定使用等号。 假设 my.cnf 文件如下所示:

[mysql]

user jon

在这种情况下尝试启动 mysql 会导致不同的错误:

$> mysql
mysql: unknown option '--user jon'

如果您在选项文件中写入 host tonfisk 而不是 host=tonfisk,则会发生类似的错误。 相反,您必须使用等号

[mysql]

user=jon

现在登录尝试成功:

$> mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.37 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)

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

$> mysql --user jon --host tonfisk
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.37 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)

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

4.2.3 连接服务器的命令选项

本节描述大多数 MySQL 客户端程序支持的选项,这些选项控制客户端程序如何建立与服务器的连接以及连接是否加密。 这些选项可以在命令行或选项文件中给出。

连接建立的命令选项

本节介绍控制客户端程序如何与服务器建立连接的选项。 有关显示如何使用它们的其他信息和示例,请参阅第 4.2.4 节,“使用命令选项连接到 MySQL 服务器”

连接建立选项摘要

选项名称描述已弃用
–default-auth要使用的身份验证插件
–hostMySQL服务器所在的主机
–password连接服务器时使用的密码
–pipe使用命名管道连接到服务器(仅限 Windows)
–plugin-dir插件安装目录
–port用于连接的 TCP/IP 端口号
–protocol要使用的传输协议
–secure-auth不要以旧(4.1 之前)格式向服务器发送密码
–shared-memory-base-name共享内存连接的共享内存名称(仅限 Windows)
–socket要使用的 Unix 套接字文件或 Windows 命名管道
–user连接到服务器时使用的 MySQL 用户名
  • –default-auth=plugin

    关于使用哪个客户端身份验证插件的提示。 请参阅第 6.2.13 节,“可插入验证”

  • –host=host_name, -h host_name

    运行 MySQL 服务器的主机。 该值可以是主机名、IPv4 地址或 IPv6 地址。 默认值为本地主机。

  • –password[=pass_val], -p[pass_val]

    用于连接服务器的 MySQL 帐户的密码。 密码值是可选的。 如果没有给出,客户端程序会提示输入一个。 如果给定,则 –password= 或 -p 与其后面的密码之间不能有空格。 如果未指定密码选项,则默认为不发送密码。

    在命令行上指定密码应该被认为是不安全的。 为避免在命令行上提供密码,请使用选项文件。 请参见第 6.1.2.1 节“密码安全的最终用户指南”

    要明确指定没有密码并且客户端程序不应提示输入密码,请使用 –skip-password 选项。

  • –pipe, -W

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

  • –plugin-dir=dir_name

    查找插件的目录。 如果 --default-auth 选项用于指定身份验证插件但客户端程序找不到它,请指定此选项。 请参阅第 6.2.13 节,“可插入验证”

  • –port=port_num, -P port_num

    对于 TCP/IP 连接,要使用的端口号。 默认端口号为 3306。

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

    此选项明确指定用于连接到服务器的传输协议。 当其他连接参数通常导致使用您想要的协议之外的协议时,它很有用。 例如,Unix 上到 localhost 的连接默认使用 Unix 套接字文件:

    mysql --host=localhost
    

    要强制使用 TCP/IP 传输,请指定 --protocol 选项:

    mysql --host=localhost --protocol=TCP
    

    下表显示了允许的 --protocol 选项值,并指出了每个值的适用平台。 这些值不区分大小写。

    协议值使用的通信协议适用平台
    TCPTCP/IP 传输到本地或远程服务器所有
    SOCKETUnix 套接字文件传输到本地服务器Unix和类Unix系统
    PIPE命名管道传输到本地服务器Windows
    MEMORY共享内存传输到本地服务器Windows

    另见第 4.2.5 节,“连接传输协议”

  • –secure-auth

    不要以旧(4.1 之前)格式向服务器发送密码。 这会阻止连接,但使用较新密码格式的服务器除外。

    从 MySQL 5.7.5 开始,此选项已弃用; 期望它在未来的 MySQL 版本中被删除。 它始终处于启用状态,但尝试禁用它(–skip-secure-auth,–secure-auth=0)会产生错误。 在 MySQL 5.7.5 之前,此选项默认启用,但可以禁用。

    Note

    使用 4.1 之前的哈希方法的密码不如使用本机密码哈希方法的密码安全,应该避免使用。 不推荐使用 4.1 之前的密码,并且在 MySQL 5.7.5 中删除了对它们的支持。 有关帐户升级说明,请参阅第 6.4.1.3 节,“从 Pre-4.1 密码散列和 mysql_old_password 插件迁移”

  • –shared-memory-base-name=name

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

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

  • –socket=path, -S path

    在 Unix 上,用于使用命名管道连接到本地服务器的 Unix 套接字文件的名称。 默认的 Unix 套接字文件名是 /tmp/mysql.sock。

    在 Windows 上,用于连接到本地服务器的命名管道的名称。 默认的 Windows 管道名称是 MySQL。 管道名称不区分大小写

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

  • –user=user_name, -u user_name

    用于连接到服务器的 MySQL 帐户的用户名。 默认用户名是 Windows 上的 ODBC 或 Unix 上的 Unix 登录名。

加密连接的命令选项

本节介绍客户端程序的选项,这些选项指定是否使用与服务器的加密连接、证书和密钥文件的名称以及与加密连接支持相关的其他参数。 有关建议使用的示例以及如何检查连接是否已加密,请参阅第 6.3.1 节,“配置 MySQL 以使用加密连接”

Note

这些选项仅对使用受加密的传输协议的连接有效; 即 TCP/IP 和 Unix 套接字文件连接。 请参阅第 4.2.5 节,“连接传输协议”

有关使用来自 MySQL C API 的加密连接的信息,请参阅对加密连接的支持

连接加密选项摘要

选项名称描述引入
–get-server-public-key从服务器请求 RSA 公钥5.7.23
–server-public-key-path包含 RSA 公钥的文件的路径名
–skip-ssl禁用连接加密
–ssl启用连接加密
–ssl-ca包含受信任 SSL 证书颁发机构列表的文件
–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
–ssl-cert包含 X.509 证书的文件
–ssl-cipher连接加密的允许密码
–ssl-crl包含证书吊销列表的文件
–ssl-crlpath包含证书吊销列表文件的目录
–ssl-key包含 X.509 密钥的文件
–ssl-mode连接到服务器的所需安全状态5.7.11
–ssl-verify-server-cert根据服务器证书公用名身份验证主机名
–tls-version加密连接的允许 TLS 协议5.7.10
  • --get-server-public-key

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

    如果给出并指定一个有效的公钥文件,它优先于 . --server-public-key-path=file_name--get-server-public-key --get-server-public-key --get-server-public-key --get-server-public-key

    有关 caching_sha2_password插件的信息,请参阅 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

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

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

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

    有关sha256_passwordcaching_sha2_password插件的信息,请参阅 第 6.4.1.5 节,“SHA-256 可插入身份验证”第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

  • --ssl, --skip-ssl

    Note

    从 MySQL 5.7.11 开始不推荐使用client-side--ssl 选项,并在 MySQL 8.0 中删除。对于客户端程序,请改用 --ssl-mode

    不推荐使用 服务器端--ssl 选项。

    默认情况下,如果服务器支持加密连接,MySQL 客户端程序会尝试建立加密连接,可以通过 --ssl 选项进行进一步控制:客户端 --ssl 选项的工作方式如下:

    • 在没有 --ssl 选项的情况下,客户端会尝试使用加密进行连接,如果无法建立加密连接,则会退回到未加密的连接。

    • 显式 --ssl 选项或同义词 (–ssl=1, --enable-ssl) 的存在是规定性的:客户端需要加密连接,如果无法建立连接,则失败。

    • 使用 --ssl=0 选项或同义词(–skip-ssl、–disable-ssl),客户端使用未加密的连接。

    要要求 MySQL 帐户使用加密连接,请使用 CREATE USER 创建带有 REQUIRE SSL 子句的帐户,或使用 ALTER USER 为现有帐户添加 REQUIRE SSL 子句。这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。

    REQUIRE 子句允许其他与加密相关的选项,这些选项可用于执行比 REQUIRE SSL 更严格的安全要求。有关使用使用各种 REQUIRE 选项配置的帐户进行连接的客户端可以或必须指定哪些命令选项的其他详细信息,请参阅 CREATE USER SSL/TLS 选项。

    要为加密连接指定其他参数,请考虑至少在服务器端设置 ssl_certssl_key 系统变量,在客户端设置 --ssl-ca 选项。请参阅第 6.3.1 节,“配置 MySQL 以使用加密连接”,其中还描述了证书和密钥文件自动生成和自动发现的服务器功能。

  • --ssl-ca=file_name

    PEM 格式的证书颁发机构 (CA) 证书文件的路径名。 该文件包含受信任的 SSL 证书颁发机构的列表。

    要告诉客户端在与服务器建立加密连接时不要验证服务器证书,请既不指定 –ssl-ca 也不指定 –ssl-capath。 服务器仍然根据为客户端帐户建立的任何适用要求验证客户端,并且它仍然使用在服务器端指定的任何 ssl_ca 或 ssl_capath 系统变量值。

    要为服务器指定 CA 文件,请设置 ssl_ca 系统变量。

  • --ssl-capath=dir_name

    包含 PEM 格式的受信任 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。 对此功能的支持取决于用于编译 MySQL 的 SSL 库; 请参见第 6.3.4 节,“SSL 库相关功能”

    要告诉客户端在与服务器建立加密连接时不要验证服务器证书,请既不指定 --ssl-ca 也不指定 --ssl-capath。 服务器仍然根据为客户端帐户建立的任何适用要求验证客户端,并且它仍然使用在服务器端指定的任何 ssl_ca 或 ssl_capath 系统变量值。

    要为服务器指定 CA 目录,请设置 ssl_capath 系统变量。

  • --ssl-cert=file_name

    PEM 格式的客户端 SSL 公钥证书文件的路径名。

    要指定服务器 SSL 公钥证书文件,请设置 ssl_cert 系统变量。

  • --ssl-cipher=cipher_list

    连接加密的允许密码列表。 如果列表中不支持任何密码,则加密连接不起作用。

    为了获得最大的可移植性,cipher_list 应该是一个或多个密码名称的列表,用冒号分隔。 OpenSSL 和 yaSSL 都可以理解这种格式。 例子:

    --ssl-cipher=AES128-SHA
    --ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA
    

    OpenSSL 支持更灵活的语法来指定密码,如 https://www.openssl.org/docs/manmaster/man1/ciphers.html 上的 OpenSSL 文档中所述。 yaSSL 没有,因此对于使用 yaSSL 编译的 MySQL 发行版,尝试使用该扩展语法会失败。

    有关 MySQL 支持哪些加密密码的信息,请参阅第 6.3.2 节,“加密连接 TLS 协议和密码”

    要为服务器指定加密密码,请设置 ssl_cipher 系统变量。

  • --ssl-crl=file_name

    包含 PEM 格式的证书吊销列表的文件的路径名。 对撤销列表功能的支持取决于用于编译 MySQL 的 SSL 库。 请参见第 6.3.4 节,“SSL 库相关功能”

    如果既没有给出 –ssl-crl 也没有给出 –ssl-crlpath,即使 CA 路径包含证书撤销列表,也不执行 CRL 检查。

    要为服务器指定撤销列表文件,请设置 ssl_crl 系统变量。

  • --ssl-crlpath=dir_name

    包含 PEM 格式的证书吊销列表文件的目录的路径名。 对撤销列表功能的支持取决于用于编译 MySQL 的 SSL 库。 请参见第 6.3.4 节,“SSL 库相关功能”

    如果既没有给出 --ssl-crl 也没有给出 --ssl-crlpath,即使 CA 路径包含证书撤销列表,也不执行 CRL 检查。

    要为服务器指定吊销列表目录,请设置 ssl_crlpath 系统变量。

  • --ssl-key=file_name

    PEM 格式的客户端 SSL 私钥文件的路径名。 为提高安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

    如果密钥文件受密码保护,客户端程序会提示用户输入密码。 密码必须以交互方式提供; 它不能存储在文件中。 如果密码不正确,程序会继续运行,就好像它无法读取密钥一样。

    要指定服务器 SSL 私钥文件,请设置 ssl_key 系统变量。

  • --ssl-mode=mode

    此选项指定与服务器的连接的所需安全状态。 这些模式值是允许的,按照严格程度递增的顺序:

    • DISABLED:建立未加密的连接。 这就像传统的 --ssl=0 选项或其同义词(–skip-ssl、–disable-ssl)。

    • PREFERRED:如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接,则回退到未加密连接。 如果未指定 --ssl-mode,则这是默认设置。

      通过 Unix 套接字文件的连接不使用 PREFERRED 模式加密。 要对 Unix 套接字文件连接强制加密,请使用 REQUIRED 或更严格的模式。 (但是,默认情况下,套接字文件传输是安全的,因此加密套接字文件连接会使其不再安全并增加 CPU 负载。)

    • REQUIRED:如果服务器支持加密连接,则建立加密连接。 如果无法建立加密连接,则连接尝试会失败。

    • VERIFY_CA:与 REQUIRED 类似,但另外根据配置的 CA 证书验证服务器证书颁发机构 (CA) 证书。如果未找到有效的匹配 CA 证书,则连接尝试失败。

    • VERIFY_IDENTITY:与 VERIFY_CA 类似,但另外通过检查客户端用于连接服务器的主机名与服务器发送给客户端的证书中的身份来执行主机名身份验证:

      • 从 MySQL 5.7.23 开始,如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查它用于连接的主机名是否与服务器证书中的主题备用名称值或公用名值匹配。 主机名身份验证也适用于使用通配符指定公用名的证书。
      • 否则,客户端会检查它用于连接的主机名是否与服务器证书中的公用名值匹配。

      如果不匹配,则连接失败。 对于加密连接,此选项有助于防止中间人攻击。 这就像传统的 --ssl-verify-server-cert 选项。

      Note

      使用 VERIFY_IDENTITY 进行主机名身份验证不适用于由服务器自动创建或使用 mysql_ssl_rsa_setup 手动创建的自签名证书(请参阅第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。 此类自签名证书不包含服务器名称作为 Common Name 值。

    –ssl-mode 选项与 CA 证书选项交互,如下所示:

    • 如果–ssl-mode 没有明确设置,使用–ssl-ca–ssl-capath 意味着–ssl-mode=VERIFY_CA
    • 对于 VERIFY_CAVERIFY_IDENTITY--ssl-mode 值,还需要 --ssl-ca--ssl-capath,以提供与服务器使用的证书匹配的 CA 证书。
    • 带有除 VERIFY_CAVERIFY_IDENTITY 以外的值的显式 --ssl-mode 选项与显式 --ssl-ca--ssl-capath 选项一起生成警告,即尽管 CA 不执行服务器证书验证 证书选项被指定。

    MySQL 5.7.11 中添加了 --ssl-mode 选项。

    要要求 MySQL 帐户使用加密连接,请使用 CREATE USER 创建带有 REQUIRE SSL 子句的帐户,或对现有帐户使用 ALTER USER 添加 REQUIRE SSL 子句。 这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。

    REQUIRE 子句允许其他与加密相关的选项,这些选项可用于执行比 REQUIRE SSL 更严格的安全要求。 有关使用使用各种 REQUIRE 选项配置的帐户进行连接的客户端可能或必须指定哪些命令选项的其他详细信息,请参阅 CREATE USER SSL/TLS 选项。

  • --ssl-verify-server-cert

    Note

    –ssl-verify-server-cert 选项自 MySQL 5.7.11 起已弃用,并在 MySQL 8.0 中删除。 请改用 --ssl-mode=VERIFY_IDENTITY。

    此选项使客户端通过检查客户端用于连接服务器的主机名与服务器发送给客户端的证书中的身份来执行主机名身份验证:

    • 从 MySQL 5.7.23 开始,如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查它用于连接的主机名是否与服务器证书中的主题备用名称值或公用名值匹配。

    • 否则,客户端会检查它用于连接的主机名是否与服务器证书中的公用名值匹配。

    如果不匹配,则连接失败。 对于加密连接,此选项有助于防止中间人攻击。 默认情况下禁用主机名身份验证。

    Note

    主机名身份验证不适用于服务器自动创建的自签名证书,或使用 mysql_ssl_rsa_setup 手动创建的证书(请参阅第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。 此类自签名证书不包含服务器名称作为 Common Name 值。

    主机名身份验证也不适用于使用通配符指定公用名的证书,因为该名称会逐字与服务器名称进行比较。

  • --tls-version=protocol_list

    此选项指定客户端允许加密连接的 TLS 协议。 该值是一个或多个以逗号分隔的协议版本的列表。 例如:

    mysql --tls-version="TLSv1.1,TLSv1.2"
    

    可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。 应选择允许的协议,以免在列表中留下“漏洞”。 例如,这些值没有孔:

    --tls-version="TLSv1,TLSv1.1,TLSv1.2"
    --tls-version="TLSv1.1,TLSv1.2"
    --tls-version="TLSv1.2"
    

    此值确实有漏洞,不应使用:

    --tls-version="TLSv1,TLSv1.2"
    

    有关详细信息,请参阅第 6.3.2 节,“加密连接 TLS 协议和密码”

    此选项是在 MySQL 5.7.10 中添加的。

    要指定服务器允许的 TLS 协议,请设置 tls_version 系统变量。

4.2.4 使用命令选项连接 MySQL 服务器

本节描述了使用命令行选项来指定如何为 mysql 或 mysqldump 等客户端建立与 MySQL 服务器的连接。 有关无法连接的更多信息,请参阅第 6.2.17 节,“解决连接到 MySQL 的问题”

客户端程序要连接到 MySQL 服务器,它必须使用正确的连接参数,例如运行服务器的主机名称以及 MySQL 帐户的用户名和密码。 每个连接参数都有一个默认值,但您可以根据需要使用在命令行或选项文件中指定的程序选项覆盖默认值。

这里的示例使用 mysql 客户端程序,但原理适用于其他客户端,例如 mysqldump、mysqladmin 或 mysqlshow。

此命令在不指定任何显式连接参数的情况下调用 mysql:

mysql

因为没有参数选项,所以应用默认值:

  • 默认主机名是 localhost。 在 Unix 上,这有一个特殊的含义,如下所述。

  • 默认用户名是 Windows 上的 ODBC 或 Unix 上的 Unix 登录名。

  • 因为既没有给出 --password 也没有给出 -p ,所以没有发送密码。

  • 对于 mysql,第一个非选项参数被视为默认数据库的名称。 因为没有这样的参数,mysql不选择默认数据库。

要明确指定主机名和用户名以及密码,请在命令行上提供适当的选项。 要选择默认数据库,请添加 database-name 参数。 例子:

mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb

对于密码选项,密码值是可选的:

  • 如果您使用 --password 或 -p 选项并指定密码值,则 --password= 或 -p 与其后的密码之间不得有空格。

  • 如果您使用 --password 或 -p 但未指定密码值,客户端程序会提示您输入密码。 输入密码时不会显示密码。 这比在命令行上提供密码更安全,这可能使您系统上的其他用户可以通过执行诸如 ps 之类的命令来查看密码行。 请参见第 6.1.2.1 节“密码安全的最终用户指南”

  • 要明确指定没有密码并且客户端程序不应提示输入密码,请使用 --skip-password 选项。

如前所述,在命令行中包含密码值存在安全风险。 为避免此风险,请指定 --password 或 -p 选项,但不包含任何以下密码值:

mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb

当 --password 或 -p 选项没有给出密码值时,客户端程序会打印一个提示并等待您输入密码。 (在这些示例中,mydb 不被解释为密码,因为它与前面的密码选项用空格隔开。)

在某些系统上,MySQL 用于提示输入密码的库例程自动将密码限制为八个字符。 该限制是系统库的属性,而不是 MySQL。 在内部,MySQL 对密码的长度没有任何限制。 要解决受它影响的系统的限制,请在选项文件中指定您的密码(请参阅第 4.2.2.2 节,“使用选项文件”)。 另一种解决方法是将您的 MySQL 密码更改为包含八个或更少字符的值,但缺点是较短的密码往往不太安全。

客户端程序确定要建立的连接类型如下:

  • 如果未指定主机或者是 localhost,则连接到本地主机:
    • 在 Windows 上,如果服务器启动时启用了 shared_memory 系统变量以支持共享内存连接,则客户端使用共享内存进行连接。
    • 在 Unix 上,MySQL 程序对主机名 localhost 进行特殊处理,与其他基于网络的程序相比,这种方式可能与您所期望的不同:客户端使用 Unix 套接字文件进行连接。 –socket 选项或 MYSQL_UNIX_PORT 环境变量可用于指定套接字名称。
  • 在 Windows 上,如果主机是 . (句点),或 TCP/IP 未启用且 --socket 未指定或主机为空,如果服务器启动时启用了 named_pipe 系统变量以支持命名管道连接,则客户端使用命名管道连接。 如果不支持命名管道连接,或者进行连接的用户不是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员,则会发生错误。
  • 否则,连接使用 TCP/IP。

–protocol 选项使您能够使用特定的传输协议,即使其他选项通常会导致使用不同的协议。 也就是说, --protocol 明确指定传输协议并覆盖前面的规则,即使对于 localhost 也是如此。

仅使用或检查与所选传输协议相关的连接选项。 其他连接选项将被忽略。 例如,在 Unix 上使用 --host=localhost,客户端会尝试使用 Unix 套接字文件连接到本地服务器,即使给出了 --port 或 -P 选项来指定 TCP/IP 端口号。

要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host 或 -h 指定主机名值 127.0.0.1(而不是 localhost),或者本地服务器的 IP 地址或名称。 您还可以使用 --protocol=TCP 选项显式指定传输协议,即使对于 localhost 也是如此。 例子:

mysql --host=127.0.0.1
mysql --protocol=TCP

如果服务器配置为接受 IPv6 连接,则客户端可以使用 --host=::1 通过 IPv6 连接到本地服务器。 请参见第 5.1.12 节,“IPv6 支持”

在 Windows 上,要强制 MySQL 客户端使用命名管道连接,请指定 --pipe 或 --protocol=PIPE 选项,或指定 . (句点)作为主机名。 如果服务器未在启用 named_pipe 系统变量以支持命名管道连接的情况下启动,或者如果建立连接的用户不是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员,则会发生错误。 如果您不想使用默认管道名称,请使用 --socket 选项指定管道名称。

与远程服务器的连接使用 TCP/IP。 此命令使用默认端口号 (3306) 连接到在 remote.example.com 上运行的服务器:

mysql --host=remote.example.com

要明确指定端口号,请使用 --port 或 -P 选项:

mysql --host=remote.example.com --port=13306

您也可以指定连接到本地服务器的端口号。 但是,如前所述,在 Unix 上与 localhost 的连接默认使用套接字文件,因此除非您如前所述强制 TCP/IP 连接,否则任何指定端口号的选项都将被忽略。

对于这个命令,程序在 Unix 上使用一个套接字文件并且 --port 选项被忽略:

mysql --port=13306 --host=localhost

要使用端口号,请强制 TCP/IP 连接。 例如,以下列任一方式调用程序:

mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP

有关控制客户端程序如何与服务器建立连接的选项的其他信息,请参阅第 4.2.3 节,“连接到服务器的命令选项”。

可以在每次调用客户端程序时指定连接参数而无需在命令行中输入它们:

4.2.5 连接传输协议

对于使用 MySQL 客户端库的程序(例如 mysql 和 mysqldump),MySQL 支持基于多种传输协议与服务器的连接:TCP/IP、Unix 套接字文件、命名管道和共享内存。 本节介绍如何选择这些协议,以及它们的相似之处和不同之处。

传输协议选择

对于给定的连接,如果未明确指定传输协议,则将其隐式确定。 例如,与 localhost 的连接会导致 Unix 和类 Unix 系统上的套接字文件连接,否则会导致与 127.0.0.1 的 TCP/IP 连接。 有关其他信息,请参阅第 4.2.4 节,“使用命令选项连接到 MySQL 服务器”

要明确指定协议,请使用 --protocol 命令选项。 下表显示了 --protocol 的允许值,并指出了每个值的适用平台。 这些值不区分大小写。

协议值使用的传输协议适用平台
TCPTCP/IP所有
SOCKETUnix 套接字文件Unix和类Unix系统
PIPE命名管道Windows
MEMORY共享内存Windows
本地和远程连接的传输支持

TCP/IP 传输支持与本地或远程 MySQL 服务器的连接。

套接字文件、命名管道和共享内存传输仅支持与本地 MySQL 服务器的连接。 (命名管道传输确实允许远程连接,但这个功能在 MySQL 中没有实现。)

本地主机的解释

如果未明确指定传输协议,则 localhost 解释如下:

  • 在 Unix 和类 Unix 系统上,与 localhost 的连接会导致套接字文件连接。

  • 否则,与 localhost 的连接会导致与 127.0.0.1 的 TCP/IP 连接。

如果明确指定了传输协议,则 localhost 将根据该协议进行解释。 例如,使用 --protocol=TCP,到 localhost 的连接会在所有平台上产生到 127.0.0.1 的 TCP/IP 连接。

加密和安全特性

TCP/IP 和套接字文件传输受 TLS/SSL 加密,使用加密连接的命令选项中描述的选项。 命名管道和共享内存传输不受 TLS/SSL 加密的约束。

如果通过默认安全的传输协议建立连接,则默认情况下连接是安全的。 否则,对于受 TLS/SSL 加密的协议,可以使用加密使连接变得安全:

  • 默认情况下 TCP/IP 连接不安全,但可以对其进行加密以使其安全。
  • 默认情况下,套接字文件连接是安全的。 它们也可以加密,但加密套接字文件连接会使其不再安全并增加 CPU 负载。
  • 默认情况下,命名管道连接不安全,并且不受加密以使其安全。 但是,named_pipe_full_access_group 系统变量可用于控制允许哪些 MySQL 用户使用命名管道连接。
  • 默认情况下,共享内存连接是安全的。

如果启用了 require_secure_transport 系统变量,则服务器只允许使用某种形式的安全传输的连接。 根据前面的说明,使用使用 TLS/SSL 加密的 TCP/IP、套接字文件或共享内存的连接是安全连接。 未使用 TLS/SSL 加密的 TCP/IP 连接和命名管道连接是不安全的。

另请参阅将加密连接配置为强制

连接压缩

所有传输协议都需要对客户端和服务器之间的流量进行压缩。 如果对给定连接同时使用压缩和加密,则在加密之前进行压缩。 有关详细信息,请参阅第 4.2.6 节,“连接压缩控制”

4.2.6 连接压缩控制

与服务器的连接可以对客户端和服务器之间的流量使用压缩,以减少通过连接发送的字节数。默认情况下,连接是未压缩的,但如果服务器和客户端都支持压缩,则可以压缩。

压缩连接源自客户端,但会影响客户端和服务器端的 CPU 负载,因为双方都执行压缩和解压缩操作。因为启用压缩会降低性能,所以它的好处主要出现在网络带宽低、网络传输时间占压缩和解压缩操作的成本以及结果集很大的情况下。

压缩控制适用于客户端程序和参与源/副本复制的服务器到服务器的连接。压缩控制不适用于组复制连接、X 协议连接或 FEDERATED 表的连接。

这些配置参数可用于控制连接压缩:

  • 客户端程序支持 –compress 命令行选项来指定使用压缩来连接到服务器。
  • 对于使用 MySQL C API 的程序,启用 mysql_options() 函数的 MYSQL_OPT_COMPRESS 选项指定使用压缩来连接到服务器。
  • 对于源/副本复制,启用 slave_compressed_protocol 系统变量指定对到源的副本连接使用压缩。

在每种情况下,当指定使用压缩时,如果双方都支持,则连接使用 zlib 压缩算法,否则回退到未压缩的连接。

4.2.7 设置环境变量

环境变量可以在命令提示符处设置以影响命令处理器的当前调用,或者永久设置以影响未来的调用。 要永久设置变量,您可以在启动文件中设置它或使用系统为此目的提供的接口。 有关特定详细信息,请参阅命令解释器的文档。 第 4.9 节,“环境变量”,列出了所有影响 MySQL 程序操作的环境变量。

要为环境变量指定值,请使用适合您的命令处理器的语法。 例如,在 Windows 上,您可以设置 USER 变量来指定您的 MySQL 帐户名称。 为此,请使用以下语法:

SET USER=your_name

Unix 上的语法取决于你的 shell。 假设您要使用 MYSQL_TCP_PORT 变量指定 TCP/IP 端口号。 典型的语法(如 sh、ksh、bash、zsh 等)如下:

MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT

第一个命令设置变量,然后 export 命令将变量导出到 shell 环境,以便 MySQL 和其他进程可以访问它的值。

对于 csh 和 tcsh,使用 setenv 使 shell 变量可用于环境:

setenv MYSQL_TCP_PORT 3306

设置环境变量的命令可以在您的命令提示符下执行以立即生效,但设置只会持续到您注销。 要使设置在您每次登录时生效,请使用系统提供的界面或将适当的命令或命令放入命令解释器每次启动时读取的启动文件中。

在 Windows 上,您可以使用系统控制面板(在高级下)设置环境变量。

在 Unix 上,典型的 shell 启动文件是 .bashrc.bash_profile 用于 bash,或 .tcshrc 用于 tcsh。

假设您的 MySQL 程序安装在 /usr/local/mysql/bin 中,并且您希望轻松调用这些程序。 为此,请将 PATH 环境变量的值设置为包含该目录。 例如,如果您的 shell 是 bash,则将以下行添加到您的 .bashrc 文件中:

PATH=${PATH}:/usr/local/mysql/bin

bash 对登录和非登录 shell 使用不同的启动文件,因此您可能希望将设置添加到登录 shell 的 .bashrc 和非登录 shell 的 .bash_profile 以确保无论如何都设置了 PATH 。

如果您的 shell 是 tcsh,则将以下行添加到您的 .tcshrc 文件中:

setenv PATH ${PATH}:/usr/local/mysql/bin

如果您的主目录中不存在相应的启动文件,请使用文本编辑器创建它。

修改 PATH 设置后,在 Windows 上打开一个新的控制台窗口或在 Unix 上再次登录,以使设置生效。

4.3 服务器和服务器启动程序

[4.3.1 mysqld——MySQL 服务器](#4.3.1 mysqld——MySQL 服务器)

[4.3.2 mysqld_safe——MySQL服务器启动脚本](#4.3.2 mysqld_safe——MySQL服务器启动脚本)

[4.3.3 mysql.server——MySQL服务器启动脚本](#4.3.3 mysql.server——MySQL服务器启动脚本)

[4.3.4 mysqld_multi——管理多个 MySQL 服务器](#4.3.4 mysqld_multi——管理多个 MySQL 服务器)

本节介绍 mysqld、MySQL 服务器和用于启动服务器的几个程序。

4.3.1 mysqld——MySQL 服务器

mysqld,也称为 MySQL 服务器,是一个单一的多线程程序,它在 MySQL 安装中完成大部分工作。 它不会产生额外的进程。 MySQL 服务器管理对包含数据库和表的 MySQL 数据目录的访问。 数据目录也是其他信息(例如日志文件和状态文件)的默认位置。

Note

一些安装包包含名为 mysqld-debug 的服务器的调试版本。 调用此版本而不是 mysqld 来支持调试、内存分配检查和跟踪文件支持(请参阅第 5.8.1.2 节,“创建跟踪文件”)。

当 MySQL 服务器启动时,它会侦听来自客户端程序的网络连接,并代表这些客户端管理对数据库的访问。

mysqld 程序有许多可以在启动时指定的选项。 如需完整的选项列表,请运行以下命令:

mysqld --verbose --help

MySQL 服务器还有一组系统变量,这些变量会在运行时影响其操作。 系统变量可以在服务器启动时设置,其中许多可以在运行时更改以实现动态服务器重新配置。 MySQL 服务器还有一组状态变量,提供有关其操作的信息。 您可以监视这些状态变量以访问运行时性能特征。

有关 MySQL 服务器命令选项、系统变量和状态变量的完整描述,请参阅第 5.1 节,“MySQL 服务器”。 有关安装 MySQL 和设置初始配置的信息,请参阅第 2 章,安装和升级 MySQL

4.3.2 mysqld_safe——MySQL服务器启动脚本

mysqld_safe 是在 Unix 上启动 mysqld 服务器的推荐方法。 mysqld_safe 添加了一些安全功能,例如在发生错误时重新启动服务器并将运行时信息记录到错误日志中。 本节稍后将介绍错误日志记录。

Note

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。 在这些平台上,没有安装 mysqld_safe,因为它是不必要的。 有关更多信息,请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

在使用 systemd 进行服务器管理的平台上不使用 mysqld_safe 的一个含义是不支持在选项文件中使用 [mysqld_safe] 或 [safe_mysqld] 部分,这可能会导致意外行为。

mysqld_safe 尝试启动一个名为 mysqld 的可执行文件。 要覆盖默认行为并明确指定要运行的服务器的名称,请为 mysqld_safe 指定 --mysqld--mysqld-version 选项。 您还可以使用 --ledir 指示 mysqld_safe 应该在其中查找服务器的目录。

mysqld_safe 的许多选项与 mysqld 的选项相同。 请参见第 5.1.6 节,“服务器命令选项”

如果在命令行中指定了 mysqld_safe 未知的选项,则将它们传递给 mysqld,但如果在选项文件的 [mysqld_safe] 组中指定它们,则忽略它们。 请参见第 4.2.2.2 节,“使用选项文件”

mysqld_safe 从选项文件中的 [mysqld]、[server] 和 [mysqld_safe] 部分读取所有选项。 例如,如果您像这样指定 [mysqld] 部分,mysqld_safe 会找到并使用 --log-error 选项:

[mysqld]
log-error=error.log

为了向后兼容,mysqld_safe 还读取 [safe_mysqld] 部分,但要保持最新状态,您应该将这些部分重命名为 [mysqld_safe]。

mysqld_safe 接受命令行和选项文件中的选项,如下表所述。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

mysqld_safe 选项

选项名描述引入已废弃
–basedirMySQL安装目录的路径
–core-file-sizemysqld 应该能够创建的核心文件的大小
–datadir数据目录路径
–defaults-extra-file除了通常的选项文件外,还读取命名的选项文件
–defaults-file只读命名选项文件
–help显示帮助信息并退出
–ledir服务器所在目录的路径
–log-error将错误日志写入指定文件
–malloc-lib用于 mysqld 的替代 malloc 库
–mysqld要启动的服务器程序的名称(在 ledir 目录中)
–mysqld-safe-log-timestamps用于记录的时间戳格式5.7.11
–mysqld-version服务器程序名称的后缀
–nice使用 nice 程序设置服务器调度优先级
–no-defaults不读取选项文件
–open-files-limitmysqld 应该能够打开的文件数
–pid-file服务器进程标识文件的路径名
–plugin-dir插件安装目录
–port侦听 TCP/IP 连接的端口号
–skip-kill-mysqld不要试图杀死流浪的 mysqld 进程
–skip-syslog不要将错误消息写入系统日志; 使用错误日志文件
–socket用于侦听 Unix 套接字连接的套接字文件
–syslog将错误消息写入系统日志
–syslog-tag写入系统日志的消息的标记后缀
–timezone将 TZ 时区环境变量设置为命名值
–user以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld
  • --help

    显示帮助信息并退出。

  • --basedir=dir_name

    MySQL 安装目录的路径。

  • --core-file-size=size

    mysqld 应该能够创建的核心文件的大小。 选项值被传递给 ulimit -c。

  • --datadir=dir_name

    数据目录的路径。

  • --defaults-extra-file=file_name

    除了通常的选项文件外,还要阅读此选项文件。 如果该文件不存在或无法访问,则服务器将退出并出现错误。 如果 file_name 不是绝对路径名,则相对于当前目录进行解释。 如果使用,这必须是命令行上的第一个选项。

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

  • --defaults-file=file_name

    仅使用给定的选项文件。 如果该文件不存在或无法访问,则服务器将退出并出现错误。 如果 file_name 不是绝对路径名,则相对于当前目录进行解释。 如果使用,这必须是命令行上的第一个选项。

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

  • --ledir=dir_name

    如果 mysqld_safe 找不到服务器,则使用此选项指示服务器所在目录的路径名。

    从 MySQL 5.7.17 开始,此选项仅在命令行上被接受,而不是在选项文件中。 在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定该值。 请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

  • --log-error=file_name

    将错误日志写入给定文件。 请参见第 5.4.2 节,“错误日志”。

  • --mysqld-safe-log-timestamps

    此选项控制 mysqld_safe 生成的日志输出中时间戳的格式。 以下列表描述了允许的值。 对于任何其他值,mysqld_safe 会记录警告并使用 UTC 格式。

    • UTC, utc

      ISO 8601 UTC 格式(与服务器的 --log_timestamps=UTC 相同)。 这是默认设置。

    • SYSTEM, system

      ISO 8601 本地时间格式(与服务器的 --log_timestamps=SYSTEM 相同)。

    • HYPHEN, hyphen

      YY-MM-DD h:mm:ss 格式,如 MySQL 5.6 的 mysqld_safe 格式。

    • LEGACY, legacy

      YYMMDD hh:mm:ss 格式,如 MySQL 5.6 之前的 mysqld_safe。

    此选项是在 MySQL 5.7.11 中添加的。

  • --malloc-lib=[lib_name]

    用于内存分配而不是系统 malloc() 库的库的名称。 从 MySQL 5.7.15 开始,选项值必须是目录 /usr/lib、/usr/lib64、/usr/lib/i386-linux-gnu 或 /usr/lib/x86_64-linux-gnu 之一。 在 MySQL 5.7.15 之前,任何库都可以通过指定其路径名来使用,但是有一种快捷方式可以使用 tcmalloc 库,该库随 MySQL 5.7 中的 Linux 二进制 MySQL 发行版一起提供。 快捷方式可能在某些配置下不起作用,在这种情况下,您应该指定一个路径名。

    Note

    从 MySQL 5.7.13 开始,MySQL 发行版不再包含 tcmalloc 库。

    --malloc-lib 选项通过修改 LD_PRELOAD 环境值来影响动态链接以使加载程序能够在 mysqld 运行时找到内存分配库:

    • 如果未给出该选项,或者给出了没有值 (–malloc-lib=),则不会修改 LD_PRELOAD 并且不会尝试使用 tcmalloc。

    • 在 MySQL 5.7.31 之前,如果选项为 –malloc-lib=tcmallocmysqld_safe 在 /usr/lib 中查找 tcmalloc 库,然后在 MySQL pkglibdir 位置(例如,/usr/local/mysql/ lib 或任何合适的东西)。 如果找到 tmalloc,则将其路径名添加到 mysqldLD_PRELOAD 值的开头。 如果没有找到 tcmalloc,mysqld_safe 会以错误中止。

      从 MySQL 5.7.31 开始,tcmalloc 不是 --malloc-lib 选项的允许值。

    • 如果选项以 --malloc-lib=/path/to/some/library 的形式给出,则该完整路径将添加到 LD_PRELOAD 值的开头。 如果完整路径指向不存在或不可读的文件,则 mysqld_safe 中止并出现错误。

    • 对于 mysqld_safe 将路径名添加到 LD_PRELOAD 的情况,它会将路径添加到变量已有的任何现有值的开头。

      Note

      在使用 systemd 管理服务器的系统上,mysqld_safe 不可用。 相反,通过在 /etc/sysconfig/mysql 中设置 LD_PRELOAD 来指定分配库。

    Linux 用户可以通过将以下行添加到 my.cnf 文件来使用二进制包中包含的 libtcmalloc_minimal.so

    [mysqld_safe]
    malloc-lib=tcmalloc
    

    对于在 /usr/lib 中安装了 tcmalloc 包的任何平台上的用户,这些行也足够了。 要使用特定的 tcmalloc 库,请指定其完整路径名。 例子:

    [mysqld_safe]
    malloc-lib=/opt/lib/libtcmalloc_minimal.so
    
  • --mysqld=prog_name

    您要启动的服务器程序的名称(在 ledir 目录中)。 如果您使用 MySQL 二进制分发但数据目录在二进制分发之外,则需要此选项。 如果 mysqld_safe 找不到服务器,请使用 --ledir 选项指示服务器所在目录的路径名。

    从 MySQL 5.7.15 开始,此选项仅在命令行上被接受,而不是在选项文件中。 在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定该值。 请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

  • --mysqld-version=suffix

    此选项类似于 --mysqld 选项,但您只指定服务器程序名称的后缀。 基本名称假定为 mysqld。 例如,如果使用 –mysqld-version=debugmysqld_safe 会在 ledir 目录中启动 mysqld-debug 程序。 如果 --mysqld-version 的参数为空,则 mysqld_safe 使用 ledir 目录中的 mysqld。

    从 MySQL 5.7.15 开始,此选项仅在命令行上被接受,而不是在选项文件中。 在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定该值。 请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

  • --nice=priority

    使用 nice 程序将服务器的调度优先级设置为给定值。

  • --no-defaults

    不要读取任何选项文件。 如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用 --no-defaults 来防止它们被读取。 如果使用,这必须是命令行上的第一个选项。

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

  • --open-files-limit=count

    mysqld 应该能够打开的文件数。 选项值被传递给 ulimit -n。

    Note

    您必须以 root 身份启动 mysqld_safe 才能正常运行。

  • --pid-file=file_name

    mysqld 应为其进程 ID 文件使用的路径名。

    从 MySQL 5.7.2 到 5.7.17,mysqld_safe 有自己的进程 ID 文件,始终命名为 mysqld_safe.pid,位于 MySQL 数据目录中。

  • --plugin-dir=dir_name

    插件目录的路径名。

  • --port=port_num

    服务器在侦听 TCP/IP 连接时应使用的端口号。 端口号必须为 1024 或更高,除非服务器由 root 操作系统用户启动。

  • --skip-kill-mysqld

    不要试图在启动时杀死杂散的 mysqld 进程。 此选项仅适用于 Linux。

  • --socket=path

    服务器在侦听本地连接时应使用的 Unix 套接字文件。

  • --syslog, --skip-syslog

    –syslog 导致将错误消息发送到支持记录器程序的系统上的 syslog。 --skip-syslog 禁止使用 syslog; 消息被写入错误日志文件。

    当 syslog 用于错误记录时,daemon.err 工具/严重性用于所有日志消息。

    从 MySQL 5.7.5 开始,不推荐使用这些选项来控制 mysqld 日志记录。 请改用服务器 log_syslog 系统变量。 要控制设施,请使用服务器 log_syslog_facility 系统变量。 请参阅第 5.4.2.3 节,“错误记录到系统日志”

  • --syslog-tag=tag

    为了记录到 syslog,来自 mysqld_safe 和 mysqld 的消息分别用 mysqld_safe 和 mysqld 标识符写入。 要为标识符指定后缀,请使用 --syslog-tag=tag,它将标识符修改为 mysqld_safe-tagmysqld-tag

    自 MySQL 5.7.5 起,不推荐使用此选项来控制 mysqld 日志记录。 请改用服务器 log_syslog_tag 系统变量。 请参阅第 5.4.2.3 节,“错误记录到系统日志”

  • --timezone=timezone

    将 TZ 时区环境变量设置为给定的选项值。 请查阅您的操作系统文档以了解合法的时区规范格式。

  • --user={user_name|user_id}

    以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld 服务器。 (本文中的“用户”是指系统登录帐户,而不是授权表中列出的 MySQL 用户。)

如果使用 --defaults-file 或 --defaults-extra-file 选项执行 mysqld_safe 来命名选项文件,则该选项必须是命令行中给出的第一个选项,否则不使用选项文件。 例如,此命令不使用命名的选项文件:

mysql> mysqld_safe --port=port_num --defaults-file=file_name

相反,请使用以下命令:

mysql> mysqld_safe --defaults-file=file_name --port=port_num

编写 mysqld_safe 脚本以便它通常可以启动从 MySQL 的源或二进制发行版安装的服务器,即使这些类型的发行版通常将服务器安装在稍微不同的位置。 (请参阅第 2.1.5 节,“安装布局”。)mysqld_safe 期望以下条件之一为真:

  • 可以相对于工作目录(调用 mysqld_safe 的目录)找到服务器和数据库。 对于二进制发行版,mysqld_safe 在其工作目录下查找 bin 和 data 目录。 对于源代码分发,它会查找 libexecvar 目录。 如果您从 MySQL 安装目录(例如,/usr/local/mysql 用于二进制分发)执行 mysqld_safe,则应该满足此条件。
  • 如果相对于工作目录找不到服务器和数据库,mysqld_safe 会尝试通过绝对路径名来定位它们。 典型的位置是 /usr/local/libexec/usr/local/var。 实际位置是根据在构建时配置到分布中的值确定的。 如果 MySQL 安装在配置时指定的位置,它们应该是正确的。

因为 mysqld_safe 试图找到相对于它自己的工作目录的服务器和数据库,所以你可以在任何地方安装 MySQL 的二进制发行版,只要你从 MySQL 安装目录运行 mysqld_safe

cd mysql_installation_directory
bin/mysqld_safe &

如果 mysqld_safe 失败,即使是从 MySQL 安装目录调用,也要指定 --ledir--datadir 选项以指示服务器和数据库在系统上所在的目录。

mysqld_safe 尝试使用 sleep 和 date 系统实用程序来确定每秒尝试启动的次数。 如果存在这些实用程序并且每秒尝试的启动次数大于 5,则 mysqld_safe 将等待 1 整秒,然后再重新启动。 这是为了防止在重复失败的情况下过度使用 CPU。 (BUG #11761530、BUG #54035)

当您使用 mysqld_safe 启动 mysqld 时,mysqld_safe 会安排来自其自身和来自 mysqld 的错误(和通知)消息到达相同的目的地。

有几个 mysqld_safe 选项可用于控制这些消息的目的地:

  • --log-error=file_name:将错误消息写入指定的错误文件。

  • --syslog:在支持记录器程序的系统上将错误消息写入系统日志。

  • --skip-syslog:不要将错误消息写入系统日志。 消息将写入默认错误日志文件(数据目录中的 host_name.err),或者如果给出了 --log-error 选项,则写入命名文件。

如果没有给出这些选项,则默认为 --skip-syslog。

mysqld_safe 写入消息时,通知会转到日志记录目标(系统日志或错误日志文件)和标准输出。 错误转到日志记录目标和标准错误。

Note

从 MySQL 5.7.5 开始,不推荐从 mysqld_safe 控制 mysqld 日志记录。 请改用服务器的本机 syslog 支持。 有关详细信息,请参阅第 5.4.2.3 节,“错误记录到系统日志”。

4.3.3 mysql.server——MySQL服务器启动脚本

Unix 和类 Unix 系统上的 MySQL 发行版包括一个名为 mysql.server 的脚本,它使用 mysqld_safe 启动 MySQL 服务器。 它可以用于 Linux 和 Solaris 等使用 System V 风格的运行目录来启动和停止系统服务的系统。 它也被用于 MySQL 的 macOS 启动项使用。

mysql.server 是 MySQL 源代码树中使用的脚本名称。 安装的名称可能不同(例如,mysqld 或 mysql)。 在以下讨论中,根据您的系统调整名称 mysql.server。

Note

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。 在这些平台上,没有安装 mysql.server 和 mysqld_safe,因为它们是不必要的。 有关更多信息,请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

要使用 mysql.server 脚本手动启动或停止服务器,请使用启动或停止参数从命令行调用它:

mysql.server start
mysql.server stop

mysql.server 将位置更改为 MySQL 安装目录,然后调用 mysqld_safe。 要以某个特定用户身份运行服务器,请将适当的用户选项添加到全局 /etc/my.cnf 选项文件的 [mysqld] 组,如本节后面所示。 (如果您在非标准位置安装了 MySQL 的二进制发行版,则可能必须编辑 mysql.server。修改它以在运行 mysqld_safe 之前将位置更改为正确的目录。如果这样做,您的修改版本的 mysql 如果您将来升级 MySQL,.server 可能会被覆盖;复制您编辑的版本,您可以重新安装。)

mysql.server stop 通过向服务器发送信号来停止服务器。 您还可以通过执行 mysqladmin shutdown 手动停止服务器。

要在您的服务器上自动启动和停止 MySQL,您必须将启动和停止命令添加到 /etc/rc* 文件中的适当位置:

  • 如果您使用 Linux 服务器 RPM 包 (MySQL-server-VERSION.rpm) 或本地 Linux 包安装,则 mysql.server 脚本可能安装在 /etc/init.d 目录中,名称为 mysqld 或 mysql。 有关 Linux RPM 包的更多信息,请参阅第 2.5.5 节,“使用 Oracle 的 RPM 包在 Linux 上安装 MySQL”

  • 如果您从源分发版安装 MySQL 或使用不会自动安装 mysql.server 的二进制分发格式,您可以手动安装脚本。 它可以在 MySQL 安装目录下的 support-files 目录或 MySQL 源代码树中找到。 将脚本复制到名为 mysql 的 /etc/init.d 目录并使其可执行:

    cp mysql.server /etc/init.d/mysql
    chmod +x /etc/init.d/mysql
    

    安装脚本后,激活它以在系统启动时运行所需的命令取决于您的操作系统。 在 Linux 上,您可以使用 chkconfig:

    chkconfig --add mysql
    

    在某些 Linux 系统上,似乎还需要以下命令才能完全启用 mysql 脚本:

    chkconfig --level 345 mysql on
    
  • 在 FreeBSD 上,启动脚本通常应该放在 /usr/local/etc/rc.d/ 中。 将 mysql.server 脚本安装为 /usr/local/etc/rc.d/mysql.server.sh 以启用自动启动。 rc(8) 手册页指出,该目录中的脚本只有在其基本名称与 *.sh shell 文件名模式匹配时才会执行。 目录中存在的任何其他文件或目录都将被静默忽略。

  • 作为上述设置的替代方案,某些操作系统还使用 /etc/rc.local 或 /etc/init.d/boot.local 在启动时启动其他服务。 要使用此方法启动 MySQL,请将如下命令附加到相应的启动文件中:

    /bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
    
  • 对于其他系统,请查阅您的操作系统文档以了解如何安装启动脚本。

mysql.server 从选项文件的 [mysql.server] 和 [mysqld] 部分读取选项。 为了向后兼容,它还读取 [mysql_server] 部分,但要保持最新状态,您应该将这些部分重命名为 [mysql.server]。

您可以在全局 /etc/my.cnf 文件中为 mysql.server 添加选项。 典型的 my.cnf 文件可能如下所示:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql

mysql.server 脚本支持下表中显示的选项。 如果指定,它们必须放在选项文件中,而不是放在命令行中。 mysql.server 仅支持 start 和 stop 作为命令行参数。

mysql.server 选项文件选项

选项名描述类型
basedirMySQL安装目录的路径目录名称
datadirMySQL数据目录的路径目录名称
pid-file服务器应在其中写入其进程 ID 的文件文件名称
service-startup-timeout等待服务器启动多长时间Integer
  • basedir=dir_name

    MySQL 安装目录的路径。

  • 数据目录=目录名

    MySQL 数据目录的路径。

  • pid-file=file_name

    服务器应在其中写入其进程 ID 的文件的路径名。服务器在数据目录中创建文件,除非给出绝对路径名来指定不同的目录。

    如果未给出此选项,则 mysql.server 使用默认值 host_name.pid。传递给 mysqld_safe 的 PID 文件值会覆盖 [mysqld_safe] 选项文件组中指定的任何值。因为 mysql.server 读取 [mysqld] 选项文件组而不是 [mysqld_safe] 组,您可以确保 mysqld_safe 在从 mysql.server 调用时获得与手动调用时相同的值,方法是将相同的 pid-file 设置放在两个[mysqld_safe] 和 [mysqld] 组。

  • service-startup-timeout=seconds

    等待确认服务器启动的时间(以秒为单位)。如果服务器在这段时间内没有启动,mysql.server 会出错并退出。默认值为 900。值为 0 表示根本不等待启动。负值意味着永远等待(没有超时)。

4.3.4 mysqld_multi——管理多个 MySQL 服务器

mysqld_multi 旨在管理多个 mysqld 进程,这些进程侦听不同 Unix 套接字文件和 TCP/IP 端口上的连接。 它可以启动或停止服务器,或报告它们的当前状态。

Note

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。 在这些平台上,没有安装 mysqld_multi,因为它是不必要的。 有关使用 systemd 处理多个 MySQL 实例的信息,请参阅第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”

mysqld_multimy.cnf(或由 --defaults-file 选项命名的文件)中搜索名为 [mysqldN] 的组。 N 可以是任何正整数。 此编号在以下讨论中称为选项组编号或 GNR。 组号将选项组彼此区分开来,并用作 mysqld_multi 的参数以指定要启动、停止或获取状态报告的服务器。 这些组中列出的选项与您在用于启动 mysqld[mysqld] 组中使用的选项相同。 (例如,参见第 2.10.5 节,“自动启动和停止 MySQL”。)但是,当使用多个服务器时,每个服务器都必须使用自己的值来设置选项,例如 Unix 套接字文件和 TCP/IP 端口 数字。 有关在多服务器环境中每个服务器哪些选项必须唯一的更多信息,请参阅第 5.7 节,“在一台机器上运行多个 MySQL 实例”

要调用 mysqld_multi,请使用以下语法:

mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]

start、stop、reload(停止和重新启动)和报告指示要执行的操作。 您可以对单个服务器或多个服务器执行指定的操作,具体取决于选项名称后面的 GNR 列表。 如果没有列表,mysqld_multi 对选项文件中的所有服务器执行操作。

每个 GNR 值代表一个选项组编号或组编号范围。 该值应该是选项文件中组名末尾的数字。 例如,名为 [mysqld17] 的组的 GNR 为 17。要指定数字范围,请用短划线分隔第一个和最后一个数字。 GNR 值 10-13 代表组 [mysqld10] 到 [mysqld13]。 可以在命令行上指定多个组或组范围,以逗号分隔。 GNR 列表中不能有空白字符(空格或制表符); 空白字符后的任何内容都将被忽略。

此命令使用选项组 [mysqld17] 启动单个服务器:

mysqld_multi start 17

此命令使用选项组 [mysqld8] 和 [mysqld10] 到 [mysqld13] 停止多个服务器:

mysqld_multi stop 8,10-13

有关如何设置选项文件的示例,请使用以下命令:

mysqld_multi --example

mysqld_multi 搜索选项文件如下:

  • 使用 --no-defaults,不读取任何选项文件。

  • 使用 --defaults-file=file_name,只读取命名文件。

  • 否则,将读取标准位置列表中的选项文件,包括由 --defaults-extra-file=file_name 选项命名的任何文件(如果有的话)。 (如果多次给出该选项,则使用最后一个值。)

有关这些和其他选项文件选项的更多信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”

在读取的选项文件中搜索 [mysqld_multi][mysqldN] 选项组。 [mysqld_multi] 组可用于 mysqld_multi 本身的选项。 [mysqldN] 组可用于传递给特定 mysqld 实例的选项。

[mysqld][mysqld_safe] 组可用于所有 mysqldmysqld_safe 实例读取的公共选项。 您可以指定 --defaults-file=file_name 选项为该实例使用不同的配置文件,在这种情况下,该文件中的 [mysqld][mysqld_safe] 组用于该实例。

mysqld_multi 支持以下选项。

  • --help

    显示帮助信息并退出。

  • --example

    显示示例选项文件。

  • --log=file_name

    指定日志文件的名称。 如果文件存在,则将日志输出附加到它。

  • --mysqladmin=prog_name

    用于停止服务器的 mysqladmin 二进制文件。

  • --mysqld=prog_name

    要使用的 mysqld 二进制文件。 请注意,您也可以指定 mysqld_safe 作为此选项的值。 如果使用 mysqld_safe 启动服务器,则可以在相应的 [mysqldN] 选项组中包含 mysqld 或 ledir 选项。 这些选项表示 mysqld_safe 应该启动的服务器的名称和服务器所在目录的路径名。 (请参阅第 4.3.2 节,“mysqld_safe - MySQL 服务器启动脚本”中对这些选项的描述。)示例:

    [mysqld38]
    mysqld = mysqld-debug
    ledir  = /opt/local/mysql/libexec
    
  • --no-log

    将日志信息打印到标准输出而不是日志文件。 默认情况下,输出到日志文件。

  • --password=password

    调用 mysqladmin 时要使用的 MySQL 帐户的密码。 请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。

  • --silent

    静音模式; 禁用警告。

  • --tcp-ip

    通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。 (如果缺少套接字文件,服务器可能仍在运行,但只能通过 TCP/IP 端口访问。)默认情况下,使用 Unix 套接字文件进行连接。 此选项影响停止和报告操作。

  • --user=user_name

    调用 mysqladmin 时要使用的 MySQL 帐户的用户名。

  • --verbose

    更冗长。

  • --version

    显示版本信息并退出。

关于 mysqld_multi 的一些注意事项:

  • 最重要的是:在使用 mysqld_multi 之前,请确保您了解传递给 mysqld 服务器的选项的含义以及为什么要拥有单独的 mysqld 进程。 当心使用具有相同数据目录的多个 mysqld 服务器的危险。 使用单独的数据目录,除非您知道自己在做什么。 使用相同的数据目录启动多个服务器不会在线程系统中为您提供额外的性能。 请参阅第 5.7 节,“在一台机器上运行多个 MySQL 实例”

    Important

    确保启动特定 mysqld 进程的 Unix 帐户可以完全访问每个服务器的数据目录。 不要为此使用 Unix root 帐户,除非您知道自己在做什么。 请参阅第 6.1.5 节,“如何以普通用户身份运行 MySQL”

  • 确保用于停止 mysqld 服务器的 MySQL 帐户(使用 mysqladmin 程序)对于每个服务器具有相同的用户名和密码。 此外,请确保该帐户具有 SHUTDOWN 权限。 如果您要管理的服务器的管理帐户具有不同的用户名或密码,您可能希望在每台服务器上创建一个具有相同用户名和密码的帐户。 例如,您可以通过为每个服务器执行以下命令来设置一个通用的 multi_admin 帐户:

    $> mysql -u root -S /tmp/mysql.sock -p
    Enter password:
    mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
    mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
    

    请参见第 6.2 节“访问控制和帐户管理”。 您必须为每个 mysqld 服务器执行此操作。 连接每个参数时,适当更改连接参数。 请注意,帐户名的主机名部分必须允许您以 multi_admin 身份从要运行 mysqld_multi 的主机连接。

  • 每个 mysqld 的 Unix 套接字文件和 TCP/IP 端口号必须不同。 (或者,如果主机有多个网络地址,您可以设置 bind_address 系统变量,使不同的服务器监听不同的接口。)

  • 如果您使用 mysqld_safe 启动 mysqld--pid-file 选项非常重要(例如,--mysqld=mysqld_safe) 每个 mysqld 都应该有自己的进程 ID 文件。 使用 mysqld_safe 而不是 mysqld 的优点是 mysqld_safe 监视它的 mysqld 进程,如果进程由于使用 kill -9 发送的信号或其他原因(例如分段错误)而终止,则会重新启动它。

  • 您可能希望对 mysqld 使用 --user 选项,但要做到这一点,您需要以 Unix 超级用户 (root) 身份运行 mysqld_multi 脚本。 在选项文件中有选项无关紧要; 如果您不是超级用户并且 mysqld 进程是在您自己的 Unix 帐户下启动的,您只会收到警告。

以下示例显示了如何设置用于 mysqld_multi 的选项文件。 mysqld 程序的启动或停止顺序取决于它们在选项文件中出现的顺序。 组号不需要形成一个完整的序列。 示例中有意省略了第一个和第五个 [mysqldN] 组,以说明您可以在选项文件中存在“间隙”。 这为您提供了更大的灵活性。

# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = multi_admin
password   = my_password

[mysqld2]
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /usr/local/mysql/data2/hostname.pid2
datadir    = /usr/local/mysql/data2
language   = /usr/local/mysql/share/mysql/english
user       = unix_user1

[mysqld3]
mysqld     = /path/to/mysqld_safe
ledir      = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket     = /tmp/mysql.sock3
port       = 3308
pid-file   = /usr/local/mysql/data3/hostname.pid3
datadir    = /usr/local/mysql/data3
language   = /usr/local/mysql/share/mysql/swedish
user       = unix_user2

[mysqld4]
socket     = /tmp/mysql.sock4
port       = 3309
pid-file   = /usr/local/mysql/data4/hostname.pid4
datadir    = /usr/local/mysql/data4
language   = /usr/local/mysql/share/mysql/estonia
user       = unix_user3

[mysqld6]
socket     = /tmp/mysql.sock6
port       = 3311
pid-file   = /usr/local/mysql/data6/hostname.pid6
datadir    = /usr/local/mysql/data6
language   = /usr/local/mysql/share/mysql/japanese
user       = unix_user4

请参见第 4.2.2.2 节,“使用选项文件”

4.4 安装相关程序

[4.4.1 comp_err——编译MySQL错误信息文件](#4.4.1 comp_err——编译MySQL错误信息文件)

[4.4.2 mysql_install_db——初始化 MySQL 数据目录](#4.4.2 mysql_install_db——初始化 MySQL 数据目录)

[4.4.3 mysql_plugin——配置 MySQL 服务器插件](#4.4.3 mysql_plugin——配置 MySQL 服务器插件)

[4.4.4 mysql_secure_installation——提高 MySQL 安装安全性](#4.4.4 mysql_secure_installation——提高 MySQL 安装安全性)

[4.4.5 mysql_ssl_rsa_setup — 创建 SSL/RSA 文件](#4.4.5 mysql_ssl_rsa_setup — 创建 SSL/RSA 文件)

[4.4.6 mysql_tzinfo_to_sql — 加载时区表](#4.4.6 mysql_tzinfo_to_sql — 加载时区表)

[4.4.7 mysql_upgrade — 检查和升级 MySQL 表](#4.4.7 mysql_upgrade — 检查和升级 MySQL 表)

本节中的程序在安装或升级 MySQL 时使用。

4.4.1 comp_err——编译MySQL错误信息文件

comp_err 创建 errmsg.sys 文件,mysqld 使用该文件来确定要针对不同错误代码显示的错误消息。 comp_err 通常在 MySQL 构建时自动运行。 它从位于 MySQL 源代码分发版中的 sql/share/errmsg-utf8.txt 的文本格式错误信息文件中编译 errmsg.sys 文件。

comp_err 还生成 mysqld_error.hmysqld_ername.hsql_state.h 头文件。

有关如何定义错误消息的更多信息,请参阅 MySQL 内部手册。

像这样调用 comp_err

comp_err [options]

comp_err 支持以下选项。

  • --help, -?

    显示帮助信息并退出。

  • --charset=dir_name, -C dir_name

    字符集目录。 默认值为 …/sql/share/charsets。

  • --debug=debug_options, -# debug_options

    编写调试日志。 典型的 debug_options 字符串是 d:t:O,file_name。 默认为 d:t:O,/tmp/comp_err.trace。

  • --debug-info, -T

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

  • --header-file=file_name, -H file_name

    错误头文件的名称。 默认值为 mysqld_error.h。

  • --in-file=file_name, -F file_name

    定义错误消息的输入文件的名称。 默认为 …/sql/share/errmsg-utf8.txt。

  • --name-file=file_name, -N file_name

    错误名称文件的名称。 默认值为 mysqld_ername.h。

  • --out-dir=dir_name, -D dir_name

    输出基目录的名称。 默认为 …/sql/share/。

  • --out-file=file_name, -O file_name

    输出文件的名称。 默认值为 errmsg.sys。

  • --state-file=file_name, -S file_name

    SQLSTATE 头文件的名称。 默认值为 sql_state.h。

  • --version, -V

    显示版本信息并退出。

4.4.2 mysql_install_db——初始化 MySQL 数据目录

Note

mysql_install_db 自 MySQL 5.7.6 起已弃用,因为它的功能已集成到 MySQL 服务器 mysqld 中。 要初始化 MySQL 安装,请使用 –initialize–initialize-insecure 选项调用 mysqld。 有关详细信息,请参阅第 2.10.1 节,“初始化数据目录”。 您应该期望在未来的 MySQL 版本中删除 mysql_install_db。https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure)

4.4.3 mysql_plugin——配置 MySQL 服务器插件

Note

mysql_plugin 自 MySQL 5.7.11 起已弃用,并在 MySQL 8.0 中删除。 替代方法包括在服务器启动时使用 –plugin-load–plugin-load-add 选项加载插件,或者在运行时使用 INSTALL PLUGIN 语句。

4.4.4 mysql_secure_installation——提高 MySQL 安装安全性

该程序使您能够通过以下方式提高 MySQL 安装的安全性:

  • 您可以为 root 帐户设置密码。

  • 您可以删除可从本地主机外部访问的 root 帐户。

  • 您可以删除匿名用户帐户。

  • 您可以删除测试数据库(默认情况下所有用户都可以访问,甚至匿名用户),以及允许任何人访问名称以 test_ 开头的数据库的权限。

mysql_secure_installation 帮助您实施类似于第 2.10.4 节“保护初始 MySQL 帐户”中描述的安全建议。

正常使用是连接本地MySQL服务器; 不带参数调用 mysql_secure_installation

mysql_secure_installation

执行时,mysql_secure_installation 会提示您确定要执行的操作。

validate_password 插件可用于密码强度检查。 如果插件没有安装,mysql_secure_installation 会提示用户是否安装。 如果启用了插件,则使用插件检查以后输入的任何密码。

大多数常见的 MySQL 客户端选项,例如 --host--port 都可以在命令行和选项文件中使用。 例如,要使用端口 3307 通过 IPv6 连接到本地服务器,请使用以下命令:

mysql_secure_installation --host=::1 --port=3307

mysql_secure_installation 支持以下选项,可以在命令行或选项文件的 [mysql_secure_installation] 和 [client] 组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名描述引入
–defaults-extra-file除了通常的选项文件外,还读取命名的选项文件
–defaults-file只读命名选项文件
–defaults-group-suffix选项组后缀值
–help显示帮助信息并退出
–hostMySQL服务器所在的主机
–no-defaults不读取选项文件
–password接受但总是被忽略。每当调用 mysql_secure_installation 时,都会提示用户输入密码。
–port用于连接的 TCP/IP 端口号
–print-defaults打印默认选项
–protocol要使用的传输协议
–socket要使用的 Unix 套接字文件或 Windows 命名管道
–ssl启用连接加密
–ssl-ca包含受信任 SSL 证书颁发机构列表的文件
–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
–ssl-cert包含 X.509 证书的文件
–ssl-cipher连接加密的允许密码
–ssl-crl包含证书吊销列表的文件
–ssl-crlpath包含证书吊销列表文件的目录
–ssl-key包含 X.509 密钥的文件
–ssl-verify-server-cert根据服务器证书公用名身份验证主机名
–tls-version加密连接的允许 TLS 协议5.7.10
–use-default在没有用户交互的情况下执行
–user连接到服务器时使用的 MySQL 用户名

4.4.5 mysql_ssl_rsa_setup — 创建 SSL/RSA 文件

该程序创建 SSL 证书和密钥文件以及 RSA 密钥对文件,以支持使用 SSL 的安全连接和使用 RSA 在未加密连接上的安全密码交换(如果这些文件丢失)。 如果现有的 SSL 文件已过期,mysql_ssl_rsa_setup 也可用于创建新的 SSL 文件。

Note

mysql_ssl_rsa_setup 使用 openssl 命令,因此它的使用取决于您的机器上是否安装了 OpenSSL。

对于使用 OpenSSL 编译的 MySQL 发行版,另一种生成 SSL 和 RSA 文件的方法是让服务器自动生成它们。 请参阅第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

Important

mysql_ssl_rsa_setup 通过更容易生成所需文件来帮助降低使用 SSL 的障碍。 但是,mysql_ssl_rsa_setup 生成的证书是自签名的,不是很安全。 在您获得使用由 mysql_ssl_rsa_setup 创建的文件的经验后,请考虑从注册的证书颁发机构获取 CA 证书。

像这样调用 mysql_ssl_rsa_setup

mysql_ssl_rsa_setup [options]

典型的选项是 --datadir 指定在哪里创建文件, --verbose 查看 mysql_ssl_rsa_setup 执行的 openssl 命令。

mysql_ssl_rsa_setup 尝试使用一组默认文件名创建 SSL 和 RSA 文件。 它的工作原理如下:

  1. mysql_ssl_rsa_setupPATH 环境变量指定的位置检查 openssl 二进制文件。 如果未找到 openssl,则 mysql_ssl_rsa_setup 什么也不做。 如果 openssl 存在,mysql_ssl_rsa_setup--datadir 选项指定的 MySQL 数据目录中查找默认 SSL 和 RSA 文件,如果未给出 --datadir 选项,则在编译的数据目录中查找。

  2. mysql_ssl_rsa_setup 检查具有以下名称的 SSL 文件的数据目录:

    ca.pem
    server-cert.pem
    server-key.pem
    
  3. 如果存在任何这些文件,则 mysql_ssl_rsa_setup 不会创建 SSL 文件。 否则,它会调用 openssl 来创建它们,以及一些额外的文件:

    ca.pem               Self-signed CA certificate
    ca-key.pem           CA private key
    server-cert.pem      Server certificate
    server-key.pem       Server private key
    client-cert.pem      Client certificate
    client-key.pem       Client private key
    

    这些文件启用使用 SSL 的安全客户端连接; 请参阅第 6.3.1 节,“配置 MySQL 以使用加密连接”

  4. mysql_ssl_rsa_setup 检查具有以下名称的 RSA 文件的数据目录:

    private_key.pem      Private member of private/public key pair
    public_key.pem       Public member of private/public key pair
    
  5. 如果存在这些文件中的任何一个,则 mysql_ssl_rsa_setup 不会创建 RSA 文件。 否则,它会调用 openssl 来创建它们。 这些文件通过 sha256_password 插件验证的帐户启用未加密连接上的 RSA 安全密码交换; 请参阅第 6.4.1.5 节,“SHA-256 可插入身份验证”

有关 mysql_ssl_rsa_setup 创建的文件的特征的信息,请参阅第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”

在启动时,如果除了 --ssl(可能与 ssl_cipher 一起)没有给出明确的 SSL 选项,MySQL 服务器会自动使用 mysql_ssl_rsa_setup 创建的 SSL 文件来启用 SSL。 如果您希望明确指定文件,请在启动时使用 --ssl-ca--ssl-cert--ssl-key 选项调用客户端以命名 ca.pemserver-cert.pemserver- key.pem 文件。

如果没有给出明确的 RSA 选项,服务器还会自动使用 mysql_ssl_rsa_setup 创建的 RSA 文件来启用 RSA。

如果服务器启用了 SSL,则客户端默认使用 SSL 进行连接。 要明确指定证书和密钥文件,请使用 --ssl-ca--ssl-cert--ssl-key 选项命名 ca.pemclient-cert.pemclient-key.pem 文件。 但是,可能首先需要一些额外的客户端设置,因为 mysql_ssl_rsa_setup 默认会在数据目录中创建这些文件。 数据目录的权限通常只允许访问运行 MySQL 服务器的系统帐户,因此客户端程序不能使用位于那里的文件。 要使文件可用,请将它们复制到客户端可读(但不可写)的目录:

  • 对于本地客户端,可以使用 MySQL 安装目录。 例如,如果数据目录是安装目录的子目录,而您当前的位置是数据目录,您可以像这样复制文件:

    cp ca.pem client-cert.pem client-key.pem ..
    
  • 对于远程客户端,使用安全通道分发文件,以确保它们在传输过程中不被篡改。

如果用于 MySQL 安装的 SSL 文件已过期,您可以使用 mysql_ssl_rsa_setup 创建新的:

  • 停止服务器。
  • 重命名或删除现有的 SSL 文件。 您可能希望先对它们进行备份。 (RSA 文件不会过期,因此您无需删除它们。mysql_ssl_rsa_setup 会看到它们存在并且不会覆盖它们。)
  • 使用 --datadir 选项运行 mysql_ssl_rsa_setup 以指定在何处创建新文件。
  • 重新启动服务器。

mysql_ssl_rsa_setup 支持以下命令行选项,可以在命令行或选项文件的 [mysql_ssl_rsa_setup][mysql_install_db][mysqld] 组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名称描述
–datadir数据目录路径
–help显示帮助信息并退出
–suffixX.509 证书公用名属性的后缀
–uid用于文件权限的有效用户的名称
–verbose详细模式
–version显示版本信息并退出
  • --help, ?

    显示帮助信息并退出。

  • --datadir=dir_name

    mysql_ssl_rsa_setup应该检查默认 SSL 和 RSA 文件 的目录的路径, 如果它们丢失,它应该在其中创建文件。默认是编译进来的数据目录。

  • --suffix=str

    X.509 证书中公用名属性的后缀。后缀值限制为 17 个字符。默认值基于 MySQL 版本号。

  • --uid=name, -v

    应该是任何已创建文件的所有者的用户的名称。该值是用户名,而不是数字用户 ID。在没有此选项的情况下,由 mysql_ssl_rsa_setup创建的文件归执行它的用户所有。仅当您在root支持chown()系统调用的系统上执行程序时,此选项才有效。

  • --verbose, -v

    详细模式。产生更多关于程序做什么的输出。例如,该程序显示它运行的 openssl命令,并生成输出以指示它是否跳过 SSL 或 RSA 文件创建,因为某些默认文件已经存在。

  • --version, -V

    显示版本信息并退出。

4.4.6 mysql_tzinfo_to_sql — 加载时区表

mysql_tzinfo_to_sql 程序在 mysql 数据库中加载时区表。 它用于具有 zoneinfo 数据库(描述时区的文件集)的系统。 此类系统的示例包括 Linux、FreeBSD、Solaris 和 macOS。 这些文件的一个可能位置是 /usr/share/zoneinfo 目录(在 Solaris 上是 /usr/share/lib/zoneinfo)。 如果您的系统没有 zoneinfo 数据库,您可以使用第 5.1.13 节,“MySQL 服务器时区支持”中描述的可下载包。

mysql_tzinfo_to_sql 可以通过多种方式调用:

mysql_tzinfo_to_sql tz_dir
mysql_tzinfo_to_sql tz_file tz_name
mysql_tzinfo_to_sql --leap tz_file

对于第一个调用语法,将 zoneinfo 目录路径名传递给 mysql_tzinfo_to_sql 并将输出发送到 mysql 程序。 例如:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

mysql_tzinfo_to_sql 读取系统的时区文件并从中生成 SQL 语句。 mysql 处理这些语句以加载时区表。

第二种语法导致 mysql_tzinfo_to_sql 加载与时区名称 tz_name 对应的单个时区文件 tz_file:

mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql

如果您的时区需要考虑闰秒,请使用第三种语法调用 mysql_tzinfo_to_sql,该语法会初始化闰秒信息。 tz_file 是您的时区文件的名称:

mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql

运行mysql_tzinfo_to_sql后,最好重启服务器,这样就不会继续使用之前缓存的任何时区数据。

4.4.7 mysql_upgrade — 检查和升级 MySQL 表

每次升级 MySQL 时,都应该执行 mysql_upgrade,它会查找与升级后的 MySQL 服务器的不兼容性:

  • 它升级 mysql 模式中的系统表,以便您可以利用可能已添加的新特权或功能。

  • 它升级了性能模式和系统模式。

  • 它检查用户模式。

如果 mysql_upgrade 发现表可能存在不兼容性,它会执行表检查,如果发现问题,则尝试修复表。 如果无法修复表,请参阅第 2.11.12 节,“重建或修复表或索引”以了解手动表修复策略。

mysql_upgrade 直接与 MySQL 服务器通信,向其发送执行升级所需的 SQL 语句。

重要

在 MySQL 5.7.11 中,默认的 --early-plugin-load 值是 keyring_file 插件库文件的名称,导致默认加载该插件。 在 MySQL 5.7.12 及更高版本中,默认 --early-plugin-load 值为空; 要加载 keyring_file 插件,您必须使用命名 keyring_file 插件库文件的值显式指定选项。

InnoDB 表空间加密要求在 InnoDB 初始化之前加载要使用的密钥环插件,因此默认 --early-plugin-load 值的这种更改引入了从 5.7.11 升级到 5.7.12 或更高版本的不兼容性。 已加密 InnoDB 表空间的管理员必须采取明确的措施以确保继续加载密钥环插件:使用命名插件库文件的 --early-plugin-load 选项启动服务器。 有关其他信息,请参阅第 6.4.4.1 节,“密钥环插件安装”

重要

如果您从早于 5.7.2 的版本升级到 MySQL 5.7.2 或更高版本,则对 mysql.user 表的更改需要特殊的步骤序列才能使用 mysql_upgrade 执行升级。 有关详细信息,请参阅第 2.11.3 节,“MySQL 5.7 中的更改”

Note

在 Windows 上,您必须以管理员权限运行 mysql_upgrade。 您可以通过以管理员身份运行命令提示符并运行该命令来执行此操作。 否则可能会导致升级无法正确执行。

警告

在执行升级之前,您应该始终备份当前的 MySQL 安装。 请参见第 7.2 节,“数据库备份方法”

在升级 MySQL 安装和运行 mysql_upgrade 之前,某些升级不兼容可能需要特殊处理。 有关确定任何此类不兼容性是否适用于您的安装以及如何处理它们的说明,请参见第 2.11 节,“升级 MySQL”

像这样使用 mysql_upgrade

  1. 确保服务器正在运行。

  2. 调用mysql_upgrade升级mysql schema中的系统表,检查修复其他schema中的表:

    mysql_upgrade [options]
    
  3. 停止服务器并重新启动它,以使任何系统表更改生效。

如果您有多个 MySQL 服务器实例要升级,请使用适合连接到每个所需服务器的连接参数调用 mysql_upgrade。 例如,如果服务器在 3306 到 3308 部分的本地主机上运行,则通过连接到适当的端口来升级它们中的每一个:

mysql_upgrade --protocol=tcp -P 3306 [other_options]
mysql_upgrade --protocol=tcp -P 3307 [other_options]
mysql_upgrade --protocol=tcp -P 3308 [other_options]

对于 Unix 上的本地主机连接,--protocol=tcp 选项强制使用 TCP/IP 而不是 Unix 套接字文件进行连接。

默认情况下,mysql_upgrade 以 MySQL root 用户身份运行。 如果在运行 mysql_upgraderoot 密码已过期,它会显示一条消息,告诉您密码已过期,结果 mysql_upgrade 失败。 要更正此问题,请重置 root 密码以使其过期并再次运行 mysql_upgrade。 首先,以 root 身份连接到服务器:

$> mysql -u root -p
Enter password: ****  <- enter root password here

使用ALTER USER重置密码:

mysql> ALTER USER USER() IDENTIFIED BY 'root-password';

然后退出mysql并再次运行mysql_upgrade

$> mysql_upgrade [options]

Note

如果您使用 disabled_storage_engines 系统变量设置来禁用某些存储引擎(例如,MyISAM)运行服务器,mysql_upgrade 可能会失败并出现如下错误:

mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).

要处理此问题,请在禁用 disabled_storage_engines 的情况下重新启动服务器。 然后你应该能够成功运行mysql_upgrade。 之后,重新启动服务器并将 disabled_storage_engines 设置为其原始值。

除非使用 –upgrade-system-tables 选项调用,否则 mysql_upgrade 会根据需要处理所有用户模式中的所有表。表检查可能需要很长时间才能完成。每个表都被锁定,因此在处理它时对其他会话不可用。检查和修复操作可能很耗时,尤其是对于大型表。表检查使用 CHECK TABLE 语句的 FOR UPGRADE 选项。有关此选项的详细信息,请参阅第 13.7.2.2 节,“CHECK TABLE 语句”

mysql_upgrade 使用当前 MySQL 版本号标记所有检查和修复的表。这样可以确保下次使用相同版本的服务器运行 mysql_upgrade 时,可以确定是否需要再次检查或修复给定的表。

mysql_upgrade 将 MySQL 版本号保存在数据目录中名为 mysql_upgrade_info 的文件中。这用于快速检查是否已针对此版本检查了所有表,以便可以跳过表检查。要忽略此文件并执行检查,请使用 --force 选项。

mysql_upgrade 检查 mysql.user 系统表行,对于任何具有空插件列的行,根据密码列值的哈希格式将该列设置为“mysql_native_password”或“mysql_old_password”。

对 4.1 之前的密码散列和 mysql_old_password 的支持已被删除,因此如果凭据使用与该插件兼容的散列格式,mysql_upgrade 会将空插件值设置为“mysql_native_password”。必须手动升级具有 4.1 之前密码哈希的行。有关帐户升级说明,请参阅第 6.4.1.3 节,“从 Pre-4.1 密码散列和 mysql_old_password 插件迁移”

mysql_upgrade 不会升级时区表或帮助表的内容。有关升级说明,请参阅第 5.1.13 节,“MySQL 服务器时区支持”第 5.1.14 节,“服务器端帮助支持”

除非使用 –skip-sys-schema 选项调用,否则 mysql_upgrade 如果未安装 sys 模式,则安装它,否则将其升级到当前版本。如果 sys 模式存在但没有版本视图,则会发生错误,假设它不存在表示用户创建的模式:

A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.

在这种情况下要升级,请先删除或重命名现有的 sys 架构。

mysql_upgrade 检查使用通用分区处理程序创建的分区 InnoDB 表,并尝试将它们升级到 InnoDB 本机分区。 (错误 #76734、错误 #20727344)您可以使用 ALTER TABLE … UPGRADE PARTITIONING SQL 语句在 mysql 客户端中单独升级此类表。

mysql_upgrade 支持以下选项,可以在命令行或选项文件的 [mysql_upgrade] 和 [client] 组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名称描述引入
–bind-address使用指定的网络接口连接 MySQL Server
–character-sets-dir安装字符集的目录
–compress压缩客户端和服务器之间发送的所有信息
–debug写调试日志
–debug-check程序退出时打印调试信息
–debug-info程序退出时打印调试信息、内存和 CPU 统计信息
–default-auth要使用的身份验证插件
–default-character-set指定默认字符集
–defaults-extra-file除了通常的选项文件外,还读取命名的选项文件
–defaults-file只读命名选项文件
–defaults-group-suffix选项组后缀值
–force即使当前 MySQL 版本已经执行了 mysql_upgrade 也强制执行
–help显示帮助信息并退出
–hostMySQL服务器所在的主机
–login-path从 .mylogin.cnf 读取登录路径选项
–max-allowed-packet发送到服务器或从服务器接收的最大数据包长度
–net-buffer-lengthTCP/IP 和套接字通信的缓冲区大小
–no-defaults不读取选项文件
–password连接服务器时使用的密码
–pipe使用命名管道连接到服务器(仅限 Windows)
–plugin-dir插件安装目录
–port用于连接的 TCP/IP 端口号
–print-defaults打印默认选项
–protocol要使用的传输协议
–shared-memory-base-name共享内存连接的共享内存名称(仅限 Windows)
–skip-sys-schema不要安装或升级 sys 架构
–socket要使用的 Unix 套接字文件或 Windows 命名管道
–ssl启用连接加密
–ssl-ca包含受信任 SSL 证书颁发机构列表的文件
–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
–ssl-cert包含 X.509 证书的文件
–ssl-cipher连接加密的允许密码
–ssl-crl包含证书吊销列表的文件
–ssl-crlpath包含证书吊销列表文件的目录
–ssl-key包含 X.509 密钥的文件
–ssl-mode连接到服务器的所需安全状态5.7.11
–ssl-verify-server-cert根据服务器证书公用名身份验证主机名
–tls-version加密连接的允许 TLS 协议5.7.10
–upgrade-system-tables只更新系统表,不更新用户模式
–user连接到服务器时使用的 MySQL 用户名
–verbose详细模式
–version-check检查正确的服务器版本
–write-binlog将所有语句写入二进制日志

4.5 客户端程序

[4.5.1 mysql——MySQL 命令行客户端](#4.5.1 mysql——MySQL 命令行客户端)

[4.5.2 mysqladmin — MySQL 服务器管理程序](#4.5.2 mysqladmin — MySQL 服务器管理程序)

[4.5.3 mysqlcheck——一个表维护程序](#4.5.3 mysqlcheck——一个表维护程序)

[4.5.4 mysqldump——一个数据库备份程序](#4.5.4 mysqldump——一个数据库备份程序)

[4.5.5 mysqlimport——一个数据导入程序](#4.5.5 mysqlimport——一个数据导入程序)

[4.5.6 mysqlpump——一个数据库备份程序](#4.5.6 mysqlpump——一个数据库备份程序)

[4.5.7 mysqlshow——显示数据库、表和列信息](#4.5.7 mysqlshow——显示数据库、表和列信息)

[4.5.8 mysqlslap——负载仿真客户端](#4.5.8 mysqlslap——负载仿真客户端)

本节介绍连接到 MySQL 服务器的客户端程序。

4.5.1 mysql——MySQL 命令行客户端

[4.5.1.1 mysql客户端选项](#4.5.1.1 mysql客户端选项)

[4.5.1.2 mysql客户端命令](#4.5.1.2 mysql客户端命令)

[4.5.1.3 mysql客户端日志](#4.5.1.3 mysql客户端日志)

[4.5.1.4 mysql客户端服务器端帮助](#4.5.1.4 mysql客户端服务器端帮助)

[4.5.1.5 从文本文件执行 SQL 语句](#4.5.1.5 从文本文件执行 SQL 语句)

[4.5.1.6 mysql客户端提示](#4.5.1.6 mysql客户端提示)

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

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

Note

或者,MySQL Shell 提供对 X DevAPI 的访问。 有关详细信息,请参阅 MySQL Shell 8.0。

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

mysql db_name

或者

mysql --user=user_name --password db_name

在这种情况下,您需要输入密码以响应 mysql 显示的提示:

Enter password: your_password

然后键入一条 SQL 语句,以 ;、\g 或 \G 结束,然后按 Enter。

如果有一个语句,则键入 Control+C 会中断当前语句,否则会取消任何部分输入行。

您可以像这样在脚本文件(批处理文件)中执行 SQL 语句:

mysql db_name < script.sql > output.tab

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

4.5.1.1 mysql客户端选项

mysql支持以下选项,可以在命令行中指定,也可以在选项文件的[mysql]和[client]组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名称描述引入废弃
–auto-rehash启用自动重新散列
–auto-vertical-output启用自动垂直结果集显示
–batch不要使用历史文件
–binary-as-hex以十六进制表示法显示二进制值5.7.19
–binary-mode禁用 \r\n - 到 - \n 转换和将 \0 视为查询结束
–bind-address使用指定的网络接口连接 MySQL Server
–character-sets-dir安装字符集的目录
–column-names在结果中写入列名
–column-type-info显示结果集元数据
–comments是否保留或删除发送到服务器的语句中的注释
–compress压缩客户端和服务器之间发送的所有信息
–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 公钥5.7.23
–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 语句
–secure-auth不要以旧(4.1 之前)格式向服务器发送密码
–select-limit使用 --safe-updates 时 SELECT 语句的自动限制
–server-public-key-path包含 RSA 公钥的文件的路径名
–shared-memory-base-name共享内存连接的共享内存名称(仅限 Windows)
–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启用连接加密
–ssl-ca包含受信任 SSL 证书颁发机构列表的文件
–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
–ssl-cert包含 X.509 证书的文件
–ssl-cipher连接加密的允许密码
–ssl-crl包含证书吊销列表的文件
–ssl-crlpath包含证书吊销列表文件的目录
–ssl-key包含 X.509 密钥的文件
–ssl-mode连接到服务器的所需安全状态5.7.11
–ssl-verify-server-cert根据服务器证书公用名身份验证主机名
–syslog将交互式语句记录到 syslog
–table以表格格式显示输出
–tee将输出的副本附加到命名文件
–tls-version加密连接的允许 TLS 协议5.7.10
–unbuffered每次查询后刷新缓冲区
–user连接到服务器时使用的 MySQL 用户名
–verbose详细模式
–version显示版本信息并退出
–vertical垂直打印查询输出行(每列值一行)
–wait如果无法建立连接,请等待并重试,而不是中止
–xml生成 XML 输出
  • --help,-?

    显示帮助信息并退出。

  • --auto-rehash

    启用自动重新散列。此选项默认打开,它启用数据库、表和列名完成。用 --disable-auto-rehash 禁用重新散列。这会导致mysql启动更快,但如果你想使用名称完成 ,你必须发出 rehash命令或其 快捷方式。

    要完成名称,请输入第一部分并按 Tab。如果名称是明确的,则mysql完成它。否则,您可以再次按 Tab 键以查看以您迄今为止键入的内容开头的可能名称。如果没有默认数据库,则不会完成。

    Note

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

  • --auto-vertical-output

    如果结果集对于当前窗口来说太宽,则导致垂直显示,否则使用正常的表格格式。(这适用于以 ;\G结尾的语句。)

  • --batch,-B

    使用制表符作为列分隔符打印结果,每行换行。使用此选项, mysql不使用历史文件。

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

  • --binary-as-hex

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

    --binary-as-hex启用时会影响所有二进制字符串的显示,包括由 和 等函数返回的 CHAR()字符串 UNHEX()。以下示例使用 ASCII 码 A(十进制 65,十六进制 41)对此进行了演示:

    • --binary-as-hex禁用

      mysql> SELECT CHAR(0x41), UNHEX('41');
      +------------+-------------+
      | CHAR(0x41) | UNHEX('41') |
      +------------+-------------+
      | A          | A           |
      +------------+-------------+
      
    • --binary-as-hex启用

      mysql> SELECT CHAR(0x41), UNHEX('41');
      +------------------------+--------------------------+
      | CHAR(0x41)             | UNHEX('41')              |
      +------------------------+--------------------------+
      | 0x41                   | 0x41                     |
      +------------------------+--------------------------+
      

    --binary-as-hex要编写二进制字符串表达式,使其无论是否启用 都显示为字符串 ,请使用以下技术:

    • CHAR()函数有一个 子句: USING charset

      mysql> SELECT CHAR(0x41 USING utf8mb4);
      +--------------------------+
      | CHAR(0x41 USING utf8mb4) |
      +--------------------------+
      | A                        |
      +--------------------------+
      
    • 更一般地,用于 CONVERT()将表达式转换为给定的字符集:

      mysql> SELECT CONVERT(UNHEX('41') USING utf8mb4);
      +------------------------------------+
      | CONVERT(UNHEX('41') USING utf8mb4) |
      +------------------------------------+
      | A                                  |
      +------------------------------------+
      

    此选项是在 MySQL 5.7.19 中添加的。

  • --binary-mode

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

  • --bind-address=ip_address

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

  • --character-sets-dir=dir_name

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

  • --column-names

    在结果中写入列名。

  • --column-type-info

    是否去除或保留发送到服务器的语句中的注释。默认为 --skip-comments (删除评论),启用 --comments(保留评论)。

    Note

    在 MySQL 5.7 中,mysql 客户端总是将优化器提示传递给服务器,无论是否给出了此选项。如果您将旧版本的mysql客户端与理解优化器提示的服务器版本一起使用,为了确保优化器提示不会被剥离,请使用 --comments 选项 调用**mysql **

    从 MySQL 5.7.20 开始不推荐使用注释剥离。您应该期望在未来的 MySQL 版本中删除此功能和控制它的选项。

  • --compress, -C

    如果可能,压缩客户端和服务器之间发送的所有信息。请参见 第 4.2.6 节,“连接压缩控制”

  • --connect-expired-password

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

  • --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

    关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.13 节,“可插入身份验证”

  • --default-character-set=charset_name

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

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

    有关详细信息,请参阅 第 10.4 节,“连接字符集和排序规则”第 10.15 节,“字符集配置”

  • --defaults-file=file_name

    仅使用给定的选项文件。如果文件不存在或无法访问,则会发生错误。如果 *file_name*不是绝对路径名,则相对于当前目录进行解释。

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

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

  • --defaults-group-suffix=str

    不仅可以读取通常的选项组,还可以读取具有通常名称和 . 后缀的组 str。例如, mysql通常会读取 [client]and[mysql] 组。如果这个选项被指定为 --defaults-group-suffix=_othermysql也会读取 [client_other][mysql_other]组。

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

  • --delimiter=str

    设置语句分隔符。默认值为分号字符 ( ;)。

  • --disable-named-commands

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

  • --enable-cleartext-plugin

    启用mysql_clear_password明文身份验证插件。(请参阅 第 6.4.1.6 节,“客户端明文可插入身份验证”。)

  • --execute=statement, -e statement

    执行语句并退出。默认输出格式与使用 --batch. 有关一些示例,请参见 第 4.2.2.1 节,“在命令行上使用选项” 。使用此选项,mysql不使用历史文件。

  • --force,-f

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

  • --get-server-public-key

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

    如果 给出并指定一个有效的公钥文件,它优先于 . --server-public-key-path=file_name--get-server-public-key--get-server-public-key--get-server-public-key--get-server-public-key

    有关 caching_sha2_password插件的信息,请参阅 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

    --get-server-public-key 选项是在 MySQL 5.7.23 中添加的。

  • --histignore

    一个或多个以冒号分隔的模式的列表,指定要忽略以进行日志记录的语句。这些模式被添加到默认模式列表 ( "*IDENTIFIED*:*PASSWORD*") 中。为该选项指定的值会影响写入历史文件的语句的日志记录,以及 syslog是否给出该 --syslog选项。有关更多信息,请参阅第 4.5.1.3 节,“mysql 客户端日志记录”

  • --host=host_name, -h host_name

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

  • --html,-H

    生成 HTML 输出。

  • --ignore-spaces, -i

    忽略函数名称后的空格。其效果在 SQL 模式的讨论中进行了描述 IGNORE_SPACE(请参阅 第 5.1.10 节,“服务器 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--local-infile=1时,该选项禁用或启用LOCAL数据加载。

    在mysql 中成功使用LOCAL加载操作还需要服务器允许本地加载;请参见 第 6.1.6 节,“LOAD DATA LOCAL 的安全注意事项”

  • --login-path=name

    从登录路径文件中的命名登录路径读取选项 .mylogin.cnf。“ 登录路径”是一个选项组,包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor - MySQL 配置实用程序”

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

  • --max-allowed-packet=value

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

  • --max-join-size=value

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

  • --named-commands, -G

    启用命名的mysql命令。允许使用长格式命令,而不仅仅是短格式命令。例如,quit两者\q 都被识别。用于 --skip-named-commands 禁用命名命令。请参阅 第 4.5.1.2 节,“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实用程序。请参阅 第 4.6.6 节,“mysql_config_editor - MySQL 配置实用程序”

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

  • --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 db1mysql会按如下方式处理输入:

    • 执行该DELETE语句是因为默认数据库是 db1,即使该语句命名了不同数据库中的表。
    • DROP TABLEand CREATE TABLE语句没有被执行,因为默认数据库没有被执行 ,db1即使这些语句在db1.
    • 执行INSERTand CREATE TABLE语句是因为默认数据库是 db1,即使该 CREATE TABLE语句命名了不同数据库中的表。
  • --pager[=command]

    使用给定的命令进行分页查询输出。如果省略该命令,则默认分页器是您的 PAGER环境变量的值。有效的寻呼机是lessmore、 **cat [> filename]**等等。此选项仅适用于 Unix 且仅在交互模式下有效。要禁用分页,请使用 --skip-pager. 第 4.5.1.2 节,“mysql 客户端命令”,进一步讨论了输出分页。

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

    用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysql会提示输入一个。如果给出,则or 和其后的密码之间 不得有*空格。*如果未指定密码选项,则默认为不发送密码。 --password=-p

    在命令行上指定密码应该被认为是不安全的。为避免在命令行上提供密码,请使用选项文件。请参阅 第 6.1.2.1 节,“密码安全的最终用户指南”

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

  • --pipe,-W

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

  • --plugin-dir=dir_name

    查找插件的目录。如果该--default-auth 选项用于指定身份验证插件但 mysql没有找到它,请指定此选项。请参阅 第 6.2.13 节,“可插入身份验证”

  • --port=port_num, -P port_num

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

  • --print-defaults

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

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

  • --prompt=format_str

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

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

    用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节,“连接传输协议”

  • --quick,-q

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

  • --raw,-r

    对于表格输出,列周围的“装箱”可以将一个列值与另一列值区分开来。对于非表格输出(例如以批处理模式生成或给出--batchor --silent选项时),特殊字符会在输出中转义,以便轻松识别它们。换行符、制表符、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)

  • --secure-auth

    不要以旧(4.1 之前)格式向服务器发送密码。这会阻止连接,但使用较新密码格式的服务器除外。

    从 MySQL 5.7.5 开始,此选项已弃用;期望它在未来的 MySQL 版本中被删除。它始终处于启用状态,并且尝试禁用它 ( --skip-secure-auth, --secure-auth=0) 会产生错误。在 MySQL 5.7.5 之前,此选项默认启用,但可以禁用。

    Note

    使用 4.1 之前的哈希方法的密码不如使用本机密码哈希方法的密码安全,应该避免使用。不推荐使用 4.1 之前的密码,并且在 MySQL 5.7.5 中删除了对它们的支持。有关帐户升级说明,请参阅 第 6.4.1.3 节,“从 Pre-4.1 密码散列和 mysql_old_password 插件迁移”

  • --select-limit=value

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

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

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

    如果 给出并指定一个有效的公钥文件,它优先于 . --server-public-key-path=file_name--get-server-public-key--get-server-public-key--get-server-public-key--get-server-public-key

    对于sha256_password,此选项仅适用于使用 OpenSSL 构建 MySQL 的情况。

    有关sha256_passwordcaching_sha2_password插件的信息,请参阅 第 6.4.1.5 节,“SHA-256 可插入身份验证”第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

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

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

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

  • --show-warnings

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

  • --sigint-ignore

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

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

  • --silent,-s

    静音模式。产生更少的输出。可以多次给出此选项以产生越来越少的输出。

    此选项导致非表格输出格式和特殊字符转义。使用 raw 模式可以禁用转义;请参阅该 --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 密钥和证书。请参阅 加密连接的命令选项

  • --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;'
    

    有关更多信息,请参阅第 4.5.1.3 节,“mysql 客户端日志记录”

  • --table,-t

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

  • --tee=file_name

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

  • --tls-version=protocol_list

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

    此选项是在 MySQL 5.7.10 中添加的。

  • --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。有关详细信息,请参阅 第 4.5.4 节,“mysqldump - 数据库备份程序”

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

    $> 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>
    
4.5.1.2 mysql客户端命令

mysql将您发出的每个 SQL 语句发送到要执行的服务器。还有一组mysql自己解释的命令。有关这些命令的列表,请在 提示符 help\h``mysql>

mysql> help

List of all MySQL commands:
Note that all text commands must be first on line and 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 as 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 as argument.
charset   (\C) Switch to another charset. Might be needed for processing
               binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.

For server side help, type 'help contents'

如果使用 –binary-mode 选项调用 mysql,则禁用所有 mysql 命令,但非交互模式下的字符集分隔符除外(用于通过管道传输到 mysql 或使用 source 命令加载的输入)。

每个命令都有长格式和短格式。 长格式不区分大小写; 简短的形式是。 长格式后面可以跟一个可选的分号终止符,但短格式不应该。

不支持在多行 /* … / 注释中使用短格式命令。 短格式命令在单行 /! … / 版本注释,就像 /+ … */ 优化器提示注释一样,它们存储在对象定义中。 如果担心优化器提示注释可能存储在对象定义中,以便在使用 mysql 重新加载转储文件时会导致执行此类命令,请使用 –binary-mode 选项调用 mysql 或使用重新加载客户端以外的其他客户端 mysql。

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

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

    如果你为 help 命令提供一个参数,mysql 使用它作为搜索字符串来访问 MySQL 参考手册内容中的服务器端帮助。 有关详细信息,请参阅第 4.5.1.4 节,“mysql 客户端服务器端帮助”

  • charset charset_name, \C charset_name

    更改默认字符集并发出 SET NAMES 语句。 如果 mysql 在启用自动重新连接的情况下运行(不推荐),这将使字符集在客户端和服务器上保持同步,因为指定的字符集用于重新连接。

  • clear, \c

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

  • connect [db_name [host_name]], \r [db_name [host_name]]

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

  • delimiter str, \d str

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

    分隔符字符串可以在分隔符命令行上指定为不带引号或带引号的参数。引用可以使用单引号 (’)、双引号 (") 或反引号 (`) 字符。要在带引号的字符串中包含引号,请使用不同的引号字符引用字符串或使用反斜杠转义引号() 字符。应避免在引用字符串之外使用反斜杠,因为它是 MySQL 的转义字符。对于未引用的参数,分隔符被读取到第一个空格或行尾。对于引用的参数,分隔符被读取直到匹配的报价就行了。

    mysql 将分隔符字符串的实例解释为它出现的任何地方的语句分隔符,带引号的字符串除外。在定义可能出现在其他单词中的分隔符时要小心。例如,如果将分隔符定义为 X,则不能在语句中使用单词 INDEX。 mysql 将其解释为 INDE 后跟分隔符 X。

    当 mysql 识别的分隔符设置为默认值 ; 以外的其他内容时,该字符的实例将被发送到服务器而不进行解释。但是,服务器本身仍然会解释 ;作为语句分隔符并相应地处理语句。服务器端的这种行为适用于多语句执行(请参阅多语句执行支持),以及解析存储过程和函数、触发器和事件的主体(请参阅第 23.1 节,“定义存储程序”)。

  • edit, \e

    编辑当前输入语句。 mysql 检查 EDITOR 和 VISUAL 环境变量的值以确定使用哪个编辑器。 如果两个变量都没有设置,则默认编辑器是 vi。

    编辑命令仅在 Unix 中有效。

  • ego, \G

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

  • exit, \q

    退出mysql

  • go, \g

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

  • nopager, \n

    禁用输出分页。 请参阅寻呼机的说明。

    nopager 命令仅适用于 Unix。

  • notee, \t

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

  • nowarning, \w

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

  • pager [command], \P [command]

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

    输出分页可以使用 pager 命令以交互方式启用,并且可以使用 nopager 禁用。 该命令采用可选参数; 如果给定,则分页程序设置为该值。 如果没有参数,分页器将设置为在命令行上设置的分页器,如果没有指定分页器,则为标准输出。

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

  • print, \p

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

  • prompt [str], \R [str]

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

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

  • quit, \q

    退出mysql

  • rehash, \#

    在您输入语句时重建完成哈希以启用数据库、表和列名称完成。 (请参阅 --auto-rehash 选项的说明。)

  • resetconnection, \x

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

    重置连接具有类似于 mysql_change_user() 或自动重新连接的效果,只是连接没有关闭并重新打开,并且没有进行重新身份验证。 请参阅 mysql_change_user() 和自动重新连接控制。

    此示例显示 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

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

    system 命令仅适用于 Unix。

  • tee [file_name], \T [file_name]

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

    您可以使用 tee 命令以交互方式启用此功能。 如果没有参数,则使用以前的文件。 可以使用 note 命令禁用 tee 文件。 再次执行 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 选项 less 可以使结果集更具可读性,因为您可以使用左箭头和右箭头键水平滚动它。 您还可以在 less 中以交互方式使用 -S 来打开和关闭水平浏览模式。 有关更多信息,请阅读较少的手册页:

    man less
    
  • -F 和 -X 选项可以与 less 一起使用,以便在输出适合一个屏幕时退出,这在不需要滚动时很方便:

    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 程序浏览结果,同时仍将所有内容附加到文件中。 与 pager 命令一起使用的 Unix tee 和 mysql 内置 tee 命令之间的区别在于,即使您没有可用的 Unix tee,内置 tee 也可以工作。 内置的 tee 还记录屏幕上打印的所有内容,而与 pager 一起使用的 Unix tee 并没有记录那么多。 此外,可以在 mysql 中以交互方式打开和关闭 tee 文件日志记录。 当您想要将一些查询记录到文件而不是其他查询时,这很有用。

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

选项描述
\C当前连接标识符
\c为您发出的每个语句递增的计数器
\D完整的当前日期
\d默认数据库
\h服务器主机
\l当前分隔符
\m当前时间的分钟数
\n换行符
\O三个字母格式的当前月份(Jan, Feb, …)
\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当前年份,两位数
\_空间
\一个空格(反斜杠后面有一个空格)
\'单引号
\"双引号
\\文字\反斜杠字符
\xx, 对于上面未列出 的任何 “ x

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

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

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

    $> mysql --prompt="(\u@\h) [\d]> "
    (user@host) [database]>
    
  • *使用选项文件。*您可以 prompt[mysql]组中设置选项,例如/etc/my.cnf.my.cnf文件。例如:

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

    在此示例中,请注意反斜杠是双倍的。如果使用prompt 选项文件中的选项设置提示,建议在使用特殊提示选项时使用双反斜杠。允许的提示选项集和选项文件中识别的特殊转义序列集存在一些重叠。(选项文件中转义序列的规则在第 4.2.2.2 节,“使用选项文件”中列出。)如果使用单个反斜杠,重叠可能会给您带来问题。例如,\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>
    
4.5.1.3 mysql客户端日志

mysql 客户端可以为交互式执行的语句执行以下类型的日志记录:

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

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

日志记录是如何发生的

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

  • 只有在交互执行时才会记录语句。 语句是非交互式的,例如,从文件或管道中读取时。 也可以通过使用 --batch--execute 选项来抑制语句日志记录。

  • 如果语句与“忽略”列表中的任何模式匹配,则语句将被忽略且不记录。 稍后将描述该列表。

  • mysql 分别记录每个未被忽略的、非空的语句行。

  • 如果一个不可忽略的语句跨越多行(不包括终止分隔符),mysql 将这些行连接起来形成完整的语句,将换行符映射到空格,并记录结果,加上一个分隔符。

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

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

在这种情况下,mysql 记录“SELECT”、“‘Today is’”、“,”、“CURDATE()”和“;” 读取它们时的行。 在将 SELECT\n’Today is’\n,\nCURDATE() 映射到 SELECT ‘Today is’ 、CURDATE() 和分隔符后,它还会记录完整的语句。 因此,这些行出现在日志输出中:

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

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

  • “?”匹配任何单个字符。

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

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

命令行上指定的模式可能需要被引用或转义,以防止您的命令解释器对它们进行特殊处理。 例如,要禁止记录 UPDATE 和 DELETE 语句以及引用密码的语句,请像这样调用 mysql:

mysql --histignore="*UPDATE*:*DELETE*"
控制历史文件

.mysql_history 文件应使用限制性访问模式进行保护,因为可能会将敏感信息写入其中,例如包含密码的 SQL 语句的文本。 请参见第 6.1.2.1 节“密码安全的最终用户指南”。 当使用向上箭头键调用历史记录时,可以从 mysql 客户端访问文件中的语句。 请参阅禁用交互式历史记录

如果您不想维护历史文件,请先删除 .mysql_history(如果存在)。 然后使用以下任一技术来防止再次创建它:

  • MYSQL_HISTFILE 环境变量设置为 /dev/null。 要使此设置在您每次登录时生效,请将其放入 shell 的启动文件之一。

  • 创建 .mysql_history 作为 /dev/null 的符号链接; 这只需要做一次:

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

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

日志记录发生在“信息”级别。 这对应于 Unix/Linux syslog 功能上 syslog 的 LOG_INFO 优先级和 Windows 事件日志的 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;'
4.5.1.4 mysql客户端服务器端帮助
mysql> help search_string

如果你为 help 命令提供一个参数,mysql 使用它作为搜索字符串来访问 MySQL 参考手册内容中的服务器端帮助。 此命令的正确操作需要使用帮助主题信息初始化 mysql 数据库中的帮助表(请参阅第 5.1.14 节,“服务器端帮助支持”)。

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

mysql> help me

Nothing found
Please try to run 'help contents' for a list of all accessible 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
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and 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 as
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 |
+---------------+-----------+
| binlog.000015 |    724935 |
| binlog.000016 |    733481 |
+---------------+-----------+

搜索字符串可以包含通配符 % 和 _。 这些与使用 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
4.5.1.5 从文本文件执行 SQL 语句

mysql 客户端通常以交互方式使用,如下所示:

mysql db_name

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

mysql db_name < text_file

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

mysql < text_file

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

mysql> source file_name
mysql> \. file_name

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

SELECT '<info_to_display>' AS ' ';

显示的语句输出 <info_to_display>。

您还可以使用 --verbose 选项调用 mysql,这会使每个语句显示在它产生的结果之前。

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

有关批处理模式的更多信息,请参阅第 3.5 节,“在批处理模式下使用 mysql”

4.5.1.6 mysql客户端提示

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

输入行编辑

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

在 Windows 上,编辑键序列与控制台窗口中支持的命令编辑相同。在 Unix 上,键序列取决于用于构建 mysql 的输入库(例如,libedit 或 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

要查看当前的键绑定集,请暂时在 .editrc 的末尾放置一行,说明仅绑定。 然后mysql在启动时显示绑定。

禁用交互历史

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

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

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

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

Windows 上的 Unicode 支持

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

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

  • 打开一个控制台窗口。

  • 转到控制台窗口属性,选择字体选项卡,然后选择 Lucida Console 或其他兼容的 Unicode 字体。 这是必要的,因为默认情况下控制台窗口使用 DOS 光栅字体启动,该字体不适合 Unicode。

  • 使用 --default-character-set=utf8(或 utf8mb4)选项执行 mysql.exe。 此选项是必需的,因为 utf16le 是不能用作客户端字符集的字符集之一。 请参阅不允许的客户端字符集。

通过这些更改,mysql 可以使用 Windows API 使用 UTF-16LE 与控制台通信,并使用 UTF-8 与服务器通信。 (前面提到的菜单项设置了刚刚描述的字体和字符集。)

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

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

[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 idea.  Is anyone familiar
John> with UTF-8 or Unicode? Otherwise, I'll put this on my
John> TODO list and see what happens.

Yes, please do that.

Regards,
Jones
     file: inbox-jani-1
     hash: 190402944
1 row in set (0.09 sec)
使用安全更新模式 (–safe-updates)

对于初学者来说,一个有用的启动选项是 –safe-updates(或 –i-am-a-dummy,具有相同的效果)。 安全更新模式对于您可能已发出 UPDATEDELETE 语句但忘记指示要修改哪些行的 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 语句对语句处理的影响如下:

  • 如果 UPDATE 和 DELETE 语句未在 WHERE 子句中指定键约束或未提供 LIMIT 子句或两者兼有,则启用 sql_safe_updates 会导致错误。 例如:

    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

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

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

  • EXPLAIN 与 UPDATE 和 DELETE 语句不会产生安全更新错误。 这允许使用 EXPLAIN 和 SHOW WARNINGS 来查看为什么不使用索引,这在发生 range_optimizer_max_mem_size 违规或类型转换并且优化器不使用索引等情况时很有帮助,即使在 WHERE 子句。

  • 发生安全更新错误时,错误消息包括生成的第一个诊断信息,以提供有关失败原因的信息。 例如,该消息可能指示超出了 range_optimizer_max_mem_size 值或发生了类型转换,其中任何一个都可能阻止使用索引。

  • 对于多表删除和更新,仅当任何目标表使用表扫描时,才会在启用安全更新的情况下产生错误。

禁用mysql自动重新连接

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

mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO t VALUES(@a);
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)

@a 用户变量已随连接丢失,并且在重新连接后未定义。 如果在连接丢失时让 mysql 以错误终止很重要,您可以使用 –skip-reconnect 选项启动 mysql 客户端。

有关重新连接发生时自动重新连接及其对状态信息的影响的更多信息,请参阅自动重新连接控制

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

mysql客户端在客户端使用一个解析器,它不是服务器端mysqld服务器使用的完整解析器的副本。 这可能导致某些构造的处理方式不同。 例子:

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

  • mysql 客户端解析器不考虑 ANSI_QUOTES SQL 模式。 无论是否启用了 ANSI_QUOTES,它都将由 "、’ 和 ` 字符分隔的字符串视为相同。

  • 在里面 /*! … */ 注释,mysql 客户端解析器解释短格式的 mysql 命令。 服务器解析器不解释它们,因为这些命令在服务器端没有意义。

  • 如果 mysql 不希望在注释中解释短格式命令,部分解决方法是使用 --binary-mode 选项,这会导致所有 mysql 命令在非交互模式下被禁用,除了 \C 和 \d (用于输入 通过管道传输到 mysql 或使用 source 命令加载)。

4.5.2 mysqladmin — MySQL 服务器管理程序

mysqladmin 是用于执行管理操作的客户端。 您可以使用它来检查服务器的配置和当前状态,创建和删除数据库等等。

像这样调用 mysqladmin

mysqladmin [options] command [command-arg] [command [command-arg]] ...

mysqladmin 支持以下命令。 一些命令在命令名称后面带有一个参数。

  • create db_name

    创建一个名为 db_name 的新数据库。

  • debug

    告诉服务器将调试信息写入错误日志。 连接的用户必须具有 SUPER 权限。 此信息的格式和内容可能会发生变化。

    这包括有关事件调度程序的信息。 请参阅第 23.4.5 节,“事件调度程序状态”

  • drop db_name

    删除名为 db_name 的数据库及其所有表。

  • extended-status

    显示服务器状态变量及其值。

  • flush-hosts

    刷新主机缓存中的所有信息。 请参阅第 5.1.11.2 节,“DNS 查找和主机缓存”

  • flush-logs [log_type …]

    刷新所有日志。

    mysqladmin flush-logs 命令允许给出可选的日志类型,以指定要刷新的日志。 在 flush-logs 命令之后,您可以提供以下一种或多种日志类型的空格分隔列表:二进制(binary)、引擎(engine)、错误(error)、通用(general)、中继(relay)、慢速(slow)。 这些对应于可以为 FLUSH LOGS SQL 语句指定的日志类型。

  • flush-privileges

    重新加载授权表(与重新加载相同)。

  • flush-status

    清除状态变量。

  • flush-tables

    刷新所有表。

  • flush-threads

    刷新线程缓存。

  • kill id,id,…

    杀死服务器线程。 如果给出了多个线程 ID 值,则列表中不能有空格。

    要杀死属于其他用户的线程,连接的用户必须具有 SUPER 权限。

  • old-password new_password

    这类似于密码命令,但使用旧的(4.1 之前)密码散列格式存储密码。 (参见第 6.1.2.4 节,“MySQL 中的密码哈希”。)

    此命令在 MySQL 5.7.5 中被删除。

  • password new_password

    设置新密码。 这会将您与 mysqladmin 一起使用以连接到服务器的帐户的密码更改为 new_password。 因此,下次您使用同一帐户调用 mysqladmin(或任何其他客户端程序)时,您必须指定新密码。

    警告

    使用 mysqladmin 设置密码应该被认为是不安全的。 在某些系统上,您的密码对系统状态程序(例如 ps)可见,其他用户可能会调用这些程序来显示命令行。 MySQL 客户端通常在初始化序列期间用零覆盖命令行密码参数。 但是,仍然有一个短暂的时间间隔,在此期间该值是可见的。 此外,在某些系统上,这种覆盖策略是无效的,并且密码对 ps 仍然可见。 (SystemV Unix 系统和其他系统可能会遇到这个问题。)

    如果 new_password 值包含对您的命令解释器来说特殊的空格或其他字符,则需要将其括在引号内。 在 Windows 上,一定要使用双引号而不是单引号; 单引号不会从密码中删除,而是被解释为密码的一部分。 例如:

    mysqladmin password "my new password"
    

    新密码可以在密码命令后省略。 在这种情况下,mysqladmin 会提示输入密码值,这样您就可以避免在命令行上指定密码。 仅当密码是 mysqladmin 命令行上的最后一个命令时,才应省略密码值。 否则,将下一个参数作为密码。

    注意危险

    如果使用 --skip-grant-tables 选项启动服务器,则不要使用此命令。 不应用密码更改。 即使您在同一命令行上使用具有刷新权限的密码命令之前重新启用授权表也是如此,因为刷新操作发生在您连接之后。 但是,您可以使用 mysqladmin flush-privileges 重新启用授权表,然后使用单独的 mysqladmin password 命令更改密码。

  • ping

    检查服务器是否可用。 如果服务器正在运行,则 mysqladmin 的返回状态为 0,否则为 1。 即使出现 Access denied 之类的错误,这也是 0,因为这意味着服务器正在运行但拒绝连接,这与服务器未运行不同。

  • processlist

    显示活动服务器线程的列表。 这类似于 SHOW PROCESSLIST 语句的输出。 如果给出 --verbose 选项,则输出类似于 SHOW FULL PROCESSLIST。 (参见第 13.7.5.29 节,“SHOW PROCESSLIST 语句”。)

  • reload

    重新加载授权表。

  • refresh

    刷新所有表并关闭和打开日志文件。

  • shutdown

    停止服务。

  • start-slave

    在副本服务器上开始复制。

  • status

    显示简短的服务器状态消息。

  • stop-slave

    在副本服务器上停止复制。

  • variables

    显示服务器系统变量及其值。

  • version

    显示来自服务器的版本信息。

所有命令都可以缩短为任何唯一的前缀。 例如:

$> mysqladmin proc stat
+----+-------+-----------+----+---------+------+-------+------------------+
| Id | User  | Host      | db | Command | Time | State | Info             |
+----+-------+-----------+----+---------+------+-------+------------------+
| 51 | jones | localhost |    | Query   | 0    |       | show processlist |
+----+-------+-----------+----+---------+------+-------+------------------+
Uptime: 1473624  Threads: 1  Questions: 39487
Slow queries: 0  Opens: 541  Flush tables: 1
Open tables: 19  Queries per second avg: 0.0268

mysqladmin status 命令结果显示以下值:

  • Uptime

    MySQL 服务器已运行的秒数。

  • Threads

    活动线程(客户端)的数量。

  • Questions

    自服务器启动以来来自客户端的问题(查询)数。

  • Slow queries

    耗时超过 long_query_time 秒的查询数。 请参阅第 5.4.5 节,“慢查询日志”

  • Opens

    服务器已打开的表数。

  • Flush tables

    服务器已执行的 flush-*、refresh 和 reload 命令的数量。

  • Open tables

    当前打开的表数。

如果在使用 Unix 套接字文件连接到本地服务器时执行 mysqladmin shutdownmysqladmin 会一直等到服务器的进程 ID 文件被删除,以确保服务器已正确停止。

mysqladmin 支持以下选项,可以在命令行或选项文件的 [mysqladmin] 和 [client] 组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名称描述引入废弃
–bind-address使用指定的网络接口连接 MySQL Server
–compress压缩客户端和服务器之间发送的所有信息
–connect-timeout连接超时前的秒数
–count重复执行命令的迭代次数
–debug写调试日志
–debug-check程序退出时打印调试信息
–debug-info程序退出时打印调试信息、内存和 CPU 统计信息
–default-auth要使用的身份验证插件
–default-character-set指定默认字符集
–defaults-extra-file除了通常的选项文件外,还读取命名的选项文件
–defaults-file只读命名选项文件
–defaults-group-suffix选项组后缀值
–enable-cleartext-plugin启用明文身份验证插件
–force即使发生 SQL 错误也继续
–get-server-public-key从服务器请求 RSA 公钥5.7.23
–help显示帮助信息并退出
–hostMySQL服务器所在的主机
–login-path从 .mylogin.cnf 读取登录路径选项
–no-beep发生错误时不发出蜂鸣声
–no-defaults不读取选项文件
–password连接服务器时使用的密码
–pipe使用命名管道连接到服务器(仅限 Windows)
–plugin-dir插件安装目录
–port用于连接的 TCP/IP 端口号
–print-defaults打印默认选项
–protocol要使用的传输协议
–relative与 --sleep 选项一起使用时显示当前值和以前值之间的差异
–secure-auth不要以旧(4.1 之前)格式向服务器发送密码
–server-public-key-path包含 RSA 公钥的文件的路径名5.7.23
–shared-memory-base-name共享内存连接的共享内存名称(仅限 Windows)
–show-warnings语句执行后显示警告
–shutdown-timeout等待服务器关闭的最大秒数
–silent静音模式
–sleep重复执行命令,在两者之间睡眠延迟秒
–socket要使用的 Unix 套接字文件或 Windows 命名管道
–ssl启用连接加密
–ssl-ca包含受信任 SSL 证书颁发机构列表的文件
–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录
–ssl-cert包含 X.509 证书的文件
–ssl-cipher连接加密的允许密码
–ssl-crl包含证书吊销列表的文件
–ssl-crlpath包含证书吊销列表文件的目录
–ssl-key包含 X.509 密钥的文件
–ssl-mode连接到服务器的所需安全状态5.7.11
–ssl-verify-server-cert根据服务器证书公用名身份验证主机名
–tls-version加密连接的允许 TLS 协议5.7.10
–user连接到服务器时使用的 MySQL 用户名
–verbose详细模式
–version显示版本信息并退出
–vertical垂直打印查询输出行(每列值一行)
–wait如果无法建立连接,请等待并重试,而不是中止

4.5.3 mysqlcheck——一个表维护程序

mysqlcheck 客户端执行表维护:它检查、修复、优化或分析表。

每个表都被锁定,因此在处理它时对其他会话不可用,尽管对于检查操作,该表仅使用 READ 锁锁定(请参阅第 13.3.5 节,“LOCK TABLES 和 UNLOCK TABLES 语句”,了解有关 读和写锁)。 表维护操作可能很耗时,尤其是对于大型表。 如果您使用 --databases--all-databases 选项来处理一个或多个数据库中的所有表,则调用 mysqlcheck 可能需要很长时间。 (如果 MySQL 升级过程确定需要表检查,这也是如此,因为它以相同的方式处理表。)

mysqlcheck 必须在 mysqld 服务器运行时使用,这意味着您不必停止服务器来执行表维护。

mysqlcheck 以方便用户的方式使用 SQL 语句 CHECK TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE。 它确定要执行的操作要使用哪些语句,然后将语句发送到服务器以执行。 有关每个语句使用哪些存储引擎的详细信息,请参阅第 13.7.2 节,“表维护语句”中对这些语句的描述。

所有存储引擎不一定都支持所有四种维护操作。 在这种情况下,会显示一条错误消息。 例如,如果 test.t 是一个 MEMORY 表,则尝试检查它会产生以下结果:

$> mysqlcheck test t
test.t
note     : The storage engine for the table doesn't support check

如果 mysqlcheck 无法修复表,请参阅第 2.11.12 节,“重建或修复表或索引”以了解手动表修复策略。 例如,对于 InnoDB 表就是这种情况,可以使用 CHECK TABLE 进行检查,但不能使用 REPAIR TABLE 进行修复。

注意危险

最好在执行表修复操作之前对表进行备份; 在某些情况下,该操作可能会导致数据丢失。 可能的原因包括但不限于文件系统错误。

调用 mysqlcheck 的一般方法有以下三种:

mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases

与其他客户端程序相比,mysqlcheck 有一个特殊的功能。 检查表的默认行为 (--check) 可以通过重命名二进制文件来更改。 如果你想拥有一个默认修复表的工具,你应该只制作一个名为 mysqlrepairmysqlcheck 的副本,或者创建一个名为 mysqlrepairmysqlcheck 的符号链接。 如果您调用 mysqlrepair,它会修复表。
下表中显示的名称可用于更改 mysqlcheck 默认行为。

命令意义
mysqlrepair默认选项--repair
mysqlanalyze默认选项--analyze
mysqloptimize默认选项--optimize

mysqlcheck 支持以下选项,可以在命令行或选项文件的 [mysqlcheck] 和 [client] 组中指定。 有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

选项名描述引入废弃
–all-databases检查所有数据库中的所有表
–all-in-1为每个数据库执行一个语句,该语句命名该数据库中的所有表
–analyze分析表格
–auto-repair如果已检查的表已损坏,则自动修复它
–bind-address使用指定的网络接口连接 MySQL Server
–character-sets-dir安装字符集的目录
–check检查表格是否有错误
–check-only-changed仅检查自上次检查以来已更改的表
–check-upgrade使用 FOR UPGRADE 选项调用 CHECK TABLE
–compress压缩客户端和服务器之间发送的所有信息
–databases将所有参数解释为数据库名称
–debug写调试日志
–debug-check程序退出时打印调试信息
–debug-info程序退出时打印调试信息、内存和 CPU 统计信息
–default-auth要使用的身份验证插件
–default-character-set指定默认字符集
–defaults-extra-file除了通常的选项文件外,还读取命名的选项文件
–defaults-file只读命名选项文件
–defaults-group-suffix选项组后缀值
–enable-cleartext-plugin启用明文身份验证插件5.7.10
–extended检查和修复表
–fast仅检查未正确关闭的表
–fix-db-names将数据库名称转换为 5.1 格式
–fix-table-names将表名转换为 5.1 格式
–force即使发生 SQL 错误也继续
–get-server-public-key从服务器请求 RSA 公钥5.7.23
–help显示帮助信息并退出
–hostMySQL服务器所在的主机
–login-path从 .mylogin.cnf 读取登录路径选项
–medium-check进行比 --extended 操作更快的检查
–no-defaults不读取选项文件
–optimize优化表格
–password连接服务器时使用的密码
–pipe使用命名管道连接到服务器(仅限 Windows)
–plugin-dir插件安装目录
–port用于连接的 TCP/IP 端口号
–print-defaults打印默认选项
–protocol要使用的传输协议
–quick最快的检查方法
–repair执行可以修复几乎任何东西的修复,除了不唯一的唯一键
–secure-auth不要以旧(4.1 之前)格式向服务器发送密码
–server-public-key-path包含 RSA 公钥的文件的路径名5.7.23
[–shared-memory-base-name](https://dev.mysql.c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值