第4章MySQL程序

目录

4.1 MySQL程序概述
4.2使用MySQL程序
4.2.1调用MySQL程序
4.2.2指定程序选项
4.2.3连接MySQL服务器
4.2.4使用URI或键值对进行连接
4.2.5连接压缩控制
4.2.6设置环境变量
4.3 MySQL服务器和服务器启动程序
4.3.1 mysqld - MySQL服务器
4.3.2 mysqld_safe - MySQL服务器启动脚本
4.3.3 mysql.server - MySQL服务器启动脚本
4.3.4 mysqld_multi - 管理多个MySQL服务器
4.4 MySQL安装相关程序
4.4.1 comp_err - 编译MySQL错误消息文件
4.4.2 mysql_secure_installation - 改进MySQL安装安全性
4.4.3 mysql_ssl_rsa_setup - 创建SSL / RSA文件
4.4.4 mysql_tzinfo_to_sql - 加载时区表
4.4.5 mysql_upgrade - 检查并升级MySQL表
4.5 MySQL客户端程序
4.5.1 mysql - MySQL命令行客户端
4.5.2 mysqladmin - 管理MySQL服务器的客户端
4.5.3 mysqlcheck - 表维护程序
4.5.4 mysqldump - 数据库备份程序
4.5.5 mysqlimport - 数据导入程序
4.5.6 mysqlpump - 数据库备份程序
4.5.7 mysqlshow - 显示数据库,表和列信息
4.5.8 mysqlslap - 加载仿真客户端
4.6 MySQL管理和实用程序
4.6.1 ibd2sdi - InnoDB表空间SDI提取实用程序
4.6.2 innochecksum - 离线InnoDB文件校验和工具
4.6.3 myisam_ftdump - 显示全文索引信息
4.6.4 myisamchk - MyISAM表维护实用程序
4.6.5 myisamlog - 显示MyISAM日志文件内容
4.6.6 myisampack - 生成压缩的只读MyISAM表
4.6.7 mysql_config_editor - MySQL配置实用程序
4.6.8 mysqlbinlog - 处理二进制日志文件的实用程序
4.6.9 mysqldumpslow - 汇总慢查询日志文件
4.7 MySQL程序开发实用程序
4.7.1 mysql_config - 显示编译客户端的选项
4.7.2 my_print_defaults - 显示选项文件中的选项
4.8其他课程
4.8.1 lz4_decompress - 解压缩mysqlpump LZ4压缩输出
4.8.2 perror - 显示MySQL错误消息信息
4.8.3 zlib_decompress - 解压缩mysqlpump ZLIB压缩输出
4.9 MySQL程序环境变量

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

4.1 MySQL程序概述

MySQL安装中有许多不同的程序。 本节简要介绍了它们。 后面的部分提供了每个部分的更详细描述,但NDB Cluster程序除外。 每个程序的描述都指示其调用语法及其支持的选项。 第22.4节“NDB集群程序” 描述了特定于NDB集群的程序。

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

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

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

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

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

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

MySQL管理和实用程序:

MySQL程序开发实用程序:

杂项工具:

Oracle Corporation还提供 MySQL Workbench GUI工具,用于管理MySQL服务器和数据库,创建,执行和评估查询,以及从其他关系数据库管理系统迁移模式和数据以供MySQL使用。 其他GUI工具包括 MySQL Notifier MySQL for Excel

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

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

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

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

4.2使用MySQL程序

4.2.1调用MySQL程序

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

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

以单个或双短划线( - -- 开头的参数 指定程序选项。 选项通常表示程序应对服务器进行的连接类型或影响其操作模式。 第4.2.2节“指定程序选项”中 介绍了选项语法

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

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

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

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

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

4.2.2指定程序选项

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

  • 在程序名称后面的命令行中列出选项。 这适用于适用于程序特定调用的选项。

  • 列出程序在启动时读取的选项文件中的选项。 这对于您希望程序在每次运行时使用的选项很常见。

  • 列出环境变量中的选项(请参见 第4.2.6节“设置环境变量” )。 此方法对于每次运行程序时要应用的选项都很有用。 实际上,选项文件更常用于此目的,但 第5.8.3节“在Unix上运行多个MySQL实例” 讨论了环境变量非常有用的一种情况。 它描述了一种方便的技术,它使用这些变量来指定服务器和客户端程序的TCP / IP端口号和Unix套接字文件。

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

外壳> mysql -h example.com -h localhost

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

外壳> mysql --column-names --skip-column-names

MySQL程序通过检查环境变量,然后通过处理选项文件,然后通过检查命令行来确定首先给出哪些选项。 这意味着环境变量具有最低优先级,命令行选项最高。

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

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

4.2.2.1在命令行上使用选项

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

  • 命令名后面给出了选项。

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

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

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

  • 对于采用值的长选项,请将选项名称和值分隔 = 符号。 对于带有值的短选项,选项值可以紧跟在选项字母后面,或者在: -hlocalhost 之间可以 -h localhost 有等效 的空格 此规则的一个例外是指定MySQL密码的选项。 此选项可以作为 以长格式给出 在后一种情况下(没有给出密码值),程序会提示您输入密码。 密码选项也可以在短形式给予 --password=pass_val --password -ppass_val -p 但是,对于简短形式,如果给出密码值,则必须遵循选项字母而 没有中间空格 原因是如果空格跟在选项字母后面,程序无法判断后面的参数是密码值还是其他类型的参数。 因此,以下两个命令有两个完全不同的含义:

    shell> mysql -ptest
    shell>mysql -p test
    

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

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

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

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

    外壳> mysqladmin --count=1K --sleep=10 ping
    
  • 将文件名指定为选项值时,请避免使用 ~ shell元字符,因为它可能不会按预期解释。

在命令行上给出时,必须引用包含空格的选项值。 例如, --execute (或 -e )选项可以与 mysql 一起 使用, 以将SQL语句传递给服务器。 使用此选项时, mysql将 执行选项值中的语句并退出。 声明必须用引号括起来。 例如,您可以使用以下命令获取用户帐户列表:

shell> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
输入密码:******
+ ------ + ----------- +
| 用户| 主持人|
+ ------ + ----------- +
| | 吉甘|
| 根| 吉甘|
| | localhost |
| jon | localhost |
| 根| localhost |
+ ------ + ----------- +
外壳>
注意

long form( --execute )之后是等号( = )。

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

可以在命令行的选项值中传递多个SQL语句,用分号分隔:

shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
输入密码:******
+ ------------ +
| 版本()|
+ ------------ +
| 8.0.11 |
+ ------------ +
+ --------------------- +
| 现在()|
+ --------------------- +
| 2019-05-17 11:43:57 |
+ --------------------- +

4.2.2.2使用选项文件

大多数MySQL程序都可以从选项文件(有时称为配置文件)中读取启动选项。 选项文件提供了一种指定常用选项的便捷方式,因此每次运行程序时都无需在命令行中输入这些选项。

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

注意

MySQL程序开始与 --no-defaults 选择读比其他任何选项文件 .mylogin.cnf

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

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

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

注意

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

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

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

文件名 目的
%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 登录路径选项(仅限客户端)
DATADIR\mysqld-auto.cnf 系统变量持久化 SET PERSIST SET PERSIST_ONLY (仅限服务器)

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

C:\> echo %WINDIR%

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

C:\> echo %APPDATA%

BASEDIR 代表MySQL基本安装目录。 当MySQL 8.0已经使用MySQL Installer安装的,这通常是 其中 代表项目目录(通常 在Windows的英语语言版本),参见 2.3.3节,“MySQL的安装程序的Windows” C:\PROGRAMDIR\MySQL\MySQL 8.0 Server PROGRAMDIR Program Files

DATADIR 代表MySQL数据目录。 用于查找时 mysqld-auto.cnf ,其默认值是编译MySQL时内置的数据目录位置,但可以通过 --datadir 指定为处理之前 mysqld-auto.cnf 处理 的选项文件或命令行选项 进行更改

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

注意

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

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

文件名 目的
/etc/my.cnf 全球选择
/etc/mysql/my.cnf 全球选择
SYSCONFDIR/my.cnf 全球选择
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 指定的文件 --defaults-extra-file ,如果有的话
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)
DATADIR/mysqld-auto.cnf 系统变量持久化 SET PERSIST SE PERSIST_ONLY (仅限服务器)

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

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

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

DATADIR 代表MySQL数据目录。 用于查找时 mysqld-auto.cnf ,其默认值是编译MySQL时内置的数据目录位置,但可以通过 --datadir 指定为处理之前 mysqld-auto.cnf 处理 的选项文件或命令行选项 进行更改

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

选项文件语法的以下说明适用于您手动编辑的文件。 这排除 .mylogin.cnf 了使用 mysql_config_editor 创建 并加密,并且 mysqld-auto.cnf 服务器以JSON格式创建。

运行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 不是有效的转义序列字符,则 变为 而不是 请参见 第9.1.1节“字符串文字” \x x \x

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

basedir =“C:\ Program Files \ MySQL \ MySQL Server 8.0”
basedir =“C:\\ Program Files \\ MySQL \\ MySQL Server 8.0”
basedir =“C:/ Program Files / MySQL / MySQL Server 8.0”
BASEDIR = C:\\程序\ sFiles \\ \\的MySQL的MySQL \ sServer \ S8.0

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

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

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

稍后列出更多通用选项组和更具体的组。 例如,一个 [client] 组更通用,因为它被所有客户端程序读取,而一个 [mysqldump] 组只能由 mysqldump 读取 后来指定的选项覆盖在此之前指定的选项,所以把该选项组中的顺序 [client] [mysqldump] 使 mysqldump的 特异性选项覆盖 [client] 选项。

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

[客户]
端口= 3306
插座= / TMP /的mysql.sock

的[mysqld]
端口= 3306
插座= / TMP /的mysql.sock
的key_buffer_size = 16M
max_allowed_pa​​cket的= 128M

[mysqldump的]

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

[客户]
#以下密码将发送给所有标准MySQL客户端
密码=“我的密码”

[MySQL的]
无自动翻版
connect_timeout = 2

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

的[mysqld-8.0]
的sql_mode =繁体

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

!include /home/mydir/myopt.cnf

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

!includedir / home / mydir

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

注意

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

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

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

!include /home/mydir/myopt.cnf

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

[中mysqladmin]

的[mysqld]
的key_buffer_size = 16M

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

!includedir 除了读取指定目录中的所有选项文件外, 指令的处理方式类似。

如果选项文件包含 !include !includedir 指令,则只要处理选项文件,就会处理由这些指令命名的文件,无论它们出现在文件中的哪个位置。

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

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

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

  • --defaults-extra-file=file_name

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

    请参阅本节的介绍,了解可以指定此选项的位置的约束。

  • --defaults-file=file_name

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

    例外:即使有 --defaults-file mysqld的 读取 mysqld-auto.cnf 和客户端程序读取 .mylogin.cnf

    请参阅本节的介绍,了解可以指定此选项的位置的约束。

  • --defaults-group-suffix=str

    不仅要读取常用选项组,还要读取通常名称和后缀的组 str 例如, mysql 客户端通常读取 [client] [mysql] 组。 如果 --defaults-group-suffix=_other 给出 选项, mysql 也会读取 [client_other] [mysql_other] 组。

  • --login-path=name

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

  • --print-defaults

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

    请参阅本节的介绍,了解可以指定此选项的位置的约束。

4.2.2.4程序选项修饰符

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

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

- 禁用列名
--skip-列名
--column-名称= 0

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

可以通过以下任何方式指定选项 启用 形式:

--column-名
--enable-列名
--column-名称= 1

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

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

外壳> mysql --loose-no-such-option
mysql:警告:未知选项'--loose-no-such-option'

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

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

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

无法设置'back_log'的最大值

4.2.2.5使用选项设置程序变量

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

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

shell> mysql --max_allowed_packet=16777216
shell>mysql --max_allowed_packet=16M

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

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

[MySQL的]
max_allowed_pa​​cket的= 16777216

要么:

[MySQL的]
max_allowed_pa​​cket的= 16M

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

的[mysqld]
的key_buffer_size = 512M

的[mysqld]
密钥缓冲器大小= 512M

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

外壳> mysql --max=1000000
mysql:模糊选项' -  max = 1000000'(max_allowed_pa​​cket,max_join_size)

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

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

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

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

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

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

按照惯例,分配值的长形式选项使用equals( = )符号 写入 ,如下所示:

外壳> mysql --host=tonfisk --user=jon

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

外壳> mysql --host tonfisk --user jon

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

由于这种行为,当没有为期望的选项提供任何值时,偶尔会出现问题。 看看下面的例子,当用户连接到主机上运行的MySQL服务器 tonfisk 的用户 jon

外壳> mysql --host 85.224.35.45 --user jon
欢迎使用MySQL监视器。命令以;结尾; 或\ g。
您的MySQL连接ID是3
服务器版本:8.0.18源代码分发

输入'help;' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SELECT CURRENT_USER();
+ ---------------- +
| CURRENT_USER()|
+ ---------------- +
| jon @%|
+ ---------------- +
1排(0.00秒)

省略其中一个选项所需的值会产生错误,例如此处显示的错误:

shell> mysql:选项'--user'需要一个参数mysql --host 85.224.35.45 --user

在这种情况下, mysql 无法在该 --user 选项 后面找到值, 因为在命令行后没有任何 但是,如果省略 不是 最后 一个选项的选项的值 ,则会获得您可能不期望的其他错误:

shell> ERROR 2005(HY000):未知的MySQL服务器主机'--user'(1)mysql --host --user jon

因为 mysql 假定 --host 命令行 后面的任何字符串 是主机名, 所以解释为 ,并且客户端尝试连接到在名为 --user 的主机上运行的MySQL服务器 --host --user --host=--user

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

外壳> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe登录到'/usr/local/mysql/var/tonfisk.err'。
080112 12:53:40 mysqld_safe使用/ usr / local / mysql / var中的数据库启动mysqld守护程序
外壳>

关闭服务器后,按如下所示重新启动它:

外壳> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe登录到'/usr/local/mysql/var/tonfisk.err'。
080112 12:53:40 mysqld_safe使用/ usr / local / mysql / var中的数据库启动mysqld守护程序
外壳>

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

外壳> mysqld_safe --log-error my-errors &
[1] 31357
shell> 080111 22:53:31 mysqld_safe登录到'/usr/local/mysql/var/tonfisk.err'。
080111 22:53:32 mysqld_safe使用/ usr / local / mysql / var中的数据库启动mysqld守护程序
080111 22:53:34来自pid文件/usr/local/mysql/var/tonfisk.pid的mysqld_safe mysqld已结束

[1] +完成./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]参数太多(第一个额外的是'my-errors')。
2013-09-24T15:36:22.278059Z 0 [注意]使用--verbose --help获取可用选项列表!
2013-09-24T15:36:22.278076Z 0 [ERROR]中止
2013-09-24T15:36:22.279704Z 0 [注意] InnoDB:开始关机......
2013-09-24T15:36:23.777471Z 0 [注意] InnoDB:关机完成; 日志序列号2319086
2013-09-24T15:36:23.780134Z 0 [注意] mysqld:关闭完成

由于该 --log-error 选项提供默认值,因此必须使用等号为其指定不同的值,如下所示:

外壳> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe登录到'/usr/local/mysql/var/my-errors.err'。
080111 22:54:15 mysqld_safe使用/ usr / local / mysql / var中的数据库启动mysqld守护程序

外壳>

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

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

[MySQL的]

主办
用户

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

shell> ERROR 2005(HY000):未知的MySQL服务器主机'--user'(1)mysql

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

[MySQL的]

用户jon

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

shell> mysql:未知选项'--user jon'mysql

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

[MySQL的]

用户=乔恩

现在登录尝试成功:

外壳> mysql
欢迎使用MySQL监视器。命令以;结尾; 或\ g。
您的MySQL连接ID是5
服务器版本:8.0.18源代码分发

输入'help;' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SELECT USER();
+ --------------- +
| USER()|
+ --------------- +
| jon @ localhost |
+ --------------- +
1排(0.00秒)

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

外壳> mysql --user jon --host tonfisk
欢迎使用MySQL监视器。命令以;结尾; 或\ g。
您的MySQL连接ID是6
服务器版本:8.0.18源代码分发

输入'help;' 或'\ h'寻求帮助。输入'\ c'清除缓冲区。

MySQL的> SELECT USER();
+ --------------- +
| USER()|
+ --------------- +
| jon @ tonfisk |
+ --------------- +
1排(0.00秒)

指定需要在选项文件中没有值的值的选项会导致服务器因错误而中止。 假设 my.cnf 包含以下内容:

的[mysqld]
的log_error
relay_log
relay_log_index

这会导致服务器在启动时失败,如下所示:

外壳> mysqld_safe &

130924 10:41:46 mysqld_safe登录到'/home/jon/bin/mysql/var/tonfisk.err'。
130924 10:41:46 mysqld_safe使用/ home / jon / bin / mysql / var中的数据库启动mysqld守护程序
130924 10:41:47来自pid文件/home/jon/bin/mysql/var/tonfisk.pid的mysqld_safe mysqld已结束

--log-error 选项不需要参数; 但是,该 --relay-log 选项需要一个,如错误日志中所示(在没有指定值的情况下,默认为 ): datadir/hostname.err

外壳> tail -n 3 ../var/tonfisk.err

130924 10:41:46 mysqld_safe使用/ home / jon / bin / mysql / var中的数据库启动mysqld守护程序
2013-09-24T15:41:47.217180Z 0 [错误] / home / jon / bin / mysql / libexec / mysqld:选项'--relay-log'需要参数
2013-09-24T15:41:47.217479Z 0 [错误]中止

这是对先前行为的更改,其中服务器将示例 my.cnf 文件中 的最后两行解释 为, --relay-log=relay_log_index 并使用 relay_log_index 作为基本名称 创建中继日志文件 (缺陷号25192)

4.2.3连接MySQL服务器

本节介绍如何建立与MySQL服务器的连接。 有关其他信息,如果无法连接,请参见 第6.2.21节“连接MySQL的疑难解答”

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

这里的示例使用 mysql 客户端程序,但这些原则适用于其他客户端,如 mysqldump mysqladmin mysqlshow 有关通过指定路径连接MySQL Shell等客户端的更多信息,请参见 第4.2.4节“使用URI或键值对连接”

此命令调用 mysql 而不显式指定任何连接参数:

外壳> mysql

由于没有参数选项,因此默认值适用:

  • 默认主机名是 localhost 在Unix上,这具有特殊含义,如后所述。

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

  • 如果既 -p 没有 --password 给出 没有密码

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

要明确指定主机名和用户名以及密码,请在命令行上提供适当的选项:

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

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

  • 如果您使用 -p --password 选项,并指定密码值,必须有 没有空间 之间 -p --password= 以下,并输入密码。

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

如上所述,在命令行中包含密码值可能存在安全风险。 要避免此问题,请在 没有任何后续密码值的情况下 指定 --password -p 选项:

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

当密码选项没有密码值时,客户端程序会打印提示并等待您输入密码。 (在这些实例中, mydb 解释为密码,因为它是从由空间中的前述密码选项分开。)

在某些系统上,MySQL用来提示输入密码的库例程会自动将密码限制为8个字符。 这是系统库的问题,而不是MySQL。 在内部,MySQL对密码长度没有任何限制。 要解决此问题,请将MySQL密码更改为长度不超过8个字符的值,或将密码放入选项文件中。

在Unix上,MySQL程序 localhost 特别 对待主机名 ,其方式可能与您期望的与其他基于网络的程序相比有所不同。

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

  • 如果未指定主机或是 localhost ,则假定与本地主机的连接:

    • 在Windows上,如果服务器启用了共享内存连接,则客户端使用共享内存连接进行连接。

    • 在Unix上,客户端使用Unix套接字文件进行连接。 --socket 选项或 MYSQL_UNIX_PORT 环境变量可用于指定套接字名称。

  • 在Windows上,如果 host . ,或TCP / IP未启用 --socket 且未指定或主机为空,则客户端使用命名管道进行连接(如果服务器已启用命名管道连接)。 如果未启用命名管道连接,或者进行连接的用户不是 named_pipe_full_access_group 服务器系统变量 指定的Windows组的成员, 则会发生错误。

  • 否则,使用TCP / IP。

--protocol 选项使您可以建立特定类型的连接,即使其他选项通常默认为某些其他协议。 也就是说, --protocol 可以给出明确指定连接协议并覆盖前面的规则,即使对于 localhost

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

要确保客户端与本地服务器建立TCP / IP连接,请使用 --host -h 指定主机名值 127.0.0.1 ,或本地服务器的IP地址或名称。 您也可以 localhost 使用该 --protocol=TCP 选项 明确指定连接协议,即使是 例如:

shell> mysql --host=127.0.0.1
shell>mysql --protocol=TCP

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

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

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

外壳> mysql --host=remote.example.com

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

外壳> mysql --host=remote.example.com --port=13306

您也可以为本地服务器的连接指定端口号。 但是,如前所述, localhost 默认情况下,Unix 上的连接 将使用套接字文件。 您将需要如前所述强制TCP / IP连接,否则将忽略指定端口号的任何选项。

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

外壳> mysql --port=13306 --host=localhost

要使用端口号,请以下列方式之一调用该程序:

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

以下列表总结了可用于控制客户端程序如何连接到服务器的选项:

  • --default-auth=plugin

    有关要使用的客户端身份验证插件的提示。 请参见 第6.2.17节“可插入验证”

  • --host=host_name -h host_name

    运行服务器的主机。 默认值为 localhost

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

    MySQL帐户的密码。 如前所述,密码值是可选的,但如果给定的,必须有 没有空间 之间 -p --password= 以下,并输入密码。 默认是不发送密码。

  • --pipe -W

    在Windows上,使用命名管道连接到服务器。 必须使用 --enable-named-pipe 启用命名管道连接 选项 启动服务器 此外,进行连接的用户必须是 named_pipe_full_access_group 服务器系统变量 指定的Windows组的成员

  • --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 选项值,并指出了可以使用每个值的平台。 值不区分大小写。

    --protocol 连接协议 允许的操作系统
    TCP 到本地或远程服务器的TCP / IP连接 所有
    SOCKET Unix套接字文件连接到本地服务器 仅限Unix
    PIPE 与本地或远程服务器的命名管道连接 仅限Windows
    MEMORY 与本地服务器的共享内存连接 仅限Windows
  • --shared-memory-base-name=name

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

    必须使用 --shared-memory 启用共享内存连接 选项 启动服务器

  • --socket=file_name -S file_name

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

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

    必须使用 --enable-named-pipe 启用命名管道连接 选项 启动服务器 此外,进行连接的用户必须是 named_pipe_full_access_group 服务器系统变量 指定的Windows组的成员

  • --ssl*

    --ssl 如果服务器配置了SSL支持,则使用SSL 开头的选项 用于建立与服务器的安全连接。 有关详细信息,请参见 第6.3.2节“加密连接的命令选项”

  • --tls-version=protocol_list

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

  • --user=user_name -u user_name

    要使用的MySQL帐户的用户名。 默认用户名 ODBC 在Windows上,或Unix上的Unix登录名。

可以指定在建立连接时使用的不同默认值,这样每次调用客户端程序时都无需在命令行中输入它们。 这可以通过以下几种方式完成:

4.2.4使用URI或键值对进行连接

除了指定 第4.2.3节“连接到MySQL服务器”中 记录的MySQL服务器实例的连接参数外 ,还可以使用URI类型字符串或键值对指定连接。 以下MySQL客户端支持使用URI类型字符串或键值对指定与MySQL服务器实例的连接:

  • MySQL Shell

  • MySQL路由器

  • 实现X DevAPI的MySQL连接器

用于以此方式指定连接的许多参数与命令选项中使用的参数类似,本节介绍了所有有效参数。 连接的参数可以指定为:

  • URI类型字符串,例如 myuser@example.com:3306/main-schema 有关 完整语法, 请参阅 使用URI字符串连接

  • 键值对,例如 {user:'myuser', host:'example.com', port:3306, schema:'main-schema'} 有关 完整语法, 请参阅 使用键值对 进行 连接

连接参数不区分大小写,只能定义一次。 如果多次定义参数,则会生成错误。

本节包括:

基本连接参数

本节介绍指定与MySQL的连接时可用的参数。 以下参数可以作为URI类型字符串或键值对提供。 在URI类型字符串中,它们符合基本URI,请参阅 使用URI字符串连接 或者,可以将它们指定为键值对,请参阅 使用键值 对进行 连接

  • scheme :指定要使用的连接协议。 使用 mysqlx 的X协议连接和 mysql 经典MySQL协议连接。 如果未指定协议,则服务器会尝试猜测协议。

  • user :指定用于身份验证过程的MySQL用户帐户。

  • password :指定用于身份验证过程的密码。

    警告

    在连接中存储密码是不安全的,不建议使用。

  • host :指定连接引用的服务器实例。 可以是IPv4地址,IPv6地址或主机名。 如果未指定, 则默认使用 localhost

  • port :指定目标MySQL服务器正在侦听连接的网络端口。 如果未指定,则默认情况下使用33060进行X协议连接,3306是经典MySQL协议连接的默认值。

  • socket :Unix套接字或Windows命名管道的路径。 值是本地文件路径,必须使用百分比编码或使用括号括起路径来编码URI类型字符串,这样就不需要对百分比进行编码,例如公共目录分隔符 / root@localhost 使用Unix套接字 /tmp/mysqld.sock 进行 连接,请 使用 括号指定路径,例如 root@localhost?socket=(/tmp/mysqld.sock) ,或使用百分比编码 root@localhost?socket=%2Ftmp%2Fmysqld.sock

  • schema :指定在建立连接时要设置为默认的数据库。

连接选项

您可以通过附加指定作为URI类型字符串的一部分的连接选项,也可以指定 键值对。 可以使用以下选项: ?attribute=value

  • ssl-mode :用于连接的SSL模式。 以下值有效:

    • DISABLED

    • PREFERRED

    • REQUIRED

    • VERIFY_CA

    • VERIFY_IDENTITY

  • ssl-ca :PEM格式的X.509证书颁发机构的路径。

  • ssl-capath :包含PEM格式的X.509证书颁发机构的目录的路径。

  • ssl-cert :PEM格式的X.509证书的路径。

  • ssl-key :PEM格式的X.509密钥的路径。

  • ssl-crl :包含证书吊销列表的文件路径。

  • ssl-crlpath :包含证书吊销列表文件的目录的路径。

  • ssl-cipher :要使用的SSL密码。

  • tls-version :允许TLS版本进行安全连接。 以下值有效:

    • TLSv1

    • TLSv1.1

    • TLSv1.2 (仅限商业版)

  • auth-method :用于连接的身份验证方法。 默认为 AUTO ,意味着服务器尝试猜测。 以下值有效:

    • AUTO

    • MYSQL41

    • SHA256_MEMORY

    • FROM_CAPABILITIES

    • FALLBACK

    • PLAIN

    当使用X协议连接,任何配置的 auth-method 被覆盖到的认证方法序列: MYSQL41 SHA256_MEMORY PLAIN

  • get-server-public-key :从基于RSA密钥对的密码交换所需的服务器请求公钥。 在使用SSL模式的经典MySQL协议上连接到MySQL 8.0服务器时使用 DISABLED 在这种情况下,您必须指定协议,例如:

    MySQL的://用户@本地:3306弄服务器密钥=真
    
  • server-public-key-path :包含服务器所需的公钥的客户端副本的文件的路径名,用于基于RSA密钥对的密码交换。 在使用SSL模式的经典MySQL协议上连接到MySQL 8.0服务器时使用 DISABLED

  • connect-timeout :一个整数值,用于配置客户端(如MySQL Shell)的秒数,等待客户端停止尝试连接到无响应的MySQL服务器。

  • compression :当设置为 true (或1)时,如果两者都支持压缩,则此选项可以压缩客户端和服务器之间发送的所有信息。 默认值为无压缩( false 或0)。 此选项仅适用于使用经典MySQL协议的MySQL Shell连接。

使用URI字符串连接

您可以使用URI类型字符串格式指定与MySQL服务器的连接。 这些字符串可以与MySQL Shell一起使用,带有 --uri 命令选项,MySQL Shell \connect 命令,实现X DevAPI的MySQL连接器,以及MySQL路由器等工具。

URI类型字符串具有以下格式:

[ scheme://] [ user[:[ password]] @] target[:port] [/ schema] [?attribute1=value1&attribute2=value2...
重要

百分比编码必须用于URI类型字符串的元素中的保留字符。 例如,如果指定包含该 @ 字符 的字符串 ,则该字符必须替换为 %40 如果在IPv6地址中包含区域ID,则 % 必须将用作分隔符 字符替换为 %25

您可以在 基本连接参数 的URI类型字符串中使用的 参数

如果未使用建议的URI类型字符串指定密码,则会提示输入密码。 以下示例显示如何使用用户名指定URI类型字符串 user ,在每种情况下都会提示输入密码:

  • 与端口3333侦听的本地服务器实例的典型MySQL协议连接。

    MySQL的://用户@本地:3333
    
  • 与端口33065侦听的本地服务器实例的X协议连接。

    mysqlx://用户@本地:33065
    
  • 与远程服务器实例的X协议连接,使用主机名,IPv4地址和IPv6地址。

    mysqlx://user@server.example.com/
    mysqlx://user@198.51.100.14:123
    mysqlx://用户@ [2001:DB8:85±3:8D3:1319:8a2e:370:7348]
    
  • 使用套接字的X协议连接,路径使用百分比编码或括号提供。

    mysqlx://user@/path%2Fto%2Fsocket.sock
    mysqlx://用户@(/path/to/socket.sock)
    
  • 可以指定可选路径,该路径表示数据库模式。

    mysqlx://user@198.51.100.1/world%5Fx
    mysqlx://user@198.51.100.2:33060 /世界
    
  • 可以指定可选查询,包括一 key=value 形式的值 或单个值 key , 字符用作值的分隔符,可以指定多个对和键的组合。 值可以是类型列表,列表值按外观排序。 字符串必须是百分比编码或用括号括起来。 以下是等同的。

    ssluser@127.0.0.1?SSL-CA =%2Froot%2Fclientcert%2Fca-cert.pem \
    &SSL证书=%2Froot%2Fclientcert%2Fclient-cert.pem \
    &SSL密钥=%2Froot%2Fclientcert%2Fclient密钥
    
    ssluser@127.0.0.1?ssl-ca =(/根/ clientcert / CA-cert.pem)\
    &SSL证书=(/根/ clientcert /客户cert.pem)\
    &SSL密钥=(/根/ clientcert /客户端密钥)
    

前面的示例假设连接需要密码,而对于交互式客户端,在登录提示符处请求指定用户的密码。 如果用户拥有无密码帐户(不安全且不推荐),或者正在使用套接字对等凭证身份验证(例如使用Unix套接字连接),则必须在URI类型字符串中明确指定不存在密码提供并且不需要密码提示。 要执行此操作,请 在URI类型字符串 : 后面添加一个 user ,但不要在其后面指定密码。 例如:

mysqlx://用户:@localhost

使用键值对连接

您可以使用键值对指定与MySQL服务器的连接。 这些键值对以语言自然结构提供,用于实现。 这意味着您可以使用键值对作为JavaScript中的JSON对象提供连接参数,或者在Python中使用字典中的键值对。 无论键值对的提供方式如何,概念都保持不变 - 可以为本节中指定的键分配用于指定连接的值。 您可以使用MySQL Shell shell.connect() 方法或InnoDB集群 dba.createCluster() 方法中 的键值对指定连接 ,也可以使用一些实现X DevAPI的MySQL连接器指定连接。

通常,键值对由 字符和 字符 包围 { } 字符 , 用作键值对之间的分隔符。 : 在键和值之间使用 字符,并且必须对字符串进行分隔,例如使用该 ' 字符。 与URI类型字符串不同,没有必要对字符串进行百分比编码。

指定为键值对的连接具有以下格式:

{ keyvaluekeyvalue,...} 

可以用作连接键的 参数 基本连接参数中介绍

如果未指定密码(建议使用密码),则在交互式客户端中将提示输入密码。 以下示例显示如何使用键值对和用户名指定连接 user

  • 与端口33065侦听的本地服务器实例的X协议连接。

    {user:'user',host:'localhost',port:33065}
    
  • 与端口3333侦听的本地服务器实例的典型MySQL协议连接。

    {user:'user',host:'localhost',port:3333}
    
  • 与远程服务器实例的X协议连接,使用主机名,IPv4地址和IPv6地址。

    {user:'user',host:'server.example.com'}
    {user:'user',host:198.51.100.14:123}
    {user:'user',host:[2001:db8:85a3:8d3:1319:8a2e:370:7348]}
    
  • 使用套接字的X协议连接。

    {user:'user',socket:'/ path / to / socket / file /'}
    
  • 可以指定可选模式,该模式表示数据库。

    {user:'user',host:'localhost',schema:'world'}
    

前面的示例假设连接需要密码,而对于交互式客户端,在登录提示符处请求指定用户的密码。 如果用户具有无密码帐户(不安全且不推荐),或者正在使用套接字对等凭证身份验证(例如,使用Unix套接字连接),则必须明确指定不提供密码和密码提示不需要。 为此,请 '' password 使用空字符串 例如:

{user:'user',密码:'',主机:'localhost'}

4.2.5连接压缩控制

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

压缩连接源自客户端,但会影响客户端和服务器端的CPU负载,因为双方都执行压缩和解压缩操作。 由于启用压缩会降低性能,因此其优势主要发生在网络带宽较低时,网络传输时间主导压缩和解压缩操作的成本,结果集很大。

压缩控制适用于客户端程序和参与主/从复制的服务器与服务器的连接。 压缩控件不适用于组复制连接,X协议连接或 FEDERATED 连接

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

  • 客户端程序支持 --compress 为服务器连接指定使用压缩 选项。

  • 对于使用MySQL C API的程序,启用 MYSQL_OPT_COMPRESS mysql_options() 函数 选项 指定使用压缩来连接到服务器。

  • 对于主/服务器复制,启用 slave_compressed_protocol 系统变量指定使用压缩来 实现与主服务器 的从属连接。

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

4.2.6设置环境变量

可以在命令提示符下设置环境变量以影响命令处理器的当前调用,或永久设置以影响将来的调用。 要永久设置变量,可以在启动文件中设置变量,也可以使用系统提供的接口进行设置。 有关具体细节,请参阅命令解释程序的文档。 第4.9节“MySQL程序环境变量” 列出了影响MySQL程序操作的所有环境变量。

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

SET USER =your_name

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

MYSQL_TCP_PORT = 3306
导出MYSQL_TCP_PORT

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

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

setenv MYSQL_TCP_PORT 3306

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

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

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

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

PATH = $ {PATH}:在/ usr /本地/ MySQL的/ bin中

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

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

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

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

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

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

本节介绍 mysqld ,MySQL服务器以及用于启动服务器的几个程序。

4.3.1  mysqld - MySQL服务器

mysqld ,也称为MySQL Server,是完成MySQL安装中大部分工作的主程序。 MySQL Server管理对包含数据库和表的MySQL数据目录的访问。 数据目录也是其他信息(如日志文件和状态文件)的默认位置。

注意

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

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

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

外壳> mysqld --verbose --help

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

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

4.3.2  mysqld_safe - MySQL服务器启动脚本

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

注意

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

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

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

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

mysqld_safe的 读取的所有选项 [mysqld] [server] 以及 [mysqld_safe] 选项文件中的部分。 例如,如果您指定这样的 [mysqld] 部分, mysqld_safe 将查找并使用以下 --log-error 选项:

的[mysqld]
对数误差= error.log中

为了向后兼容, mysqld_safe 也会读取 [safe_mysqld] 部分,但要成为最新部分,您应该将这些部分重命名为 [mysqld_safe]

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

表4.3 mysqld_safe选项

格式 描述
--basedir MySQL安装目录的路径
--core文件大小 mysqld应该能够创建的核心文件的大小
--datadir 数据目录的路径
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
- 救命 显示帮助消息并退出
--ledir 服务器所在目录的路径
--log错误 将错误日志写入命名文件
--malloc-LIB 用于mysqld的备用malloc库
--mysqld 要启动的服务器程序的名称(在ledir目录中)
--mysqld安全日志,时间戳 用于记录的时间戳格式
--mysqld版本 服务器程序名称的后缀
--nice 使用nice程序设置服务器调度优先级
--no-默认 不读选项文件
--open-文件限制 mysqld应该能够打开的文件数
--pid文件 服务器进程标识文件的路径名
--plugin-DIR 安装插件的目录
- 港口 侦听TCP / IP连接的端口号
--skip-杀-的mysqld 不要试图杀死流浪的mysqld进程
--skip-系统日志 不要将错误消息写入syslog; 使用错误日志文件
- 插座 用于侦听Unix套接字连接的套接字文件
--syslog 将错误消息写入syslog
--syslog标签 写入syslog的消息的标签后缀
- 时区 将TZ时区环境变量设置为命名值
- 用户 以具有名称user_name或数字用户ID user_id的用户身份运行mysqld

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

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.4节“安装布局” 。) mysqld_safe 期望满足下列条件之一:

  • 可以找到相对于工作目录( 调用 mysqld_safe 的目录 的服务器和数据库 对于二进制发行版, mysqld_safe 在其工作目录下查找 bin data 目录。 对于源代码分发,它会查找 libexec var 目录。 如果 从MySQL安装目录中 执行 mysqld_safe (例如, /usr/local/mysql 对于二进制分发) 则应满足此条件

  • 如果无法找到相对于工作目录的服务器和数据库, mysqld_safe会 尝试按绝对路径名找到它们。 典型的位置是 /usr/local/libexec /usr/local/var 实际位置由在构建时分配到分布中的值确定。 如果MySQL安装在配置时指定的位置,它们应该是正确的。

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

shell> 
shell>cd mysql_installation_directorybin/mysqld_safe &

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

mysqld_safe 尝试使用 睡眠 日期 系统实用程序来确定它每秒尝试启动的次数。 如果存在这些实用程序并且每秒尝试的启动次数大于5,则 mysqld_safe将 等待1秒钟后再次启动。 这是为了防止在重复故障时CPU使用率过高。 (Bug#11761530,Bug#54035)

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

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

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

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

  • --skip-syslog :不要写错误消息 syslog 消息将写入缺省错误日志文件( host_name.err 在数据目录中),如果 --log-error 给出选项,则 写入命名文件

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

mysqld_safe 写入消息时,通知会转到日志记录目标( syslog 或错误日志文件)和 stdout 错误转到记录目标和 stderr

注意

不推荐使用 mysqld_safe 控制 mysqld 日志记录 请改用服务器的本机 支持。 有关更多信息,请参见 第5.4.2.7节“将错误记录到系统日志” syslog

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

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

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

注意

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

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

shell> mysql.server start
shell>mysql.server stop

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

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

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

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

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

    shell> cp mysql.server /etc/init.d/mysql
    shell>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]

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

的[mysqld]
DATADIR =的/ usr /本地/ MySQL的/无功
插座= / var / tmp中/的mysql.sock
端口= 3306
用户= MySQL的

[mysql.server的]
BASEDIR =的/ usr /本地/ MySQL的

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

表4.4 mysql.server选项 - 文件选项

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

  • basedir=dir_name

    MySQL安装目录的路径。

  • datadir=dir_name

    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 旨在管理几个 侦听不同Unix套接字文件和TCP / IP端口上的连接的 mysqld 进程。 它可以启动或停止服务器,或报告其当前状态。

注意

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

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

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

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

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

每个 GNR 值表示选项组编号或组编号范围。 该值应该是选项文件中组名称末尾的数字。 例如, GNR 名为的组 [mysqld17] 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 搜索选项文件,如下所示:

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

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

这些 [mysqld] [mysqld_safe] 组可用于 mysqld mysqld_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 启动服务器,则可以 在相应的 选项组中 包含 mysqld ledir 选项 这些选项指示 mysqld_safe 应该启动 的服务器的名称以及服务器 所在目录的路径名。 (请参阅 第4.3.2节“ mysqld_safe - MySQL服务器启动脚本”中 有关这些选项的说明 。)示例: [mysqldN]

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

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

  • --password=password

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

  • --silent

    静音模式; 禁用警告。

  • --tcp-ip

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

  • --user=user_name

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

  • --verbose

    更加冗长。

  • --version

    显示版本信息并退出。

关于 mysqld_multi的 一些注意 事项

  • 最重要的是 :在使用 mysqld_multi 之前 ,请确保您了解传递给 mysqld 服务器 的选项的含义 以及 为什么 要使用单独的 mysqld 进程。 注意使用 具有相同数据目录的 多个 mysqld 服务器 的危险 使用单独的数据目录,除非您 知道 自己在做什么。 开始用相同的数据目录的多台服务器并 没有 给你一个线程系统额外的性能。 看到 第5.8节“在一台机器上运行多个MySQL实例”

    重要

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

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

    外壳> mysql -u root -S /tmp/mysql.sock -p
    输入密码:
    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 系统变量以使不同的服务器侦听不同的接口。)

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

  • 您可能希望使用 mysqld --user 选项 ,但要执行此操作,您需要以 Unix超级用户( 运行 mysqld_multi 脚本 选项文件中的选项无关紧要; 如果您不是超级用户,并且 在您自己的Unix帐户下启动 mysqld 进程,则会 收到警告 root

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

#这是mysqld_multi的my.cnf文件的示例。
#通常这个文件位于home dir~ / .my.cnf或/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 MySQL安装相关程序

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

4.4.1  comp_err - 编译MySQL错误消息文件

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

comp_err 还生成 mysqld_error.h mysqld_ername.h sql_state.h 头文件。

有关如何定义错误消息的详细信息,请参阅 MySQL Internals Manual

像这样 调用 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

  • --statefile=file_name -S file_name

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

  • --version -V

    显示版本信息并退出。

4.4.2  mysql_secure_installation - 改进MySQL安装安全性

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

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

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

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

  • 您可以删除 test 数据库(默认情况下可以由所有用户访问,甚至是匿名用户),以及允许任何人访问名称以...开头的数据库的权限 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节“使用选项文件”

表4.5 mysql_secure_installation选项

格式 描述 介绍
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
- 救命 显示帮助消息并退出
- 主办 要连接的主机(IP地址或主机名)
--no-默认 不读选项文件
- 密码 接受但始终被忽略。 无论何时调用mysql_secure_installation,都会提示用户输入密码。
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
- 插座 对于localhost的连接,要使用的Unix套接字文件
--ssl-CA 包含受信任的SSL证书颁发机构列表的文件
--ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
--ssl证书 包含X.509证书的文件
--ssl-密码 用于连接加密的允许密码列表
--ssl-CRL 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-FIPS模式 是否在客户端启用FIPS模式 8.0.11
--ssl键 包含X.509密钥的文件
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
- 默认情况下使用 执行时没有用户交互性
- 用户 连接到服务器时使用的MySQL用户名

4.4.3  mysql_ssl_rsa_setup - 创建SSL / RSA文件

如果缺少这些文件,此程序将创建SSL证书和密钥文件以及使用SSL进行安全连接所需的RSA密钥对文件以及使用RSA通过未加密连接进行安全密码交换。 如果现有的SSL文件已过期, mysql_ssl_rsa_setup 也可用于创建新的SSL文件。

注意

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

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

重要

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_setup 环境变量 指定的位置 检查 openssl 二进制文件 PATH 如果 找不到 openssl mysql_ssl_rsa_setup 什么都不做。 如果 存在 openssl mysql_ssl_rsa_setup 将在该 --datadir 选项 指定的MySQL数据目录中查找默认的SSL和RSA文件, 如果 --datadir 未给出 选项 查找 已编译的数据目录

  2. mysql_ssl_rsa_setup 使用以下名称检查数据目录中的SSL文件:

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

    ca.pem自签名CA证书
    ca-key.pem CA私钥
    server-cert.pem服务器证书
    server-key.pem服务器私钥
    client-cert.pem客户端证书
    client-key.pem客户端私钥
    

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

  4. mysql_ssl_rsa_setup 使用以下名称检查数据目录中的RSA文件:

    private_key.pem私钥/公钥对的私有成员
    public_key.pem私钥/公钥对的公共成员
    
  5. 如果存在任何这些文件,则 mysql_ssl_rsa_setup不会 创建任何RSA文件。 否则,它会调用 openssl 来创建它们。 这些文件通过未加密的连接使用RSA进行安全密码交换,以便对由 sha256_password or或 caching_sha2_password plugin 进行身份验证的帐户进行安全 ; 请参见 第6.4.1.2节“SHA-256可插拔认证” 第6.4.1.3节“高速缓存SHA-2可插拔认证”

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

在启动时,MySQL服务器会自动使用 mysql_ssl_rsa_setup 创建的SSL文件 来启用SSL,如果除了 --ssl (可能还有 --ssl-cipher 之外没有给出明确的SSL选项 如果你喜欢明确指定文件,调用与客户 --ssl-ca --ssl-cert 以及 --ssl-key 选择在启动时命名 ca.pem server-cert.pem server-key.pem 分别文件。

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

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

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

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

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

  1. 停止服务器。

  2. 重命名或删除现有的SSL文件。 您可能希望先备份它们。 (RSA文件不会过期,因此您无需删除它们 .mysql_ssl_rsa_setup 会看到它们存在而不会覆盖它们。)

  3. 使用 选项 运行 mysql_ssl_rsa_setup --datadir 以指定创建新文件的位置。

  4. 重启服务器。

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

表4.6 mysql_ssl_rsa_setup选项

格式 描述
--datadir 数据目录的路径
- 救命 显示帮助消息并退出
- 后缀 X.509证书Common Name属性的后缀
--uid 用于文件权限的有效用户的名称
--verbose 详细模式
- 版 显示版本信息并退出

  • --help ?

    显示帮助消息并退出。

  • --datadir=dir_name

    mysql_ssl_rsa_setup 应该检查默认SSL和RSA文件 的目录路径, 如果缺少这些文件,它应该创建文件。 默认值是已编译的数据目录。

  • --suffix=str

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

  • --uid=name -v

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

  • --verbose -v

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

  • --version -V

    显示版本信息并退出。

4.4.4  mysql_tzinfo_to_sql - 加载时区表

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

mysql_tzinfo_to_sql 可以通过以下几种方式调用:

shell> 
shell> 
shell>mysql_tzinfo_to_sql tz_dirmysql_tzinfo_to_sql tz_file tz_namemysql_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_file 与时区名称对应 的单个时区文件 tz_name

外壳> 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.5  mysql_upgrade - 检查并升级MySQL表

注意

从MySQL 8.0.16开始,MySQL服务器执行以前由 mysql_upgrade 处理的升级任务 (有关详细信息,请参见 第2.11.3节“MySQL升级过程升级” )。 因此, mysql_upgrade 是不需要的,并且从该版本开始不推荐使用,并且将在未来的MySQL版本中删除。 由于 mysql_upgrade 不再执行升级任务,因此无条件退出状态为0。

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

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

  • 它升级了性能架构 INFORMATION_SCHEMA sys 架构。

  • 它检查用户模式。

如果 mysql_upgrade 发现某个表可能存在不兼容性,则会执行表检查,如果发现问题,则会尝试进行表修复。 如果表无法修复,请参见 第2.11.13节“重建或修复表或索引” 以获取手动表修复策略。

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

警告

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

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

像这样 使用 mysql_upgrade

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

  2. 调用 mysql_upgrade 以升级 mysql 模式中 的系统表, 并检查和修复其他模式中的表:

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

如果要升级多个MySQL服务器实例, 使用适合连接到每个所需服务器的连接参数 调用 mysql_upgrade 例如,如果服务器在部件3306到3308上的本地主机上运行,​​请通过连接到相应的端口来升级每个服务器:

shell> 
shell> 
shell>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 用户 运行 如果 root 运行 mysql_upgrade 时密码已过期 ,您将看到一条消息,指出您的密码已过期且 mysql_upgrade因此 失败。 要更正此问题,请重置 root 密码以将其 取消, 然后再次 运行 mysql_upgrade 首先,连接到服务器 root

shell> mysql -u root -p
输入密码:****  < - 在此处输入root密码

使用 ALTER USER 以下方法 重置密码

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

然后退出 mysql 再次 运行 mysql_upgrade

外壳> mysql_upgrade [options]
注意

如果运行服务器并将 disabled_storage_engines 系统变量设置为禁用某些存储引擎(例如, MyISAM ),则 mysql_upgrade 可能会失败,并显示如下错误:

mysql_upgrade:[ERROR] 3161:存储引擎MyISAM被禁用
(不允许创建表)。

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

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

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

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

注意

mysql_upgrade_info 文件已弃用,将在以后的MySQL版本中删除。

mysql_upgrade 检查 mysql.user 系统表行,对于具有空 plugin 列的 任何行, 'mysql_native_password' 如果凭据使用与该插件兼容的哈希格式 则将该 列设置为 必须手动升级具有4.1之前密码哈希的行。

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

除非使用该 --skip-sys-schema 选项 调用,否则 mysql_upgrade 将安装 sys 架构(如果未安装),否则将其升级到当前版本。 如果 sys 模式存在但没有 version 视图, 则会发生错误 ,前提是缺少它表示用户创建的模式:

存在没有sys.version视图的sys模式。如果
你有一个用户创建的sys模式,必须重命名为
升级成功。

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

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

表4.7 mysql_upgrade选项

格式 描述 介绍
--bind地址 使用指定的网络接口连接到MySQL服务器
--character集-DIR 安装字符集的目录
- 压缩 压缩客户端和服务器之间发送的所有信息
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
- 力 即使已经为当前的MySQL版本执行了mysql_upgrade,也强制执行
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
--login路径 从.mylogin.cnf中读取登录路径选项
--max允许的分组 发送到服务器或从服务器接收的最大数据包长度
--net缓冲长度 TCP / IP和套接字通信的缓冲区大小
--no-默认 不读选项文件
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
--skip-SYS-模式 不要安装或升级sys架构
- 插座 对于localhost的连接,要使用的Unix套接字文件
--ssl-CA 包含受信任的SSL证书颁发机构列表的文件
--ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
--ssl证书 包含X.509证书的文件
--ssl-密码 用于连接加密的允许密码列表
--ssl-CRL 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-FIPS模式 是否在客户端启用FIPS模式 8.0.11
--ssl键 包含X.509密钥的文件
--ssl模式 与服务器连接的安全状态
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
--upgrade-系统表 仅更新系统表,而不更新用户模式
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
--version检查 检查服务器版本是否正确
--write,二进制日志 将所有语句写入二进制日志

4.5 MySQL客户端程序

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

4.5.1  mysql - MySQL命令行客户端

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

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

注意

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

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

外壳> mysql db_name

要么:

shell> 
输入密码:mysql --user=user_name --password db_nameyour_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节“使用选项文件”

表4.8 mysql客户端选项

格式 描述 介绍 删除
--auto-翻版 启用自动重新散列
--auto垂直输出 启用自动垂直结果集显示
- 批量 不要使用历史文件
--binary-AS - 己 以十六进制表示法显示二进制值 8.0.2
--binary模式 禁用\ r \ n - 到 - \ n转换和处理\ 0作为查询结束
--bind地址 使用指定的网络接口连接到MySQL服务器
--character集-DIR 安装字符集的目录
--column-名 在结果中写入列名称
--column型信息 显示结果集元数据
- 评论 是否在发送到服务器的语句中保留或删除注释
- 压缩 压缩客户端和服务器之间发送的所有信息
--connect过期密码 指示服务器客户端可以处理过期密码沙箱模式。
--connect超时 连接超时前的秒数
- 数据库 要使用的数据库
--debug 写调试日志; 仅当MySQL是使用调试支持构建时才支持
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
对齐和美化--delimiter 设置语句分隔符
--enable-明文-插件 启用明文身份验证插件
- 执行 执行该语句并退出
- 力 即使发生SQL错误也继续
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
--histignore 模式指定要记录的忽略哪些语句
- 主办 连接到给定主机上的MySQL服务器
--html 生成HTML输出
- 忽略空间 忽略函数名后的空格
--init命令 连接后执行的SQL语句
--line号码 写错误的行号
--local-infile的 启用或禁用LOAD DATA的LOCAL功能
--login路径 从.mylogin.cnf中读取登录路径选项
--max允许的分组 发送到服务器或从服务器接收的最大数据包长度
--max联接尺寸 使用--safe-updates时连接中行的自动限制
--named的命令 启用命名的mysql命令
--net缓冲长度 TCP / IP和套接字通信的缓冲区大小
--no-自动翻版 禁用自动重新散列
--no哔 发生错误时不要发出蜂鸣声
--no-默认 不读选项文件
--one数据库 忽略除命令行上指定的默认数据库的语句之外的语句
--pager 使用给定命令进行分页查询输出
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 提示 将提示符设置为指定的格式
- 协议 要使用的连接协议
- 快 不要缓存每个查询结果
- 生的 写入列值而不进行转义转换
--reconnect 如果与服务器的连接丢失,则自动尝试重新连接
--i-am-a-dummy - 安全更新 仅允许指定键值的UPDATE和DELETE语句
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
- 选择限制 使用--safe-updates时SELECT语句的自动限制
--server-公钥路径 包含RSA公钥的文件的路径名
--shared存储器碱基名 用于共享内存连接的共享内存的名称
--show-警告 如果有的话,在每个语句后显示警告
--sigint,忽视 忽略SIGINT信号(通常是键入Control + C的结果)
- 无声 静音模式
--skip-自动翻版 禁用自动重新散列
--skip-列名 不要在结果中写入列名
--skip-行号 跳过错误的行号
--skip-命名命令 禁用命名的mysql命令
--skip-寻呼机 禁用分页
--skip-重新连接 禁用重新连接
- 插座 对于连接到localhost,要使用的Unix套接字文件或Windows命名管道
--ssl-CA 包含受信任的SSL证书颁发机构列表的文件
--ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
--ssl证书 包含X.509证书的文件
--ssl-密码 用于连接加密的允许密码列表
--ssl-CRL 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-FIPS模式 是否在客户端启用FIPS模式 8.0.11
--ssl键 包含X.509密钥的文件
--ssl模式 与服务器连接的安全状态
--syslog 将交互式语句记录到syslog中
- 表 以表格格式显示输出
--tee 将输出的副本附加到命名文件
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
--unbuffered 每次查询后刷新缓冲区
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出
- 垂直 垂直打印查询输出行(每列值一行)
- 等待 如果无法建立连接,请等待并重试,而不是中止
--xml 生成XML输出