第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类型字符串不同,没有必要对字符串进行百分比编码。

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

{ key:value,key:value,...} 

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

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

  • --help , -?

    显示帮助消息并退出。

  • --auto-rehash

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

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

    注意

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

  • --auto-vertical-output

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

  • --batch , -B

    使用制表符作为列分隔符打印结果,每行都在新行上。 使用此选项, mysql 不使用历史记录文件。

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

  • --binary-as-hex

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

  • --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.14节“字符集配置” 。

  • --column-names

    在结果中写入列名称。

  • --column-type-info

    显示结果集元数据。

  • --comments , -c

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

    注意

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

    不推荐使用评论剥离。 此功能以及控制它的选项将在未来的MySQL版本中删除。

  • --compress , -C

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

  • --connect-expired-password

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

  • --connect-timeout=value

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

  • --database=db_name , -D db_name

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

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

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

    只有在使用MySQL构建MySQL时,此选项才可用 WITH_DEBUG 。 Oracle提供的MySQL发布二进制文件 不是 使用此选项构建的。

  • --debug-check

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

  • --debug-info , -T

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

  • --default-auth=plugin

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

  • --default-character-set=charset_name

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

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

    有关更多信息,请参见 第10.4节“连接字符集和排序规则” 和 第10.14节“字符集配置” 。

  • --defaults-extra-file=file_name

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

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

  • --defaults-file=file_name

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

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

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

  • --defaults-group-suffix=str

    不仅要读取常用选项组,还要读取通常名称和后缀的组 str 。 例如, mysql 通常会读取 [client] 和 [mysql] 组。 如果 --defaults-group-suffix=_other 给出 了 选项, mysql 也会读取 [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.4节“客户端明文可插拔认证” 。)

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

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

  • --histignore

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

  • --host=host_name , -h host_name

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

  • --html , -H

    生成HTML输出。

  • --ignore-spaces , -i

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

  • --init-command=str

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

  • --line-numbers

    写错误的行号。 禁用此功能 --skip-line-numbers 。

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

    启用或禁用 LOCAL 功能 LOAD DATA 。 对于 mysql ,默认情况下禁用此功能。 没有值,该选项启用 LOCAL 。 该选项可以作为 --local-infile=0 或 --local-infile=1 明确禁用或启用 LOCAL 。 启用本地数据加载还需要服务器允许它; 请参见 第6.1.6节“LOAD DATA LOCAL的安全问题”

  • --login-path=name

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

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

  • --one-database , -o

    忽略除默认数据库是命令行上命名的数据时发生的语句。 此选项很简陋,应谨慎使用。 语句过滤仅基于 USE 语句。

    最初, mysql 在输入中执行语句,因为 db_name 在命令行上 指定数据库 等同于 在输入的开头 插入 。 然后,对于 遇到的 每个 语句, mysql 接受或拒绝以下语句,具体取决于命名数据​​库是否是命令行中的数据库。 陈述的内容并不重要。 USE db_name USE

    假设 调用 mysql 来处理这组语句:

    从db2.t2中删除;
    使用db2;
    DROP TABLE db1.t1;
    CREATE TABLE db1.t1(i INT);
    使用db1;
    插入t1(i)VALUES(1);
    CREATE TABLE db2.t1(j INT);
    

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

    • DELETE 执行 该 语句是因为默认数据库是 db1 ,即使该语句在不同的数据库中命名一个表。

    • 该 DROP TABLE 和 CREATE TABLE 语句不被执行,因为默认数据库不 db1 ,即使语句命名的表 db1 。

    • 该 INSERT 和 CREATE TABLE 语句执行,因为默认数据库 db1 ,即使 CREATE TABLE 声明名字在不同的数据库中的表。

  • --pager[=command]

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

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

    连接服务器时使用的密码。 如果使用短选项表单( -p ), 则选项和密码之间 不能 有空格。 如果省略 命令行上 password 的 --password 或 -p 选项 后面 的 值 , mysql 会提示输入一个值。

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

  • --pipe , -W

    在Windows上,使用命名管道连接到服务器。 仅当服务器支持命名管道连接时,此选项才适用。

  • --plugin-dir=dir_name

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

  • --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.3节“连接到MySQL服务器” 。

  • --quick , -q

    不要缓存每个查询结果,在收到时打印每一行。 如果输出暂停,这可能会降低服务器的速度。 使用此选项, mysql 不使用历史记录文件。

  • --raw , -r

    对于表格输出, 列周围 的 “ 装箱 ” 可以将一个列值与另一个列值区分开来。 对于非表格输出(例如在批处理模式下或在 给出 --batch 或 --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

    在MySQL 8.0.3中删除了此选项。

  • --select-limit=value

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

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

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

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

    只有在使用OpenSSL构建MySQL时,此选项才可用。

    有关 sha256_password 和 caching_sha2_password 插件的信息,请参见 第6.4.1.2节“SHA-256可插拔认证” 和 第6.4.1.3节“高速缓存SHA-2可插拔认证” 。

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

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

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

  • --show-warnings

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

  • --sigint-ignore

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

  • --silent , -s

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

    此选项会导致非常规输出格式和特殊字符的转义。 可以使用原始模式禁用转义; 请参阅 --raw 选项 的说明 。

  • --skip-column-names , -N

    不要在结果中写入列名。

  • --skip-line-numbers , -L

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

  • --socket=path , -S path

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

  • --ssl*

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

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

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

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

    • OFF :禁用FIPS模式。

    • ON :启用FIPS模式。

    • STRICT :启用 “ 严格 ” FIPS模式。

    注意

    如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值 --ssl-fips-mode 是 OFF 。 在这种情况下,设置 --ssl-fips-mode 为 ON 或 STRICT 导致客户端在启动时生成警告并在非FIPS模式下运行。

  • --syslog , -j

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

    以下是使用Linux在Linux上生成的输出示例 --syslog 。 此输出的格式是为了便于阅读; 每条记录的消息实际上只占一行。

    3月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;'
    3月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-ciphersuites=ciphersuite_list

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

    MySQL 8.0.16中添加了此选项。

  • --tls-version=protocol_list

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

  • --unbuffered , -n

    每次查询后刷新缓冲区。

  • --user=user_name , -u user_name

    连接到服务器时使用的MySQL用户名。

  • --verbose , -v

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

  • --version , -V

    显示版本信息并退出。

  • --vertical , -E

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

  • --wait , -w

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

  • --xml , -X

    生成XML输出。

    <field name =“ column_name”> NULL </ field>
    

    --xml 与 mysql一起 使用 时的输出 与 mysqldump 的输出 匹配 --xml 。 有关 详细信息 , 请参见 第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”>
    <行>
    <field name =“Variable_name”> version </ field>
    <field name =“Value”> 5.0.40-debug </ field>
    </行>
    
    <行>
    <field name =“Variable_name”> version_comment </ field>
    <field name =“Value”>来源分配</ field>
    </行>
    
    <行>
    <field name =“Variable_name”> version_compile_machine </ field>
    <field name =“Value”> i686 </ field>
    </行>
    
    <行>
    <field name =“Variable_name”> version_compile_os </ field>
    <field name =“Value”> suse-linux-gnu </ field>
    </行>
    </结果集>
    

4.5.1.2 mysql客户端命令

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

MySQL的> help

所有MySQL命令列表:
请注意,所有文本命令必须首先在线并以';'结尾
?(\?)`help'的同义词。
clear(\ c)清除当前的输入语句。
connect(\ r \ n)重新连接到服务器。可选参数是db和host。
分隔符(\ d)设置语句分隔符。
编辑(\ e)使用$ EDITOR编辑命令。
ego(\ G)发送命令到mysql服务器,垂直显示结果。
退出(\ q)退出mysql。和戒烟一样。
go(\ g)发送命令到mysql服务器。
帮助(\ h)显示此帮助。
nopager(\ n)禁用寻呼机,打印到标准输出。
notee(\ t)不要写入outfile。
寻呼机(\ P)设置PAGER [to_pager]。通过PAGER打印查询结果。
print(\ p)打印当前命令。
提示符(\ R)更改您的mysql提示符。
退出(\ q)退出mysql。
rehash(\#)重建完成哈希。
source(\。)执行SQL脚本文件。将文件名作为参数。
status(\ s)从服务器获取状态信息。
system(\!)执行系统shell命令。
tee(\ T)设置outfile [to_outfile]。将所有内容添加到给定内容
               OUTFILE。
使用(\ u)使用其他数据库。将数据库名称作为参数。
charset(\ C)切换到另一个charset。可能需要进行处理
               具有多字节字符集的binlog。
警告(\ W)在每个语句后显示警告。
nowarning(\ w)每次声明后都不显示警告。
resetconnection(\ x)清理会话上下文。

对于服务器端帮助,请键入“帮助内容”

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

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

/* ... */ 不支持 在多行 注释中 使用短格式命令 。

  • 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语句之间的分隔符 的字符串 。 默认值为分号( ; )。

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

    除了在带引号的字符串中, mysql 将分隔符字符串的实例解释为语句分隔符。 注意定义可能出现在其他单词中的分隔符。 例如,如果将分隔符定义为 X ,则无法 INDEX 在语句中 使用单词 。 mysql 将其解释为 INDE 后跟分隔符 X 。

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

  • edit , \e

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

    该 edit 命令仅适用于Unix。

  • ego , \G

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

  • exit , \q

    退出 mysql 。

  • go , \g

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

  • nopager , \n

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

    该 nopager 命令仅适用于Unix。

  • notee , \t

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

  • nowarning , \w

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

  • pager [command] , \P [command]

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

    输出分页可以使用 pager 命令 以交互方式启用, 并禁用 nopager 。 该命令采用可选参数; 如果给定,则将寻呼程序设置为该。 如果没有参数,则将寻呼机设置为在命令行上设置的寻呼机,或者 stdout 如果未指定寻呼机。

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

  • print , \p

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

  • prompt [str] , \R [str]

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

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

  • quit , \q

    退出 mysql 。

  • rehash , \#

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

  • resetconnection , \x

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

    重置连接具有类似于 mysql_change_user() 或自动重新 连接的效果 ,但连接未关闭并重新打开,并且未执行重新身份验证。 请参见 第28.7.7.3节“mysql_change_user()” )并参见 第28.7.28节“C API自动重新连接控制” )。

    这个例子说明了如何 resetconnection 清除会话状态中维护的值:

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

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

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

  • status , \s

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

  • system command , \! command

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

    该 system 命令仅适用于Unix。

  • tee [file_name] , \T [file_name]

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

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

  • use db_name , \u db_name

    使用 db_name 作为默认数据库。

  • warnings , \W

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

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

  • 您可以使用它来写入文件,结果只发送到文件:

    MySQL的> pager cat > /tmp/log.txt
    

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

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

    外壳> man less
    
  • 在 -F 和 -X 选项可以与使用 较少 以使其退出,如果输出一个屏幕上,这是方便的,当没有滚动是必要的上配合:

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

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

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

您还可以组合 tee 和 pager 功能。 有一个 tee 启用和文件 pager 设置为 少 ,并且你能够浏览使用结果 少 的程序,仍然有一切附加在文件中的同一时间。 tee 与 pager 命令 一起使用 的Unix 与 mysql 内置 命令 之间的区别在于 即使你没有Unix tee tee ,内置也能 tee 正常工作 。 内置 还记录了屏幕上打印的所有内容,而Unix tee则 使用了 tee pager 不记得那么多。 此外, tee 可以在 mysql中以 交互方式打开和关闭文件日志记录 。 当您想要将某些查询记录到文件而不是其他查询时,这非常有用。

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

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

您的完整 帐户名称 user_name@host_name

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

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

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

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

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

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

    [MySQL的]
    提示=(\\ 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设置为'(\ u @ \ h)[\ d]> \ _'
    (user@ host)[ database]>
    (user@ host)[ database]>提示
    返回mysql的默认PROMPT>
    MySQL的>
    

4.5.1.3 mysql客户端日志记录

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

  • 在Unix上, mysql 将语句写入历史文件。 默认情况下,此文件 .mysql_history 在主目录中 命名 。 要指定其他文件,请设置 MYSQL_HISTFILE 环境变量 的值 。

  • 在所有平台上,如果 --syslog 给出 了该 选项, mysql 会将语句写入系统日志记录工具。 在Unix上,这是 syslog ; 在Windows上,它是Windows事件日志。 记录消息的出现位置取决于系统。 在Linux上,目标通常是 /var/log/messages 文件。

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

记录如何发生

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

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

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

  • mysql分别 记录每个nonignored,nonmpty语句行。

  • 如果非签名语句跨越多行(不包括终止分隔符),则 mysql 连接这些行以形成完整语句,将换行符映射到空格,并记录结果,以及分隔符。

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

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

在这种情况下, mysql 记录 “ SELECT ” , “ 'Today is' ” , “ , ” , “ CURDATE() ” 和 “ ; “ 读它们的行。 它还映射完整语句,映射 SELECT\n'Today is'\n,\nCURDATE() 到 SELECT 'Today is' , CURDATE() 后加上分隔符。 因此,这些行显示在记录输出中:

选择
'今天​​是'
,
CURDATE()
;
SELECT'Today is',CURDATE();

对于日志记录, mysql 忽略与 “ ignore ” 列表 中的任何模式匹配的语句 。 默认情况下,模式列表 "*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 功能和 Windows事件日志 的 LOG_INFO 优先级 。 有关日志记录功能的配置,请参阅系统文档。 syslog syslog EVENTLOG_INFORMATION_TYPE

邮件大小限制为1024字节。

消息由标识符 MysqlClient 后跟这些值组成:

  • SYSTEM_USER

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

  • MYSQL_USER

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

  • CONNECTION_ID :

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

  • DB_SERVER

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

  • DB

    默认数据库或未 -- 选择任何数据库。

  • QUERY

    记录的语句的文本。

以下是使用Linux在Linux上生成的输出示例 --syslog 。 此输出的格式是为了便于阅读; 每条记录的消息实际上只占一行。

3月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;'
3月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

什么都没找到
请尝试运行“帮助内容”以获取所有可访问主题的列表

使用 帮助内容 查看帮助类别列表:

MySQL的> help contents
您询问了有关帮助类别的帮助:“内容”
有关更多信息,请键入“help <item>”,其中<item>是其中之一
以下类别:
   帐户管理
   管理
   数据定义
   数据操作
   数据类型
   功能
   用于GROUP BY的函数和修饰符
   地理特征
   语言结构
   插件
   存储引擎
   存储例程
   表维护
   交易
   触发器

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

MySQL的> help logs
存在许多针对您的请求的帮助项目。
要提出更具体的请求,请输入“help <item>”,
其中<item>是以下主题之一:
   节目
   显示二进制日志
   SHOW ENGINE
   显示日志

使用主题作为搜索字符串以查看该主题的帮助条目:

MySQL的> help show binary logs
名称:'SHOW BINARY LOGS'
描述:
句法:
显示二进制日志
显示主日志

列出服务器上的二进制日志文件。该声明用作
[purge-binary-logs]中描述的过程的一部分,显示了如何
确定可以清除哪些日志。

mysql> SHOW BINARY LOGS;
+ --------------- + ----------- ----------- + +
| Log_name | File_size | 加密|
+ --------------- + ----------- ----------- + +
| binlog.000015 | 724935 | 是的|
| binlog.000016 | 733481 | 是的|
+ --------------- + ----------- ----------- + +

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

MySQL的> HELP rep%
存在许多针对您的请求的帮助项目。
要提出更具体的请求,请输入“help <item>”,
其中<item>是以下之一
话题:
   修理表
   重复功能
   重复循环
   更换
   更换功能

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> 
mysql>source file_name\. file_name

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

SELECT'<info_to_display>'AS'';

声明显示了输出 <info_to_display> 。

您还可以 使用该 选项 调用 mysql --verbose ,这会导致每个语句在其生成的结果之前显示。

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

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

4.5.1.6 mysql客户端提示

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

输入线编辑

mysql 支持输入行编辑,使您可以修改当前输入行或调用以前的输入行。 例如, 左箭头 和 右箭头 键当前输入行内水平移动,而 向上箭头 和 向下箭头 键上下移动通过该组以前输入线。 退格键 删除光标前的字符,键入新字符将在光标位置输入。 要输入该行,请按 Enter键 。

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

可在线 获取 libedit 和 readline 库的 文档 。 要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。 这是您的主目录中的文件: .editrc for libedit 和 .inputrc for readline 。

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

绑定“^ W”ed-delete-prev-word
绑定“^ U”vi-kill-line-prev

要查看当前的键绑定集,请暂时添加仅 bind 在结尾处显示的行 .editrc 。 mysql 会在启动时显示绑定。

禁用交互式历史记录

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

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

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

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

Windows上的Unicode支持

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

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

  1. 打开控制台窗口。

  2. 转到控制台窗口属性,选择字体选项卡,然后选择Lucida Console或其他一些兼容的Unicode字体。 这是必要的,因为控制台窗口默认使用不适合Unicode的DOS光栅字体启动。

  3. 使用 (或 )选项 执行 mysql.exe 。 此选项是必需的,因为 其中一个字符集不能用作客户端字符集。 请参见 不允许的客户端字符集 。 --default-character-set=utf8 utf8mb4 utf16le

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

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

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

[MySQL的]
默认字符集= UTF8
垂直显示查询结果

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

MySQL的> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1。排******************** *******
  msg_nro:3068
     日期:2000-03-01 23:29:50
time_zone:+0200
mail_from:蒙蒂
    回复:monty@no.spam.com
  mail_to:“Thimble Smith”<tim@no.spam.com>
      sbj:UTF-8
      txt:>>>>>“顶针”== Thimble Smith写道:

顶针>嗨。我认为这是一个好主意。有人熟悉吗?
顶针>使用UTF-8还是Unicode?否则,我会把它放在我的身上
顶针> TODO列表,看看会发生什么。

是的,请这样做。

问候,
蒙蒂
     文件:inbox-jani-1
     哈希:190402944
1排(0.09秒)
使用安全更新模式(--safe-updates)

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

该 --safe-updates 选项使得 MySQL的 执行下面的语句,当它连接到MySQL服务器,设置的会话值 sql_safe_updates , sql_select_limit 和 max_join_size 系统变量:

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

该 SET 语句影响语句处理如下:

  • 如果 sql_safe_updates 原因 UPDATE 和 DELETE 语句未在 WHERE 子句中 指定键约束 ,或提供 LIMIT 子句或两者 , 则 启用 原因 和 语句以产生错误 。 例如:

    UPDATE tbl_nameSET not_key_column= valWHERE key_column= val;
    
    UPDATE tbl_nameSET not_key_column= valLIMIT 1;
    
  • 设置 sql_select_limit 为1,000会导致服务器将所有 SELECT 结果集 限制 为1,000行,除非该语句包含 LIMIT 子句。

  • 如果服务器估计它必须检查超过1,000,000个行组合,则 设置 max_join_size 为1,000,000会导致多表 SELECT 语句产生错误。

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

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

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

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

  • EXPLAIN with UPDATE 和 DELETE 语句不会产生安全更新错误。 这样可以使用 EXPLAIN plus SHOW WARNINGS 来查看未使用索引的原因,这在 range_optimizer_max_mem_size 发生违规或类型转换以及优化程序不使用索引的 情况下很有用, 即使在 WHERE 子句 中指定了键列也是如此 。

  • 发生安全更新错误时,错误消息包括生成的第一个诊断,以提供有关失败原因的信息。 例如,该消息可能指示 range_optimizer_max_mem_size 超出 了 值或发生了类型转换,其中任何一个都可能妨碍使用索引。

  • 对于多表删除和更新,仅当任何目标表使用表扫描时,才会生成错误并启用安全更新。

禁用mysql自动重新连接

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

MySQL的> SET @a=1;
查询OK,0行受影响(0.05秒)

MySQL的> INSERT INTO t VALUES(@a);
ERROR 2006:MySQL服务器已经消失
没联系。试图重新连接......
连接ID:1
当前数据库:测试

查询OK,1行受影响(1.30秒)

MySQL的> SELECT * FROM t;
+ ------ +
| a |
+ ------ +
| NULL |
+ ------ +
1排(0.05秒)

该 @a 用户变量已经失去了与连接,重新连接后,它是不确定的。 如果 在连接丢失的情况下使 mysql 以错误终止 是很重要的 ,那么可以 使用该 选项 启动 mysql 客户端 --skip-reconnect 。

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

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 权限。 此信息的格式和内容可能会有所变化。

    这包括有关事件调度​​程序的信息。 请参见 第24.4.5节“事件调度程序状态” 。

  • drop db_name

    删除名为database的数据库 db_name 及其所有表。

  • extended-status

    显示服务器状态变量及其值。

  • flush-hosts

    刷新主机缓存中的所有信息。 请参见 第8.12.4.2节“DNS查找优化和主机缓存” 。

  • flush-logs [log_type ...]

    刷新所有日志。

    所述 中mysqladmin冲洗日志 命令允许给予任选的日志类型,以指定哪些日志冲洗。 继 flush-logs 命令,你可以提供一个或多个以下的日志类型的空格分隔的列表: binary , engine , error , general , relay , slow 。 这些对应于可以为 FLUSH LOGS SQL语句 指定的日志类型 。

  • flush-privileges

    重新加载授权表(与之相同 reload )。

  • flush-status

    清除状态变量。

  • flush-tables

    冲洗所有表格。

  • flush-threads

    刷新线程缓存。

  • kill id,id,...

    杀死服务器线程。 如果给出了多个线程ID值,则列表中必须没有空格。

    要终止属于其他用户的线程,连接的用户必须具有 CONNECTION_ADMIN 或 SUPER 权限。

  • password new_password

    设置新密码。 这会将密码更改 new_password 为与 mysqladmin一起 用于连接服务器 的帐户 。 因此,下次 使用同一帐户 调用 mysqladmin (或任何其他客户端程序)时,您需要指定新密码。

    警告

    使用 mysqladmin 设置密码 应该被认为是 不安全的 。 在某些系统上,您的密码对系统状态程序(例如 ps) 可见 ,其他用户可以调用它来显示命令行。 MySQL客户端通常在初始化序列期间用零覆盖命令行密码参数。 但是,仍然存在一个短暂的间隔,在该间隔期间值是可见的。 此外,在某些系统上,此覆盖策略无效,并且 ps 仍然可以看到密码 。 (SystemV Unix系统和其他人可能遇到这个问题。)

    如果 new_password 值包含空格或您的命令解释程序特有的其他字符,则需要将其括在引号内。 在Windows上,请务必使用双引号而不是单引号; 单引号不会从密码中删除,而是被解释为密码的一部分。 例如:

    外壳> mysqladmin password "my new password"
    

    password 命令后 可以省略新密码 。 在这种情况下, mysqladmin 会提示输入密码值,这样可以避免在命令行上指定密码。 只有 password 在 mysqladmin 命令行 上的最终命令时, 才应省略密码值 。 否则,将下一个参数作为密码。

    警告

    如果使用该 --skip-grant-tables 选项 启动服务器,请不要使用此命令 。 不会应用密码更改。 即使您在 命令行 之前 password 使用 flush-privileges 相同的命令行重新启用授权表,也是如此,因为在连接之后会发生刷新操作。 但是,您可以使用 mysqladmin flush-privileges 重新启用授权表,然后使用单独的 mysqladmin password 命令更改密码。

  • ping

    检查服务器是否可用。 如果服务器正在运行,则 mysqladmin 的返回状态 为0,否则为1。 即使出现错误,这也是0 Access denied ,因为这意味着服务器正在运行但拒绝连接,这与服务器未运行不同。

  • processlist

    显示活动服务器线程列表。 这就像 SHOW PROCESSLIST 声明 的输出 。 如果 --verbose 给出 了 选项,则输出类似于 SHOW FULL PROCESSLIST 。 (参见 第13.7.6.29节“SHOW PROCESSLIST语法” 。)

  • reload

    重新加载授权表。

  • refresh

    刷新所有表并关闭和打开日志文件。

  • shutdown

    停止服务器。

  • start-slave

    在从属服务器上启动复制。

  • status

    显示简短的服务器状态消息。

  • stop-slave

    停止从服务器上的复制。

  • variables

    显示服务器系统变量及其值。

  • version

    显示服务器的版本信息。

所有命令都可以缩短为任何唯一的前缀。 例如:

外壳> mysqladmin proc stat
+ ---- + ------- + ----------- + ---- + --------- + ------ +  - ----- + ------------------ +
| Id | 用户| 主持人| db | 命令| 时间| 国家| 信息|
+ ---- + ------- + ----------- + ---- + --------- + ------ +  - ----- + ------------------ +
| 51 | 蒙蒂| localhost | | 查询| 0 | | show processlist |
+ ---- + ------- + ----------- + ---- + --------- + ------ +  - ----- + ------------------ +
正常运行时间:1473624主题:1个问题:39487
慢查询:0打开:541刷新表:1
打开表:每秒19个查询平均值: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 shutdown , mysqladmin将 等待,直到服务器的进程ID文件被删除,以确保服务器已正确停止。

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

表4.9 mysqladmin选项

格式 描述 介绍 删除
--bind地址 使用指定的网络接口连接到MySQL服务器
- 压缩 压缩客户端和服务器之间发送的所有信息
--connect_timeout 连接超时前的秒数
- 计数 重复执行命令的迭代次数
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
--enable-明文-插件 启用明文身份验证插件
- 力 即使发生SQL错误也继续
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
--login路径 从.mylogin.cnf中读取登录路径选项
--no哔 发生错误时不要发出蜂鸣声
--no-默认 不读选项文件
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
--relative 与--sleep选项一起使用时,显示当前值和先前值之间的差异
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
--show-警告 语句执行后显示警告
--shutdown_timeout 等待服务器关闭的最大秒数
- 无声 静音模式
- 睡觉 重复执行命令,在两者之间休眠延迟秒
- 插座 对于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版本 允许加密连接的协议
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出
- 垂直 垂直打印查询输出行(每列值一行)
- 等待 如果无法建立连接,请等待并重试,而不是中止

您还可以使用设置以下变量 。 --var_name=value

  • connect_timeout

    连接超时前的最大秒数。 默认值为43200(12小时)。

  • shutdown_timeout

    等待服务器关闭的最大秒数。 默认值为3600(1小时)。

4.5.3  mysqlcheck - 表维护程序

所述 mysqlcheck的 客户端执行表维护:它检查,修理,优化,或分析表。

每个表都被锁定,因此在处理时对其他会话不可用,但是对于检查操作,该表仅使用锁定 READ 锁定( 有关 和的 更多信息, 请参见 第13.3.6节“LOCK TABLES和UNLOCK TABLES语法” )。 锁)。 表维护操作可能非常耗时,特别是对于大型表。 如果使用 or 选项处理一个或多个数据库中的所有表,则调用 mysqlcheck READ WRITE --databases --all-databases 可能需要很长时间。 (如果MySQL升级过程确定需要进行表检查,因为它以相同的方式处理表,这也是如此。)

mysqld 服务器运行 时必须使用 mysqlcheck ,这意味着您不必停止服务器来执行表维护。

mysqlcheck的 使用SQL语句 CHECK TABLE , REPAIR TABLE , ANALYZE TABLE ,并 OPTIMIZE TABLE 在用户的便捷方式。 它确定要用于要执行的操作的语句,然后将语句发送到要执行的服务器。 有关每个语句使用哪些存储引擎的详细信息,请参见 第13.7.3节“表维护语句”中 有关这些语句的说明 。

所有存储引擎不一定支持所有四个维护操作。 在这种情况下,会显示错误消息。 例如,如果 test.t 是 MEMORY 表,则尝试检查它会产生以下结果:

外壳> mysqlcheck test t
test.t
注意:表的存储引擎不支持检查

如果 mysqlcheck 无法修复表,请参见 第2.11.13节“重建或修复表或索引” 以获取手动表修复策略。 例如,对于 InnoDB 可以检查 CHECK TABLE 但不能修复的 表格就是这种情况 REPAIR TABLE 。

警告

最好在执行表修复操作之前备份表; 在某些情况下,操作可能会导致数据丢失。 可能的原因包括但不限于文件系统错误。

调用 mysqlcheck 有三种 常用方法 :

shell> 
shell> 
shell>mysqlcheck [options] db_name [tbl_name ...]mysqlcheck [options] --databases db_name ...mysqlcheck [options] --all-databases

如果您未在下面命名任何表, db_name 或者如果您使用 --databases 或 --all-databases 选项,则会检查整个数据库。

与其他客户端程序相比, mysqlcheck 具有特殊功能。 --check 可以通过重命名二进制来更改 检查表( ) 的默认行为 。 如果你想有一个工具,修复表默认情况下,你应该做的副本 mysqlcheck的 命名 mysqlrepair,可 ,或者做一个符号链接 mysqlcheck的 命名 mysqlrepair,可 。 如果你调用 mysqlrepair ,它会修复表。

下表中显示的名称可用于更改 mysqlcheck的 默认行为。

命令 含义
mysqlrepair,可 默认选项是 --repair
mysqlanalyze 默认选项是 --analyze
mysqloptimize 默认选项是 --optimize

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

表4.10 mysqlcheck选项

格式 描述 介绍 删除
- 全数据库 检查所有数据库中的所有表
--all合1 为每个数据库执行一个语句,该数据库命名该数据库中的所有表
- 分析 分析表格
- 自动修理 如果已检查的表已损坏,请自动修复它
--bind地址 使用指定的网络接口连接到MySQL服务器
--character集-DIR 安装字符集的目录
- 校验 检查表是否有错误
--check-唯一改变的 仅检查自上次检查后已更改的表
--check升级 使用FOR UPGRADE选项调用CHECK TABLE
- 压缩 压缩客户端和服务器之间发送的所有信息
--databases 将所有参数解释为数据库名称
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
--enable-明文-插件 启用明文身份验证插件
--extended 检查并修理桌子
- 快速 仅检查未正确关闭的表
- 力 即使发生SQL错误也继续
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
--login路径 从.mylogin.cnf中读取登录路径选项
--medium检查 执行比 - 扩展操作更快的检查
--no-默认 不读选项文件
--optimize 优化表格
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
- 快 最快的检查方法
- 修理 执行修复,几乎可以修复除非唯一的唯一键之外的任何内容
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
- 无声 静音模式
--skip-数据库 从执行的操作中省略此数据库
- 插座 对于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模式 与服务器连接的安全状态
--tables 覆盖--databases或-B选项
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
--use-FRM 对于MyISAM表的修复操作
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出
--write,二进制日志 将ANALYZE,OPTIMIZE,REPAIR语句记录到二进制日志中。 --skip-write-binlog将NO_WRITE_TO_BINLOG添加到这些语句中。

4.5.4  mysqldump - 数据库备份程序

所述 的mysqldump 客户实用程序执行 逻辑备份 ,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。 它转储一个或多个MySQL数据库以备份或传输到另一个SQL服务器。 所述 的mysqldump 命令也可以生成CSV输出,其他分隔符的文本或XML格式。

mysqldump 至少需要 SELECT 转储表 的 特权, SHOW VIEW 转储视图, TRIGGER 转储触发器以及 未使用 LOCK TABLES 该 --single-transaction 选项 的 特权 。 某些选项可能需要其他权限,如选项说明中所述。

要重新加载转储文件,您必须具有执行其包含的语句所需的权限,例如 CREATE 这些语句创建的对象 的相应 权限。

mysqldump 输出可以包含 ALTER DATABASE 更改数据库排序规则的语句。 这些可以在转储存储的程序以保留其字符编码时使用。 要重新加载包含此类语句的转储文件, ALTER 需要具有受影响数据库 的 权限。

注意

在Windows上使用PowerShell进行转储并使用输出重定向创建一个具有UTF-16编码的文件:

外壳> mysqldump [options] > dump.sql

但是,不允许UTF-16作为连接字符集(请参阅 不允许的客户端字符集 ),因此转储文件将无法正确加载。 要解决此问题,请使用 --result-file 以ASCII格式创建输出 的 选项:

外壳> mysqldump [options] --result-file=dump.sql

性能和可伸缩性注意事项

mysqldump 优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。 您可以克隆数据库以进行开发和DBA工作,或者生成现有数据库的轻微变体以进行测试。 它不是用于备份大量数据的快速或可扩展的解决方案。 对于大数据大小,即使备份步骤花费了合理的时间,恢复数据也会非常慢,因为重放SQL语句涉及用于插入,索引创建等的磁盘I / O.

对于大规模备份和还原, 物理 备份更合适,以原始格式复制数据文件,可以快速恢复:

  • 如果你的表是主要 InnoDB 的表,或者如果你有一个混合 InnoDB 和 MyISAM 表,可以考虑使用 mysqlbackup MySQL企业备份产品的命令。 (作为企业订阅的一部分提供。)它 InnoDB 以最小的中断 为 备份 提供最佳性能 ; 它还可以备份来自 MyISAM 其他存储引擎的 表格 ; 它提供了许多方便的选项,以适应不同的备份方案。 请参见 第30.2节“MySQL企业备份概述” 。

mysqldump 可以逐行检索和转储表内容,或者它可以从表中检索整个内容并在转储之前将其缓冲在内存中。 如果要转储大型表,则在内存中缓冲可能会出现问题。 要逐行转储表,请使用 --quick 选项(或 --opt 启用 --quick )。 的 --opt 选项(因此 --quick )是默认启用,因此,以使存储器缓冲,使用 --skip-quick 。

如果您使用最新版本的 mysqldump 生成要重新加载到非常旧的MySQL服务器的转储,请使用该 --skip-opt 选项而不是 --opt 或 --extended-insert 选项。

有关 mysqldump的 其他信息 ,请参见 第7.4节“使用mysqldump进行备份” 。

调用语法

通常有三种方法可以使用 mysqldump -in order来转储一组一个或多个表,一组一个或多个完整的数据库,或整个MySQL服务器 - 如下所示:

shell> 
shell> 
shell>mysqldump [options] db_name [tbl_name ...]mysqldump [options] --databases db_name ...mysqldump [options] --all-databases

要转储整个数据库,请不要在下面命名任何表 db_name ,或使用 --databases 或 --all-databases 选项。

要查看 mysqldump 支持 的选项列表 ,请发出命令 mysqldump --help 。

选项语法 - 按字母顺序排列

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

表4.11 mysqldump选项

格式 描述 介绍 删除
--add降数据库 在每个CREATE DATABASE语句之前添加DROP DATABASE语句
--add-drop-table在 在每个CREATE TABLE语句之前添加DROP TABLE语句
--add跌落触发 在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句
--add锁 使用LOCK TABLES和UNLOCK TABLES语句环绕每个表转储
- 全数据库 转储所有数据库中的所有表
--allow-关键字 允许创建作为关键字的列名
--apply - 从语句 在CHANGE MASTER语句之前包括STOP SLAVE,在输出结束时包括START SLAVE
--bind地址 使用指定的网络接口连接到MySQL服务器
--character集-DIR 安装字符集的目录
--column统计 编写ANALYZE TABLE语句以生成统计直方图 8.0.2
- 评论 添加注释到转储文件
- 紧凑 产生更紧凑的输出
- 兼容 生成与其他数据库系统或旧MySQL服务器更兼容的输出
--complete-插入 使用包含列名的完整INSERT语句
- 压缩 压缩客户端和服务器之间发送的所有信息
--create选项 在CREATE TABLE语句中包含所有特定于MySQL的表选项
--databases 将所有名称参数解释为数据库名称
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
--delete-主日志 在主复制服务器上,执行转储操作后删除二进制日志
- 禁用键 对于每个表,使用语句环绕INSERT语句以禁用和启用键
自卸日期 如果给出了--comments,则将转储日期包括为“转储已完成”评论
自卸奴隶 包含CHANGE MASTER语句,列出slave的master的二进制日志坐标
--enable-明文-插件 启用明文身份验证插件
--events 转储转储数据库中的事件
--extended-插入 使用多行INSERT语法
--fields封闭逐 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同
--fields转义,由 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同
--fields-任选封闭逐 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同
--fields封端逐 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同
--flush-日志 在开始转储之前刷新MySQL服务器日志文件
--flush-特权 转储mysql数据库后发出FLUSH PRIVILEGES语句
- 力 即使在表转储期间发生SQL错误,也要继续
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
--hex二进制大对象 使用十六进制表示法转储二进制列
- 主办 要连接的主机(IP地址或主机名)
- 忽略错误 忽略指定的错误
- 忽略表 不要转储给定的表
--include主主机端口 在使用--dump-slave生成的CHANGE MASTER语句中包含MASTER_HOST / MASTER_PORT选项
--insert,忽视 编写INSERT IGNORE而不是INSERT语句
--lines封端逐 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同
--lock-全表 锁定所有数据库中的所有表
--lock桌 在转储它们之前锁定所有表
--log错误 将警告和错误附加到命名文件
--login路径 从.mylogin.cnf中读取登录路径选项
- 主要的数据 将二进制日志文件名和位置写入输出
--max允许的分组 发送到服务器或从服务器接收的最大数据包长度
--net缓冲长度 TCP / IP和套接字通信的缓冲区大小
--network超时 增加网络超时以允许更大的表转储 8.0.1
--no-自动提交 在SET autocommit = 0和COMMIT语句中包含每个转储表的INSERT语句
--no创建-DB 不要编写CREATE DATABASE语句
--no创建-信息 不要编写重新创建每个转储表的CREATE TABLE语句
- 没有数据 不要转储表内容
--no-默认 不读选项文件
--no-设置名称 与--skip-set-charset相同
--no-表空间 不要在输出中编写任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句
- 选择 -add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的简写。
--order逐主 转储按主键或第一个唯一索引排序的每个表的行
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
- 快 一次从服务器一行检索表的行
--quote-名 在反引号字符中引用标识符
- 更换 编写REPLACE语句而不是INSERT语句
- 结果文件 直接输出到给定文件
--routines 从转储的数据库转储存储的例程(过程和函数)
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--set-字符集 将SET NAMES default_character_set添加到输出
--set-GTID,清除 是否将SET @@ GLOBAL.GTID_PURGED添加到输出中
--shared存储器碱基名 用于共享内存连接的共享内存的名称
--single事务 在从服务器转储数据之前发出BEGIN SQL语句
--skip-分插表 不要在每个CREATE TABLE语句之前添加DROP TABLE语句
--skip-添加锁 不要添加锁
--skip-评论 不要向转储文件添加注释
--skip-紧凑 不要产生更紧凑的输出
--skip-禁用密钥 不要禁用密钥
--skip扩展嵌 关闭扩展插入
--skip-OPT 关闭--opt设置的选项
--skip-快 不要一次从服务器一行检索表的行
--skip-引号名 不要引用标识符
--skip-设置字符集 不要写SET NAMES语句
--skip-触发器 不要转储触发器
--skip-TZ-UTC 关掉tz-utc
- 插座 对于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模式 与服务器连接的安全状态
- 标签 生成制表符分隔的数据文件
--tables 覆盖 - 数据库或-B选项
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
--triggers 转储每个转储表的触发器
--tz-UTC 将SET TIME_ZONE ='+ 00:00'添加到转储文件
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出
- 哪里 仅转储由给定WHERE条件选择的行
--xml 生成XML输出

连接选项

该 mysqldump的 命令登录到一个MySQL服务器提取信息。 以下选项指定如何在同一台计算机或远程系统上连接MySQL服务器。

选项 - 文件选项

这些选项用于控制要读取的选项文件。

DDL选项

mysqldump的 使用场景 包括设置一个完整的新MySQL实例(包括数据库表),并用现有的数据库和表替换现有实例中的数据。 通过对转储文件中的各种DDL语句进行编码,可以使用以下选项指定在还原转储时要拆除和设置的内容。

调试选项

以下选项打印调试信息,在转储文件中编码调试信息,或者让转储操作继续进行,而不管潜在的问题。

  • --allow-keywords

    允许创建作为关键字的列名。 这通过在每个列名前加上表名来实现。

  • --comments , -i

    在转储文件中写入其他信息,例如程序版本,服务器版本和主机。 默认情况下启用此选项。 要禁止此附加信息,请使用 --skip-comments 。

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

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

  • --debug-check

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

  • --debug-info

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

  • --dump-date

    如果 --comments 给出 了该 选项, mysqldump 会在以下表单的转储结束时生成注释:

    - 完成转储 DATE
    

    但是,日期会导致在不同时间拍摄的转储文件看起来不同,即使数据在其他方面相同也是如此。 --dump-date 并 --skip-dump-date 控制是否将日期添加到评论中。 默认值为 --dump-date (包括注释中的日期)。 --skip-dump-date 抑制日期打印。

  • --force , -f

    忽略所有错误; 即使在表转储期间发生SQL错误,也会继续。

    此选项的一个用途是使 mysqldump 继续执行,即使它遇到一个已变为无效的视图,因为该定义引用了已删除的表。 没有 --force , mysqldump 退出并显示错误消息。 使用时 --force , mysqldump会 输出错误消息,但它也会将包含视图定义的SQL注释写入转储输出并继续执行。

    如果 --ignore-error 还提供了忽略特定错误 的 选项, --force 则优先。

  • --log-error=file_name

    通过将警告和错误附加到指定文件来记录警告和错误。 默认是不进行日志记录。

  • --skip-comments

    请参阅该 --comments 选项 的说明 。

  • --verbose , -v

    详细模式。 打印有关程序功能的更多信息。

帮助选项

以下选项显示有关 mysqldump 命令本身的信息。

  • --help , -?

    显示帮助消息并退出。

  • --version , -V

    显示版本信息并退出。

国际化选择

以下选项更改 mysqldump 命令 如何 使用国家语言设置表示字符数据。

复制选项

所述 的mysqldump 命令经常被用来创建一个空的情况下,或包括数据的实例中,在复制结构的从服务器上。 以下选项适用于在复制主服务器和从属服务器上转储和还原数据。

  • --apply-slave-statements

    对于产生的奴隶转储 --dump-slave 选项,添加 STOP SLAVE 了之前声明 CHANGE MASTER TO 语句和一个 START SLAVE 在输出结束发言。

  • --delete-master-logs

    在主复制服务器上,通过 PURGE BINARY LOGS 在执行转储操作后向服务器 发送 语句来 删除二进制日志 。 此选项自动启用 --master-data 。

  • --dump-slave[=value]

    此选项类似于 --master-data 除了它用于转储复制从属服务器以生成转储文件,该转储文件可用于将另一个服务器设置为与转储服务器具有相同主服务器的从属服务器。 它会导致转储输出包含一个 CHANGE MASTER TO 语句, 该 语句指示转储的从属主服务器的二进制日志坐标(文件名和位置)。 该 CHANGE MASTER TO 语句读取的值 Relay_Master_Log_File ,并 Exec_Master_Log_Pos 从 SHOW SLAVE STATUS 输出,并使用他们 MASTER_LOG_FILE 和 MASTER_LOG_POS 分别。 这些是从服务器开始复制的主服务器坐标。

    注意

    来自中继日志的事务序列中已执行的不一致可能导致使用错误的位置。 有关 更多信息 , 请参见 第17.4.1.33节“复制和事务不一致” 。

    --dump-slave 导致使用master的坐标而不是dumped服务器的坐标,就像 --master-data 选项 所做的那样 。 此外,指定此选项会导致 --master-data 选项被覆盖(如果使用)并被有效忽略。

    警告

    不应该使用这个选项,如果要应用的用途,其中转储会在服务器 gtid_mode=ON 和 MASTER_AUTOPOSITION=1 。

    选项值的处理方式与 --master-data (设置无值或1表示将 CHANGE MASTER TO 语句写入转储,设置2导致语句写入但包含在SQL注释中)的处理方式相同,并且与 --master-data 启用方法 具有相同的效果 或禁用其他选项以及如何处理锁定。

    此选项导致 mysqldump 在转储之前停止从属SQL线程并在之后再次重新启动它。

    与此同时 --dump-slave , 也可以使用 --apply-slave-statements 和 --include-master-host-port 选项。

  • --include-master-host-port

    对于 CHANGE MASTER TO 使用该 --dump-slave 选项 生成的从属转储中 的 语句 ,添加 MASTER_HOST 和 MASTER_PORT 选择主服务器名称和从服务器主服务器的TCP / IP端口号。

  • --master-data[=value]

    使用此选项可转储主复制服务器以生成转储文件,该转储文件可用于将另一台服务器设置为主服务器的从属服务器。 它会导致转储输出包含一个 CHANGE MASTER TO 语句, 该 语句指示转储服务器的二进制日志坐标(文件名和位置)。 这些是主服务器坐标,从属服务器应在将转储文件加载到从属服务器后开始复制。

    如果选项值为2,则该 CHANGE MASTER TO 语句将写为SQL注释,因此仅提供信息; 重新加载转储文件时没有任何效果。 如果选项值为1,则该语句不会写为注释,并在重新加载转储文件时生效。 如果未指定选项值,则默认值为1。

    此选项需要 RELOAD 特权,并且必须启用二进制日志。

    该 --master-data 选项自动关闭 --lock-tables 。 它也会打开 --lock-all-tables ,除非 --single-transaction 另外指定,在这种情况下,只在转储开始时的短时间内获取全局读锁(请参阅说明 --single-transaction )。 在所有情况下,对日志的任何操作都在转储的确切时刻发生。

    也可以通过使用 --dump-slave 选项 转储主服务器的现有从服务器来设置从服务器,如果使用这两个 选项,该选项将覆盖 --master-data 并使其被忽略。

  • --set-gtid-purged=value

    此选项通过指示是否向 SET @@GLOBAL.gtid_purged 输出 添加 语句来 启用对写入转储文件的全局事务ID(GTID)信息的控制 。 此选项还可能导致将语句写入输出,以在重新加载转储文件时禁用二进制日志记录。

    下表显示了允许的选项值。 默认值为 AUTO 。

    值 含义
    OFF 不 SET 向输出 添加 语句。
    ON SET 在输出中 添加 语句。 如果服务器上未启用GTID,则会发生错误。
    AUTO SET 如果在服务器上启用了GTID,则向输出 添加 语句。

    来自使用基于GTID的复制的服务器的部分转储需要 --set-gtid-purged={ON|OFF} 指定选项。 使用 ON 如果目的是部署只使用了一些来自倾倒服务器的数据的新的复制奴隶。 OFF 如果要通过在拓扑中复制表来修复表, 请使用 此选项。 使用 OFF 如果意图是复制不相交的,今后仍将如此复制拓扑之间的表。

    --set-gtid-purged 重新加载转储文件时, 该 选项对二进制日志记录具有以下影响:

    • --set-gtid-purged=OFF : SET @@SESSION.SQL_LOG_BIN=0; 未添加到输出中。

    • --set-gtid-purged=ON : SET @@SESSION.SQL_LOG_BIN=0; 添加到输出中。

    • --set-gtid-purged=AUTO SET @@SESSION.SQL_LOG_BIN=0; 如果在要备份的服务器上启用了GTID(即,如果 AUTO 计算结果为 ON ) ,则会 将 : 添加到输出中 。

    注意

    gtid_mode=ON 如果转储文件包含系统表, 则不建议在服务器( ) 上启用GTID时加载转储文件 。 mysqldump 为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且在启用GTID时不允许这种组合。 另请注意,将启用了GTID的服务器中的转储文件加载到启用了GTID的其他服务器中会导致生成不同的事务标识符。

格式选项

以下选项指定如何在转储文件中表示整个转储文件或某些类型的数据。 它们还控制是否将某些可选信息写入转储文件。

  • --compact

    产生更紧凑的输出。 该选项允许 --skip-add-drop-table , --skip-add-locks , --skip-comments , --skip-disable-keys ,和 --skip-set-charset 选项。

  • --compatible=name

    生成与其他数据库系统或旧MySQL服务器更兼容的输出。 此选项唯一允许的值, ansi 与用于设置服务器SQL模式的相应选项具有相同的含义。 请参见 第5.1.11节“服务器SQL模式” 。

  • --complete-insert , -c

    使用 INSERT 包含列名称的 完整 语句。

  • --create-options

    在 CREATE TABLE 语句中 包含所有特定于MySQL的表选项 。

  • --fields-terminated-by=... , --fields-enclosed-by=... , --fields-optionally-enclosed-by=... , --fields-escaped-by=...

    这些选项与选项一起使用,其 --tab 含义与相应的 FIELDS 子句 相同 LOAD DATA 。 请参见 第13.2.7节“LOAD DATA语法” 。

  • --hex-blob

    使用十六进制表示法转储二进制列(例如, 'abc' 变为 0x616263 )。 受影响的数据类型 BINARY , VARBINARY 的 BLOB 类型和 BIT 。

  • --lines-terminated-by=...

    此选项与选项一起使用,其 --tab 含义与相应的 LINES 子句 相同 LOAD DATA 。 请参见 第13.2.7节“LOAD DATA语法” 。

  • --quote-names , -Q

    在 ` 字符 内引用标识符(例如数据库,表和列名称) 。 如果 ANSI_QUOTES 启用 了 SQL模式,则在 " 字符 内引用标识符 。 默认情况下启用此选项。 它可以被禁用 --skip-quote-names ,但是这个选项应该在任何 --compatible 可能启用的 选项之后给出 --quote-names 。

  • --result-file=file_name , -r file_name

    直接输出到指定的文件。 即使在生成转储时发生错误,也会创建结果文件并覆盖其先前的内容。

    应在Windows上使用此选项以防止换行符 \n 转换为 \r\n 回车符/换行符序列。

  • --tab=dir_name , -T dir_name

    生成制表符分隔的文本格式数据文件。 对于每个转储表, mysqldump 创建一个 tbl_name.sql 文件,其中包含 CREATE TABLE 创建表 的 语句,服务器会写入 tbl_name.txt 包含其数据 的 文件。 选项值是写入文件的目录。

    注意

    仅当 mysqldump 与 mysqld 服务器 在同一台机器上运行时, 才应使用此选项 。 因为服务器 *.txt 在您指定的目录中 创建 文件,所以该目录必须是服务器可写的,并且您使用的MySQL帐户必须具有该 FILE 权限。 因为 mysqldump *.sql 在同一目录中 创建 ,所以它必须可由您的系统登录帐户写入。

    默认情况下, .txt 数据文件使用列值之间的制表符和每行末尾的换行符进行格式化。 可以使用 和 选项 明确指定格式 。 --fields-xxx --lines-terminated-by

    列值将转换为 --default-character-set 选项 指定的字符集 。

  • --tz-utc

    此选项允许 TIMESTAMP 在不同时区的服务器之间转储和重新加载列。 mysqldump 将其连接时区设置为UTC并添加 SET TIME_ZONE='+00:00' 到转储文件。 如果没有此选项, TIMESTAMP 则会在源服务器和目标服务器本地的时区中转储和重新加载列,如果服务器位于不同的时区,则会导致值发生更改。 --tz-utc 还可以防止由于夏令时造成的变化。 --tz-utc 默认情况下启用。 要禁用它,请使用 --skip-tz-utc 。

  • --xml , -X

    将转储输出写为格式良好的XML。

    NULL , 'NULL' 和空值 :对于名为的列 column_name , NULL 值,空字符串和字符串值 'NULL' 在此选项生成的输出中相互区分,如下所示。

    值: XML表示:
    NULL ( 未知值 )

    <field name="column_name" xsi:nil="true" />

    '' ( 空字符串 )

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

    'NULL' ( 字符串值 )

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

    使用该 选项 运行时 , mysql 客户端 的输出 --xml 也遵循前面的规则。 (参见 第4.5.1.1节“mysql客户端选项” 。)

    mysqldump的 XML输出 包括XML命名空间,如下所示:

    外壳> mysqldump --xml -u root world City
    <?xml version =“1.0”?>
    <mysqldump xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”>
    <database name =“world”>
    <table_structure name =“City”>
    <field Field =“ID”Type =“int(11)”Null =“NO”Key =“PRI”Extra =“auto_increment”/>
    <field Field =“Name”Type =“char(35)”Null =“NO”Key =“”Default =“”Extra =“”/>
    <field Field =“CountryCode”Type =“char(3)”Null =“NO”Key =“”Default =“”Extra =“”/>
    <field Field =“District”Type =“char(20)”Null =“NO”Key =“”Default =“”Extra =“”/>
    <field Field =“Population”Type =“int(11)”Null =“NO”Key =“”Default =“0”Extra =“”/>
    <key Table =“City”Non_unique =“0”Key_name =“PRIMARY”Seq_in_index =“1”Column_name =“ID”
    Collat​​ion =“A”Cardinality =“4079”Null =“”Index_type =“BTREE”Comment =“”/>
    <options Name =“City”Engine =“MyISAM”Version =“10”Row_format =“Fixed”Rows =“4079”
    Avg_row_length =“67”Data_length =“273293”Max_data_length =“18858823439613951”
    Index_length =“43008”Data_free =“0”Auto_increment =“4080”
    Create_time =“2007-03-31 01:47:01”Update_time =“2007-03-31 01:47:02”
    排序规则=“latin1_swedish_ci”Create_options =“”Comment =“”/>
    </ table_structure>
    <table_data name =“City”>
    <行>
    <field name =“ID”> 1 </ field>
    <field name =“Name”>喀布尔</ field>
    <field name =“CountryCode”> AFG </ field>
    <field name =“District”> Kabol </ field>
    <field name =“Population”> 1780000 </ field>
    </行>
    
    ...
    
    <行>
    <field name =“ID”> 4079 </ field>
    <field name =“Name”> Rafah </ field>
    <field name =“CountryCode”> PSE </ field>
    <field name =“District”> Rafah </ field>
    <field name =“Population”> 92020 </ field>
    </行>
    </ TABLE_DATA>
    </数据库>
    </ mysqldump的>
    

过滤选项

以下选项控制将哪种模式对象写入转储文件:按类别,如触发器或事件; 按名称,例如,选择要转储的数据库和表; 甚至使用 WHERE 子句 从表数据中过滤行 。

  • --all-databases , -A

    转储所有数据库中的所有表。 这与使用该 --databases 选项并在命令行上命名所有数据库 相同 。

    在MySQL 8.0之前,使用 选项时, mysqldump 和 mysqlpump的 选项 --routines 和 --events 选项 不需要包含存储的例程和事件 :转储包括 系统数据库,因此 包含存储的例程和事件定义 的 和 表。 从MySQL 8.0开始, 和 --all-databases mysql mysql.proc mysql.event mysql.event mysql.proc 不使用表格。 相应对象的定义存储在数据字典表中,但不会转储这些表。 要在使用的转储中包含存储的例程和事件,请 显式 --all-databases 使用 --routines 和 --events 选项。

  • --databases , -B

    转储几个数据库。 通常, mysqldump 将命令行上的第一个名称参数视为数据库名称,将后续名称视为表名称。 使用此选项,它将所有名称参数视为数据库名称。 CREATE DATABASE 和 USE 语句包含在每个新数据库之前的输出中。

    此选项可用于转储 performance_schema 数据库,即使使用该 --all-databases 选项 ,也通常不会 转储该 数据库 。 (也可以使用该 --skip-lock-tables 选项。)

  • --events , -E

    在输出中包含转储数据库的事件计划程序事件。 此选项需要 EVENT 这些数据库 的 权限。

    使用 --events contains CREATE EVENT 语句 生成的输出 来创建事件。

  • --ignore-error=error[,error]...

    忽略指定的错误。 选项值是逗号分隔的错误号列表,指定在 mysqldump 执行 期间要忽略的错误 。 如果 --force 还提供了忽略所有错误 的 选项, --force 则优先。

  • --ignore-table=db_name.tbl_name

    不要转储给定的表,必须使用数据库和表名来指定该表。 要忽略多个表,请多次使用此选项。 此选项也可用于忽略视图。

  • --no-data , -d

    不要写任何表行信息(即不要转储表内容)。 如果要仅转储 CREATE TABLE 表 的 语句(例如,通过加载转储文件来创建表的空副本), 这将非常有用 。

  • --routines , -R

    在输出中包含转储数据库的存储例程(过程和函数)。 此选项需要全局 SELECT 权限。

    通过使用 --routines contains CREATE PROCEDURE 和 CREATE FUNCTION 语句 生成的输出 来创建例程。

  • --tables

    覆盖 --databases 或 -B 选项。 mysqldump 将该选项后面的所有名称参数视为表名。

  • --triggers

    在输出中包含每个转储表的触发器。 默认情况下启用此选项; 禁用它 --skip-triggers 。

    为了能够转储表的触发器,您必须具有 TRIGGER 该表 的 权限。

    允许多个触发器。 mysqldump 以激活顺序转储触发器,以便在重新加载转储文件时,以相同的激活顺序创建触发器。 但是,如果 mysqldump 转储文件包含具有相同触发事件和操作时间的表的多个触发器,则尝试将转储文件加载到不支持多个触发器的旧服务器时会发生错误。 (有关解决方法,请参阅 降级Notes ;您可以将触发器转换为与旧服务器兼容。)

  • --where='where_condition' , -w 'where_condition'

    仅转储由给定 WHERE 条件 选择的行 。 如果条件包含空格或其他对命令解释程序特殊的字符,则必须引用该条件。

    例子:

    --where = “用户= 'jimf'”
    -w “用户ID> 1”
    -w “用户ID <1”
    

性能选项

以下选项与性能(尤其是还原操作)最相关。 对于大型数据集,还原操作(处理 INSERT 转储文件中 的 语句)是最耗时的部分。 当急需恢复数据时,请提前计划并测试此阶段的性能。 对于以小时为单位的恢复时间,您可能更喜欢备用备份和还原解决方案,例如 MySQL Enterprise Backup for InnoDB -lyly和mixed-use数据库。

性能也受 事务选项的 影响 ,主要用于转储操作。

  • --column-statistics

    ANALYZE TABLE 在重新加载转储文件时,向输出 添加 语句以生成转储表的直方图统计信息。 默认情况下禁用此选项,因为大型表的直方图生成可能需要很长时间。

  • --disable-keys , -K

    对于每个表,用 INSERT 语句 和 语句 包围 语句。 这样可以更快地加载转储文件,因为索引是在插入所有行之后创建的。 此选项仅对 表的 非唯一索引有效 。 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; MyISAM

  • --extended-insert , -e

    INSERT 使用包含多个 VALUES 列表的 多行语法 编写 语句 。 这会导致较小的转储文件,并在重新加载文件时加快插入速度。

  • --insert-ignore

    编写 INSERT IGNORE 语句而不是 INSERT 语句。

  • --max-allowed-packet=value

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

  • --net-buffer-length=value

    用于客户端/服务器通信的缓冲区的初始大小。 在创建多行 INSERT 语句时(与 --extended-insert or --opt 选项一样), mysqldump 创建长达数字的行 --net-buffer-length 。 如果增加此变量,请确保MySQL服务器 net_buffer_length 系统变量的值至少为此大。

  • --network-timeout , -M

    通过设置 --max-allowed-packet 为最大值并将网络读取和写入超时设置为较大值 来启用要转储的大型表 。 默认情况下启用此选项。 要禁用它,请使用 --skip-network-timeout 。

  • --opt

    默认情况下启用此选项是组合的简写 。 它提供快速转储操作并生成转储文件,可以快速重新加载到MySQL服务器。 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

    由于 --opt 默认情况下启用 该 选项,因此您只需指定其 --skip-opt 反转 ,即 关闭多个默认设置。 有关有 mysqldump 选择 地启用或禁用受影响的选项子集的信息, 请参阅 选项组 的讨论 --opt 。

  • --quick , -q

    此选项对于转储大型表非常有用。 它强制 mysqldump 一次一行地从服务器检索表的行,而不是检索整个行集并在写出之前在内存中缓冲它。

  • --skip-opt

    请参阅该 --opt 选项 的说明 。

交易选项

以下选项权衡转储操作的性能,以及导出数据的可靠性和一致性。

  • --add-locks

    使用 LOCK TABLES 和 UNLOCK TABLES 语句 环绕每个表转储 。 重新加载转储文件时,这会导致更快的插入。 请参见 第8.2.5.1节“优化INSERT语句” 。

  • --flush-logs , -F

    在开始转储之前刷新MySQL服务器日志文件。 此选项需要该 RELOAD 权限。 如果将此选项与选项结合使用 --all-databases ,则会 为每个转储的数据库 刷新日志 。 例外情况是使用 --lock-all-tables ,, --master-data 或 --single-transaction :在这种情况下,日志只刷新一次,对应于所有表被锁定的时刻 FLUSH TABLES WITH READ LOCK 。 如果你希望你的转储和刷新日志到恰好在同一时刻发生,你应该使用 --flush-logs 同在一起 --lock-all-tables , --master-data 或 --single-transaction 。

  • --flush-privileges

    FLUSH PRIVILEGES 转储 mysql 数据库 后,在转储输出中 添加 语句 。 只要转储包含 mysql 数据库以及依赖于数据库中的数据以 mysql 进行正确还原的 任何其他数据库,就 应该使用此选项 。

    注意

    要从旧版本升级到MySQL 5.7.2或更高版本,请不要使用 --flush-privileges 。 有关此情况下的升级说明,请参见 第2.11.4节“MySQL 8.0中的更改” 。

  • --lock-all-tables , -x

    锁定所有数据库中的所有表。 这是通过在整个转储期间获取全局读锁来实现的。 此选项自动关闭 --single-transaction 和 --lock-tables 。

  • --lock-tables , -l

    对于每个转储的数据库,在转储之前锁定要转储的所有表。 表被锁定 READ LOCAL 以允许在 MyISAM 表 的情况下并发插入 。 对于事务表,例如 InnoDB , --single-transaction 是一个更好的选择, --lock-tables 因为它根本不需要锁定表。

    由于 --lock-tables 每个数据库的锁表都是单独的,因此该选项不保证转储文件中的表在数据库之间在逻辑上是一致的。 不同数据库中的表可能会以完全不同的状态转储。

    某些选项,例如 --opt ,自动启用 --lock-tables 。 如果要覆盖它,请使用 --skip-lock-tables 选项列表的末尾。

  • --no-autocommit

    将 INSERT 每个转储表 的 语句包含在 语句 SET autocommit = 0 和 COMMIT 语句中。

  • --order-by-primary

    如果存在这样的索引,则转储按其主键或其第一个唯一索引排序的每个表的行。 这在转储 MyISAM 要加载到 InnoDB 表中 的 表 时很有用 ,但使转储操作需要相当长的时间。

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

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

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

  • --single-transaction

    此选项将事务隔离模式设置为, REPEATABLE READ 并 START TRANSACTION 在转储数据之前 将 SQL语句 发送 到服务器。 它仅对事务表有用,例如 InnoDB ,因为它在 START TRANSACTION 发出时不 转储 任何应用程序 时转储数据库的一致状态 。

    使用此选项时,应记住只有 InnoDB 表以一致状态转储。 例如, 使用此选项时转储的 任何 表 MyISAM 或 MEMORY 表仍可能更改状态。

    虽然 --single-transaction 转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句: ALTER TABLE , CREATE TABLE , DROP TABLE , RENAME TABLE , TRUNCATE TABLE 。 一致读取不会与这些语句隔离,因此在要转储的表上使用它们会导致 mysqldump SELECT 执行该操作 以检索表内容以获取不正确的内容或失败。

    该 --single-transaction 选项与 --lock-tables 选项是相互排斥的,因为 LOCK TABLES 会导致任何挂起的事务隐含提交。

    要转储大表,请将该 --single-transaction 选项与 --quick 选项 组合 使用 。

选项组

  • 该 --opt 选项打开几个一起工作的设置以执行快速转储操作。 所有的这些设置在默认情况下,因为 --opt 默认是打开的。 因此,你很少指定 --opt 。 相反,您可以通过指定来关闭这些设置,可以 --skip-opt 通过在命令行中指定相关选项来选择性地重新启用某些设置。

  • 该 --compact 选项关闭几个设置,控制可选语句和注释是否出现在输出中。 同样,您可以使用其他重新启用某些设置的选项来关注此选项,或者使用该 --skip-compact 表单 启用所有设置 。

当您有选择地启用或禁用组选项的效果时,顺序很重要,因为选项从头到尾处理。 例如, 不会产生预期的效果; 它 本身就是一样的。 --disable-keys --lock-tables --skip-opt --skip-opt

例子

要备份整个数据库:

外壳> mysqldump db_name > backup-file.sql

要将转储文件加载回服务器:

外壳> mysql db_name < backup-file.sql

另一种重新加载转储文件的方法:

外壳> mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump 对于通过将数据从一个MySQL服务器复制到另一个MySQL服务器来填充数据库非常有用:

外壳> mysqldump --opt db_name | mysql --host=remote_host -C db_name

您可以使用一个命令转储多个数据库:

外壳> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

要转储所有数据库,请使用以下 --all-databases 选项:

外壳> mysqldump --all-databases > all_databases.sql

对于 InnoDB 表, mysqldump 提供了一种进行在线备份的方法:

外壳> mysqldump --all-databases --master-data --single-transaction > all_databases.sql

此备份 FLUSH TABLES WITH READ LOCK 在转储开始时 对所有表(使用 ) 获取全局读锁定 。 获取此锁定后,将读取二进制日志坐标并释放锁定。 如果在 FLUSH 发出 语句时正在运行长更新语句 ,则MySQL服务器可能会停止,直到这些语句完成。 之后,转储变为无锁,并且不会干扰对表的读取和写入。 如果MySQL服务器收到的更新语句很短(就执行时间而言),即使有很多更新,初始锁定时间也不应该很明显。

对于时间点恢复(也称为 “前 滚 ”, 当您需要恢复旧备份并重放自该备份以来发生的更改时),旋转二进制日志通常很有用(请参阅 第5.4节)。 4,“二进制日志” )或至少知道转储对应的二进制日志坐标:

外壳> mysqldump --all-databases --master-data=2 > all_databases.sql

要么:

外壳> mysqldump --all-databases --flush-logs --master-data=2
              > all_databases.sql

在 --master-data 和 --single-transaction 选项可以同时使用,其提供了一个方便的方法,使在线备份适于在使用前以指向-in-time恢复如果表被使用所存储的 InnoDB 存储引擎。

有关进行备份的更多信息,请参见 第7.2节“数据库备份方法” 和 第7.3节“备份和恢复策略示例” 。

限制

默认情况下, mysqldump 不会转储 performance_schema 或 sys 模式。 要转储其中任何一个,请在命令行中明确命名它们。 您也可以使用该 --databases 选项 命名它们 。 对于 performance_schema ,也可以使用该 --skip-lock-tables 选项。

mysqldump 不会转储 INFORMATION_SCHEMA 架构。

mysqldump 不会转储 InnoDB CREATE TABLESPACE 语句。

mysqldump 不会转储NDB Cluster ndbinfo 信息数据库。

mysqldump 包含用于重新创建 数据库 转储的表 general_log 和 语句的语句 。 不转储日志表内容。 slow_query_log mysql

如果由于权限不足而在备份视图时遇到问题,请参见 第C.5节“视图限制” 以获取解决方法。

4.5.5  mysqlimport - 数据导入程序

该 mysqlimport的 客户提供了一个命令行界面的 LOAD DATA SQL语句。 mysqlimport的 大多数选项 直接对应于 LOAD DATA 语法的 子句 。 请参见 第13.2.7节“LOAD DATA语法” 。

像这样 调用 mysqlimport :

外壳> mysqlimport [options] db_name textfile1 [textfile2 ...]

对于在命令行上命名的每个文本文件, mysqlimport 从文件名中 删除 任何扩展名,并使用结果来确定要导入文件内容的表的名称。 例如,名为 patient.txt ,, patient.text 和 patient all的 文件 将导入到名为的表中 patient 。

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

表4.12 mysqlimport选项

格式 描述 介绍 删除
--bind地址 使用指定的网络接口连接到MySQL服务器
- 列 此选项将以逗号分隔的列名列表作为其值
- 压缩 压缩客户端和服务器之间发送的所有信息
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
- 删除 在导入文本文件之前清空表
--enable-明文-插件 启用明文身份验证插件
--fields封闭逐 此选项与LOAD DATA的相应子句具有相同的含义
--fields转义,由 此选项与LOAD DATA的相应子句具有相同的含义
--fields-任选封闭逐 此选项与LOAD DATA的相应子句具有相同的含义
--fields封端逐 此选项与LOAD DATA的相应子句具有相同的含义
- 力 即使发生SQL错误也继续
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
- 忽视 请参阅--replace选项的说明
- 忽略线 忽略数据文件的前N行
--lines封端逐 此选项与LOAD DATA的相应子句具有相同的含义
- 本地 从客户端主机本地读取输入文件
--lock桌 在处理任何文本文件之前锁定所有表以进行写入
--login路径 从.mylogin.cnf中读取登录路径选项
- 低优先级 加载表时使用LOW_PRIORITY。
--no-默认 不读选项文件
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
- 更换 --replace和--ignore选项控制对唯一键值上的现有行进行复制的输入行的处理
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
- 无声 仅在发生错误时生成输出
- 插座 对于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版本 允许加密连接的协议
--use线程 并行文件加载的线程数
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出

这是一个演示使用 mysqlimport 的示例会话 :

shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
shell>ed
一个
100 Max Sydow
101德古拉伯爵
。
w imptest.txt
32
q
外壳> od -c imptest.txt
0000000 1 0 0 \ t M ax S ydow \ n 1 0
0000020 1 \ t C D D racula \ n
0000040
外壳> mysqlimport --local test imptest.txt
test.imptest:记录:2删除:0跳过:0警告:0
外壳> mysql -e 'SELECT * FROM imptest' test
+ ------ + --------------- +
| id | n |
+ ------ + --------------- +
| 100 | Max Sydow |
| 101 | 德古拉伯爵
+ ------ + --------------- +

4.5.6  mysqlpump - 数据库备份程序

所述 mysqlpump 客户实用程序执行 逻辑备份 ,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。 它转储一个或多个MySQL数据库以备份或传输到另一个SQL服务器。

mysqlpump 功能包括:

  • 并行处理数据库和数据库中的对象,以加速转储过程

  • 更好地控制要转储的数据库和数据库对象(表,存储程序,用户帐户)

  • 将用户帐户转储为帐户管理语句( CREATE USER , GRANT )而不是作为插入 mysql 系统数据库

  • 创建压缩输出的能力

  • 进度指标(值是估计值)

  • 对于转储文件重新加载, InnoDB 通过在插入行之后添加索引 来为 表 创建更快的二级索引

注意

mysqlpump 使用MySQL 5.7中引入的MySQL功能,因此假设使用MySQL 5.7或更高版本。

mysqlpump 至少需要 SELECT 转储表 的 特权, SHOW VIEW 转储视图, TRIGGER 转储触发器以及 未使用 LOCK TABLES 该 --single-transaction 选项 的 特权 。 转储用户定义需要系统数据库 的 SELECT 权限 mysql 。 某些选项可能需要其他权限,如选项说明中所述。

要重新加载转储文件,您必须具有执行其包含的语句所需的权限,例如 CREATE 这些语句创建的对象 的相应 权限。

注意

在Windows上使用PowerShell进行转储并使用输出重定向创建一个具有UTF-16编码的文件:

外壳> mysqlpump [options] > dump.sql

但是,不允许UTF-16作为连接字符集(请参见 第10.4节“连接字符集和排序” ),因此转储文件将无法正确加载。 要解决此问题,请使用 --result-file 以ASCII格式创建输出 的 选项:

外壳> mysqlpump [options] --result-file=dump.sql

mysqlpump调用语法

默认情况下, mysqlpump会 转储所有数据库(在 mysqlpump限制中 注明某些例外 )。 要显式指定此行为,请使用以下 --all-databases 选项:

外壳> mysqlpump --all-databases

要转储单个数据库或该数据库中的某些表,请在命令行上命名数据库,可选地后跟表名:

shell> 
shell>mysqlpump db_namemysqlpump db_name tbl_name1 tbl_name2 ...

要将所有名称参数视为数据库名称,请使用以下 --databases 选项:

外壳> mysqlpump --databases db_name1 db_name2 ...

默认情况下, 即使您转储 包含授权表 的 系统数据库 , mysqlpump 也不会转储用户帐户定义 mysql 。 要以表符 CREATE USER 和 GRANT 语句 的形式将授权表内容转储为逻辑定义 ,请使用该 --users 选项并禁止所有数据库转储:

外壳> mysqlpump --exclude-databases=% --users

在上面的命令中, % 是一个匹配该 --exclude-databases 选项的 所有数据库名称的通配符 。

mysqlpump 支持包含或排除数据库,表,存储程序和用户定义的几个选项。 请参阅 mysqlpump对象选择 。

要重新加载转储文件,请执行它包含的语句。 例如,使用 mysql 客户端:

shell> mysqlpump [options] > dump.sql
shell>mysql < dump.sql

以下讨论提供了其他 mysqlpump 用法示例。

要查看 mysqlpump 支持 的选项列表 ,请发出命令 mysqlpump --help 。

mysqlpump选项摘要

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

表4.13 mysqlpump选项

格式 描述 介绍 删除
--add降数据库 在每个CREATE DATABASE语句之前添加DROP DATABASE语句
--add-drop-table在 在每个CREATE TABLE语句之前添加DROP TABLE语句
--add拖放用户 在每个CREATE USER语句之前添加DROP USER语句
--add锁 使用LOCK TABLES和UNLOCK TABLES语句环绕每个表转储
- 全数据库 转储所有数据库
--bind地址 使用指定的网络接口连接到MySQL服务器
--character集-DIR 安装字符集的目录
--column统计 编写ANALYZE TABLE语句以生成统计直方图 8.0.2
--complete-插入 使用包含列名的完整INSERT语句
- 压缩 压缩客户端和服务器之间发送的所有信息
--compress输出 输出压缩算法
--databases 将所有名称参数解释为数据库名称
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--default-并行 并行处理的默认线程数
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
--defer表的索引 对于重新加载,将索引创建推迟到加载表行之后
--events 转储转储数据库中的事件
--exclude-数据库 要从转储中排除的数据库
--exclude事件 要从转储中排除的事件
--exclude例程 从转储中排除的例程
--exclude桌 要从转储中排除的表
--exclude-触发器 触发器从转储中排除
--exclude用户 用户要从转储中排除
--extended-插入 使用多行INSERT语法
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
--hex二进制大对象 使用十六进制表示法转储二进制列
- 主办 要连接的主机(IP地址或主机名)
--include-数据库 要包含在转储中的数据库
--include事件 要包含在转储中的事件
--include例程 在转储中包含的例程
--include桌 要包含在转储中的表
--include-触发器 触发器包含在转储中
--include用户 用户要包含在转储中
--insert,忽视 编写INSERT IGNORE而不是INSERT语句
--log错误文件 将警告和错误附加到命名文件
--login路径 从.mylogin.cnf中读取登录路径选项
--max允许的分组 发送到服务器或从服务器接收的最大数据包长度
--net缓冲长度 TCP / IP和套接字通信的缓冲区大小
--no创建-DB 不要编写CREATE DATABASE语句
--no创建-信息 不要编写重新创建每个转储表的CREATE TABLE语句
--no-默认 不读选项文件
--parallel-模式 指定模式处理并行性
- 密码 连接到服务器时使用的密码
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
- 更换 编写REPLACE语句而不是INSERT语句
- 结果文件 直接输出到给定文件
--routines 从转储的数据库转储存储的例程(过程和函数)
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--set-字符集 将SET NAMES default_character_set添加到输出
--set-GTID,清除 是否将SET @@ GLOBAL.GTID_PURGED添加到输出中 8.0.1
--single事务 在单个事务中转储表
--skip-定义者 从视图和存储程序CREATE语句中省略DEFINER和SQL SECURITY子句
--skip-转储行 不要转储表行
- 插座 对于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版本 允许加密连接的协议
--triggers 转储每个转储表的触发器
--tz-UTC 将SET TIME_ZONE ='+ 00:00'添加到转储文件
- 用户 连接到服务器时使用的MySQL用户名
--users 转储用户帐户
- 版 显示版本信息并退出
--watch正在进行 显示进度指示器

mysqlpump选项说明

mysqlpump对象选择

mysqlpump 有一组包含和排除选项,可以过滤多种对象类型,并提供对要转储的对象的灵活控制:

任何包含或排除选项可以多次给出。 效果是附加的。 这些选项的顺序无关紧要。

每个包含和排除选项的值是相应对象类型的逗号分隔名称列表。 例如:

--exclude-数据库=测试,世界
--include桌=顾客,发票

对象名称中允许使用通配符:

  • % 匹配零个或多个字符的任何序列。

  • _ 匹配任何单个字符。

例如, --include-tables=t%,__tmp 匹配以...开头的所有表名 t 和以其结尾的所有五个字符的表名 tmp 。

对于用户,使用隐含主机解释未指定主机部分的名称 % 。 例如, u1 并且 u1@% 是等价的。 这与MySQL中通常适用的等效性相同(请参见 第6.2.4节“指定帐户名” )。

包含和排除选项互动如下:

  • 默认情况下,没有包含或排除选项, mysqlpump会 转储所有数据库(在 mysqlpump限制中 注明某些例外 )。

  • 如果在没有排除选项的情况下给出包含选项,则仅转储名为包含的对象。

  • 如果在没有包含选项的情况下给出排除选项,则会转储所有对象,但命名为排除的对象除外。

  • 如果给出包含和排除选项,则不会转储所有名为排除且未命名为包含的对象。 转储所有其他对象。

如果要转储多个数据库,则可以通过使用数据库名称限定对象名称来命名特定数据库中的表,触发器和例程。 以下命令转储数据库 db1 和 db2 ,但不包括表 db1.t1 和 db2.t2 :

外壳> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2

以下选项提供了指定要转储的数据库的备用方法:

mysqlpump并行处理

mysqlpump 可以使用并行来实现并发处理。 您可以选择数据库之间的并发(以同时转储多个数据库)和数据库内的并发(以同时转储给定数据库中的多个对象)。

默认情况下, mysqlpump 使用两个线程设置一个队列。 您可以创建其他队列并控制分配给每个队列的线程数,包括默认队列:

  • --default-parallelism=N 指定用于每个队列的默认线程数。 如果没有这个选项, N 则为2。

    默认队列始终使用默认线程数。 除非另行指定,否则其他队列使用默认线程数。

  • --parallel-schemas=[N:]db_list 设置一个处理队列,用于转储命名的数据库, db_list 并可选择指定队列使用的线程数。 db_list 是逗号分隔的数据库名称列表。 如果选项参数以...开头 N: ,则队列使用 N 线程。 否则,该 --default-parallelism 选项确定队列线程的数量。

    该 --parallel-schemas 选项的 多个实例 创建多个队列。

    允许数据库列表中的名称包含 过滤选项支持 的相同 % 和 _ 通配符(请参阅 mysqlpump对象选择 )。

mysqlpump 使用默认队列来处理未使用 --parallel-schemas 选项 显式命名的任何数据库 ,并在命令选项选择它们时转储用户定义。

通常,对于多个队列, mysqlpump 使用 队列 处理的数据库集之间的并行性,以同时转储多个数据库。 对于使用多个线程的队列, mysqlpump 在数据库中使用并行性,以同时从给定数据库转储多个对象。 可能会出现例外情况; 例如, mysqlpump 可能会在从服务器数据库中的对象列表中获取队列。

启用并行后,可以交错来自不同数据库的输出。 例如, INSERT 并行转储的多个表中的语句可以交错; 声明不以任何特定顺序书写。 这不会影响重新加载,因为输出语句使用数据库名称限定对象名称,或者 USE 根据需要 在 语句 前面加上 语句。

并行性的粒度是单个数据库对象。 例如,不能使用多个线程并行转储单个表。

例子:

外壳> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3

mysqlpump 建立一个队列来处理 db1 和 db2 另一个排队的过程 db3 ,和默认队列来处理所有其他数据库。 所有队列都使用两个线程。

外壳> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
         --default-parallelism=4

这与前一个示例相同,只是所有队列都使用四个线程。

外壳> mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3

队列 db1 和 db2 使用五个线程,队列 db3 使用三个线程,默认队列使用默认的两个线程。

作为特殊情况,有 --default-parallelism=0 和没有 --parallel-schemas 选项, mysqlpump 作为单线程进程运行并且不创建任何队列。

mysqlpump限制

mysqlpump 不转储 performance_schema , ndbinfo 或 sys 默认模式。 要转储其中任何一个,请在命令行中明确命名它们。 您也可以使用 --databases 或 --include-databases 选项 命名它们 。

mysqlpump 不会转储 INFORMATION_SCHEMA 架构。

mysqlpump 不会转储 InnoDB CREATE TABLESPACE 语句。

mysqlpump 使用 CREATE USER 和 GRANT 语句 以逻辑形式转储用户帐户 (例如,当您使用 --include-users 或 --users 选项时)。 出于这个原因,转储 mysql 系统数据库默认情况下不包括含有用户定义的授权表: user , db , tables_priv , columns_priv , procs_priv ,或 proxies_priv 。 要转储任何授权表,请为 mysql 数据库 命名, 后跟表名:

外壳> mysqlpump mysql user db ...

4.5.7  mysqlshow - 显示数据库,表和列信息

该 mysqlshow 客户可用来快速查看哪些数据库中存在,他们的表或表中的列或索引。

mysqlshow 为几个SQL SHOW 语句 提供了命令行界面 。 请参见 第13.7.6节“显示语法” 。 直接使用这些语句可以获得相同的信息。 例如,您可以从 mysql 客户端程序 发出它们 。

像这样 调用 mysqlshow :

外壳> mysqlshow [options] [db_name [tbl_name [col_name]]]
  • 如果没有给出数据库,则显示数据库名称列表。

  • 如果没有给出表,则显示数据库中的所有匹配表。

  • 如果未指定列,则会显示表中所有匹配的列和列类型。

输出仅显示您具有某些权限的那些数据库,表或列的名称。

如果最后的参数包含shell或SQL通配符( * , ? , % ,或 _ ),只有那些通过通配符匹配的名称显示。 如果数据库名称包含任何下划线,那么应使用反斜杠对这些下划线进行转义(某些Unix shell需要两个)以获取正确的表或列的列表。 * 和 ? 字符转换为SQL % 和 _ 通配符。 当您尝试显示 _ 名称 中包含a的表的列时,这可能会导致一些混淆 ,因为在这种情况下, mysqlshow 仅显示与模式匹配的表名称。 通过 % 在命令行上 添加额外的 last作为单独的参数, 可以轻松解决此 问题。

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

表4.14 mysqlshow选项

格式 描述 介绍 删除
--bind地址 使用指定的网络接口连接到MySQL服务器
- 压缩 压缩客户端和服务器之间发送的所有信息
- 计数 显示每个表的行数
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--default-字符集 指定默认字符集
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
--enable-明文-插件 启用明文身份验证插件
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
--keys 显示表索引
--login路径 从.mylogin.cnf中读取登录路径选项
--no-默认 不读选项文件
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
- 协议 要使用的连接协议
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
- 显示,表型 显示指示表类型的列
- 插座 对于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版本 允许加密连接的协议
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出

4.5.8  mysqlslap - 加载仿真客户端

mysqlslap 是一个诊断程序,旨在模拟MySQL服务器的客户端负载并报告每个阶段的时间。 它就像多个客户端正在访问服务器一样。

像这样 调用 mysqlslap :

外壳> mysqlslap [options]

某些选项,例如 --create 或 --query 允许您指定包含SQL语句的字符串或包含语句的文件。 如果指定文件,则默认情况下每行必须包含一个语句。 (也就是说,隐式语句分隔符是换行符。)使用该 --delimiter 选项指定不同的分隔符,这使您可以指定跨越多行的语句或在一行上放置多个语句。 您不能在文件中包含注释; mysqlslap 不理解它们。

mysqlslap 分三个阶段运行:

  1. 创建架构,表以及可选的任何存储程序或数据以用于测试。 此阶段使用单个客户端连接。

  2. 运行负载测试。 此阶段可以使用许多客户端连接。

  3. 清理(​​如果指定,则断开连接,删除表)。 此阶段使用单个客户端连接。

例子:

提供您自己的创建和查询SQL语句,每个查询50个客户端,每个查询200个(在一行中输入命令):

mysqlslap --delimiter =“;”
  --create =“CREATE TABLE a(b int); INSERT IN TO VALUES(23)”
  --query =“SELECT * FROM a”--concurrency = 50 --iterations = 200

让 mysqlslap 使用包含两 INT 列和三 VARCHAR 列 的表构建查询SQL语句 。 使用五个客户端,每个查询20次。 不要创建表或插入数据(即,使用先前测试的模式和数据):

mysqlslap --concurrency = 5 --iterations = 20
  --number-int-cols = 2 --number-char-cols = 3
  --auto-产生-SQL

告诉程序从指定的文件加载create,insert和query SQL语句,其中该 create.sql 文件有多个由(由)分隔的表创建语句 ';' 和多个insert语句 ';' 。 该 --query 文件将有多个分隔的查询 ';' 。 运行所有load语句,然后使用五个客户端(每个五次)运行查询文件中的所有查询:

mysqlslap --concurrency = 5
  --iterations = 5 --query = query.sql --create = create.sql
  对齐和美化--delimiter = “;”

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

表4.15 mysqlslap选项

格式 描述 介绍 删除
--auto-产生-SQL 在文件中未提供或使用命令选项时自动生成SQL语句
--auto-产生-SQL插件自动增量 将AUTO_INCREMENT列添加到自动生成的表中
--auto-生成-SQL执行数 指定自动生成的查询数
--auto-生成-SQL-GUID-主 将基于GUID的主键添加到自动生成的表
--auto-生成-SQL负载型 指定测试负载类型
--auto-生成-SQL二次索引 指定要添加到自动生成的表的二级索引数
--auto-产生-SQL唯一查询号码 为自动测试生成多少个不同的查询。
--auto-产生-SQL唯一写入数 为--auto-generate-sql-write-number生成多少个不同的查询
--auto-产生-SQL写号 每个线程要执行多少行插入
- 承诺 提交前要执行的语句数。
- 压缩 压缩客户端和服务器之间发送的所有信息
--concurrency 发出SELECT语句时要模拟的客户端数
- 创建 包含用于创建表的语句的文件或字符串
--create-模式 用于运行测试的模式
--csv 以逗号分隔值格式生成输出
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
对齐和美化--delimiter 在SQL语句中使用的分隔符
- 分离 在每个N语句之后分离(关闭并重新打开)每个连接
--enable-明文-插件 启用明文身份验证插件
- 发动机 用于创建表的存储引擎
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
- 主办 连接到给定主机上的MySQL服务器
--iterations 运行测试的次数
--login路径 从.mylogin.cnf中读取登录路径选项
--no-默认 不读选项文件
- 没有下降 不要删除在测试运行期间创建的任何模式
--number-char型的cols 如果指定了--auto-generate-sql,则使用的VARCHAR列数
--number-INT-的cols 如果指定了--auto-generate-sql,则使用的INT列数
--number-的查询 将每个客户端限制为大约此数量的查询
--only打印 不要连接到数据库。 mysqlslap只打印它本来会做的事情
- 密码 连接到服务器时使用的密码
- 管 在Windows上,使用命名管道连接到服务器
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--post查询 包含在测试完成后要执行的语句的文件或字符串
--post系统 测试完成后使用system()执行的字符串
- 事先查询 包含在运行测试之前要执行的语句的文件或字符串
- 事先系统 在运行测试之前使用system()执行的字符串
--print-默认 打印默认选项
- 协议 要使用的连接协议
--query 包含用于检索数据的SELECT语句的文件或字符串
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--shared存储器碱基名 用于共享内存连接的共享内存的名称
- 无声 静音模式
- 插座 对于localhost的连接,要使用的Unix套接字文件
--sql模式 为客户端会话设置SQL模式
--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版本 允许加密连接的协议
- 用户 连接到服务器时使用的MySQL用户名
--verbose 详细模式
- 版 显示版本信息并退出

4.6 MySQL管理和实用程序

本节介绍执行各种实用程序操作的管理程序和程序。

4.6.1  ibd2sdi - InnoDB表空间SDI提取实用程序

ibd2sdi 是一个用于 从 表空间文件中 提取 序列化字典信息 (SDI) 的实用程序 InnoDB 。 SDI数据存在于所有持久 InnoDB 表空间文件中。

ibd2sdi 可以在 每个 表的文件 表 空间文件( *.ibd 文件), 通用表空间 文件( *.ibd 文件), 系统表空间 文件( ibdata* 文件)和数据字典表空间( mysql.ibd )上运行。 它不支持与临时表空间或撤消表空间一起使用。

ibd2sdi 可以在运行时或服务器脱机时使用。 在 与SDI相关的 DDL 操作, ROLLBACK 操作和撤消日志清除操作期间,当 ibd2sdi 无法读取存储在表空间中的SDI数据 时,可能会有很短的时间间隔 。

ibd2sdi 从指定的表空间执行未提交的SDI读取。 不访问重做日志和撤消日志。

像这样 调用 ibd2sdi 实用程序:

外壳> ibd2sdi [options] file_name1 [file_name2 file_name3 ...]

ibd2sdi 支持多文件表空间,如 InnoDB 系统表空间,但一次不能在多个表空间上运行。 对于多文件表空间,请指定每个文件:

外壳> ibd2sdi ibdata1 ibdata2

必须按升序页码的顺序指定多文件表空间的文件。 如果两个连续文件具有相同的空间ID,则后一个文件必须以前一个文件的最后一个页码+ 1开头。

ibd2sdi 以 JSON 格式 输出SDI(包含id,type和data字段) 。

ibd2sdi选项

ibd2sdi 支持以下选项:

  • --help , -h

    显示命令行帮助。

    外壳> ibd2sdi --help
    用法:./ ib2sdi [-v] [-c <严格检查>] [-d <转储文件名>] [-n] filename1 [文件名]
    有关使用提示,请参阅http://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html。
      -h, -  help显示此帮助并退出。
      -v, -  version显示版本信息并退出。
      - #, -  debug [= name]输出调试日志。看到
                          http://dev.mysql.com/doc/refman/8.0/en/dbug-package.html
      -d, -  dump-file = name 
                          将表空间SDI转储到用户传递的文件中。
                          没有文件名,它将默认为stdout
      -s, -  skip-data跳过从SDI记录中检索数据。仅检索ID
                          并输入。
      -i, -  id =#检索与用户传递的id匹配的SDI记录。
      -t, -  type =#检索与传递的类型匹配的SDI记录
                          用户。
      -c, -  strict-check = name 
                          用户指定严格校验和算法。
                          允许的值是innodb,crc32,none。
      -n, -  no-check忽略校验和验证。
      -p, -  pretty相当格式化SDI输出。如果不是,则SDI不会
                          人类可读,但尺寸较小
                          (默认为on;使用--skip-pretty禁用。)
    
    变量(--variable-name = value)
    和布尔选项{FALSE | TRUE}值(读取选项后)
    --------------------------------- ----------------- -----------------------
    debug(无默认值)
    dump-file(无默认值)
    skip-data FALSE
    id 0
    输入0
    严格检查crc32
    不检查错误
    非常正确
    
  • --version , -v

    显示MySQL版本信息。

    外壳> ibd2sdi --version
    适用于Linux on x86_64的ibd2sdi Ver 8.0.3-dmr(源代码分发)
    
  • --debug[=debug_options] , -# [debug_options]

    打印调试日志。 有关调试选项,请参见 第29.5.4节“DBUG包” 。

    外壳> ibd2sdi --debug=d:t /tmp/ibd2sdi.trace
    
  • --dump-file= , -d

    将序列化字典信息(SDI)转储到指定的转储文件中。 如果未指定转储文件,则转储表空间SDI stdout 。

    外壳> ibd2sdi --dump-file=file_name ../data/test/t1.ibd
    
  • --skip-data , -s

    跳过的检索 data 字段值从串行化字典信息(SDI),并且仅检索 id 和 type 字段值,它是对于记录SDI主键。

    外壳> ibd2sdi --skip-data ../data/test/t1.ibd
    [ “ibd2sdi”
    ,
    {
    	“类型”:1,
    	“id”:330
    }
    ,
    {
    	“类型”:2,
    	“id”:7
    }
    ]
    
  • --id=# , -i #

    检索与指定的表或表空间对象id匹配的序列化字典信息(SDI)。 对象id对于对象类型是唯一的。 表和表空间对象ID也可以在 和 数据字典表 的 id 列中 找到 。 有关数据字典表的信息,请参见 第14.1节“数据字典模式” 。 mysql.tables mysql.tablespace

    外壳> ibd2sdi --id=7 ../data/test/t1.ibd
    [ “ibd2sdi”
    ,
    {
    	“类型”:2,
    	“id”:7,
    	“宾语”:
    		{
        “mysqld_version_id”:80003,
        “dd_version”:80003,
        “sdi_version”:1,
        “dd_object_type”:“表空间”,
        “dd_object”:{
            “name”:“test / t1”,
            “评论”:“”,
            “选项”:“”,
            “se_private_data”:“flags = 16417; id = 2; server_version = 80003; space_version = 1;”,
            “引擎”:“InnoDB”,
            “档案”:[
                {
                    “ordinal_position”:1,
                    “filename”:“。/ test / t1.ibd”,
                    “se_private_data”:“id = 2;”
                }
            ]
        }
    }
    }
    ]
    
  • --type=# , -t #

    检索与指定对象类型匹配的序列化字典信息(SDI)。 SDI是为table(type = 1)和tablespace(type = 2)对象提供的。

    外壳> ibd2sdi --type=2 ../data/test/t1.ibd
    [ “ibd2sdi”
    ,
    {
    	“类型”:2,
    	“id”:7,
    	“宾语”:
    		{
        “mysqld_version_id”:80003,
        “dd_version”:80003,
        “sdi_version”:1,
        “dd_object_type”:“表空间”,
        “dd_object”:{
            “name”:“test / t1”,
            “评论”:“”,
            “选项”:“”,
            “se_private_data”:“flags = 16417; id = 2; server_version = 80003; space_version = 1;”,
            “引擎”:“InnoDB”,
            “档案”:[
                {
                    “ordinal_position”:1,
                    “filename”:“。/ test / t1.ibd”,
                    “se_private_data”:“id = 2;”
                }
            ]
        }
    }
    }
    ]
    
  • --strict-check , -c

    指定严格校验和算法,用于验证读取的页面的校验和。 选项包括 innodb , crc32 ,和 none 。

    在此示例中, innodb 指定 了 校验和算法 的严格版本 :

    外壳> ibd2sdi --strict-check=innodb ../data/test/t1.ibd
    

    在这个例子中,严格的版本 crc32 指定 校验和算法:

    外壳> ibd2sdi -c crc32 ../data/test/t1.ibd
    

    如果不指定 --strict-check 选项,验证对不严格执行 innodb , crc32 并 none 校验。

  • --no-check , -n

    跳过已读取的页面的校验和验证。

    外壳> ibd2sdi --no-check ../data/test/t1.ibd
    
  • --pretty , -p

    以JSON漂亮的打印格式输出SDI数据。 默认情况下启用。 如果禁用,SDI不是人类可读的,但尺寸较小。 使用 --skip-pretty 禁用。

    外壳> ibd2sdi --skip-pretty ../data/test/t1.ibd
    

4.6.2  innochecksum - 离线InnoDB文件校验和工具

innochecksum 打印 InnoDB 文件的 校验和 。 此工具读取 InnoDB 表空间文件,计算每个页面的校验和,将计算的校验和与存储的校验和进行比较,并报告不匹配,这表示页面已损坏。 它最初是为了在停电后加快验证表空间文件的完整性而开发的,但也可以在文件复制后使用。 由于校验和不匹配导致 InnoDB 故意关闭正在运行的服务器,因此最好使用此工具而不是等待生产中的服务器遇到损坏的页面。

innochecksum 不能用于服务器已打开的表空间文件。 对于此类文件,您应该使用 CHECK TABLE 检查表空间中的表。 尝试 在服务器已打开的表空间上 运行 innochecksum 将导致 “ 无法锁定文件 ” 错误。

如果找到校验和不匹配,通常会从备份恢复表空间或启动服务器并尝试使用 mysqldump 对表空间中的表进行备份。

像这样 调用 innochecksum :

外壳> innochecksum [options] file_name

innochecksum选项

innochecksum 支持以下选项。 对于引用页码的选项,数字从零开始。

  • --help , -?

    显示命令行帮助。 用法示例:

    外壳> innochecksum --help
    
  • --info , -I

    同义词 --help 。 显示命令行帮助。 用法示例:

    外壳> innochecksum --info
    
  • --version , -V

    显示版本信息。 用法示例:

    外壳> innochecksum --version
    
  • --verbose , -v

    详细模式; 每五秒钟将一个进度指示器打印到日志文件中。 要打印进度指示器,必须使用指定日志文件 --log option 。 要打开 verbose 模式,请运行:

    外壳> innochecksum --verbose
    

    要关闭详细模式,请运行:

    外壳> innochecksum --verbose=FALSE
    

    该 --verbose 选项与 --log 选项可以同时指定。 例如:

    外壳> innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt
    

    要在日志文件中找到进度指示器信息,您可以执行以下搜索:

    外壳> cat ./logtest.txt | grep -i "okay"
    

    日志文件中的进度指示器信息显示类似于以下内容:

    第1663页好的:完成2.863%
    第8447页好的:完成了14.537%
    第13695页好的:完成了23.568%
    第18815页好的:完成了32.379%
    第23039页好的:完成39.648%
    第28351页好的:完成了48.789%
    第33023页好的:完成了56.828%
    第37951页好的:完成了65.308%
    第44095页好的:完成了75.881%
    第49407页好的:完成了85.022%
    第54463页好的:93.722%完成
    ...
    
  • --count , -c

    打印文件中页数的计数并退出。 用法示例:

    外壳> innochecksum --count ../data/test/tab1.ibd
    
  • --start-page=num , -s num

    从此页码开始。 用法示例:

    外壳> innochecksum --start-page=600 ../data/test/tab1.ibd
    

    要么:

    外壳> innochecksum -s 600 ../data/test/tab1.ibd
    
  • --end-page=num , -e num

    在此页码结束。 用法示例:

    外壳> innochecksum --end-page=700 ../data/test/tab1.ibd
    

    要么:

    外壳> innochecksum --p 700 ../data/test/tab1.ibd
    
  • --page=num , -p num

    仅检查此页码。 用法示例:

    外壳> innochecksum --page=701 ../data/test/tab1.ibd
    
  • --strict-check , -C

    指定严格的校验和算法。 选项包括 innodb , crc32 ,和 none 。

    在此示例中, innodb 指定 了 校验和算法:

    外壳> innochecksum --strict-check=innodb ../data/test/tab1.ibd
    

    在此示例中, crc32 指定 了 校验和算法:

    外壳> innochecksum -C crc32 ../data/test/tab1.ibd
    

    以下条件适用:

    • 如果您未指定该 --strict-check 选项,则 innochecksum将对其 进行验证 innodb , crc32 并且 none 。

    • 如果指定该 none 选项,则仅 none 允许 生成的校验和 。

    • 如果指定该 innodb 选项,则仅 innodb 允许 生成的校验和 。

    • 如果指定该 crc32 选项,则仅 crc32 允许 生成的校验和 。

  • --no-check , -n

    重写校验和时忽略校验和验证。 此选项仅可与 innochecksum --write 选项 一起使用 。 如果 --write 未指定选项, innochecksum 将终止。

    在此示例中,将 innodb 重写校验和以替换无效的校验和:

    外壳> innochecksum --no-check --write innodb ../data/test/tab1.ibd
    
  • --allow-mismatches , -a

    在 innochecksum 终止 之前允许的最大校验和不匹配数 。 默认设置为0. if --allow-mismatches=N ,where N>=0 , N 允许不匹配且 innochecksum 终止于 N+1 。 当 --allow-mismatches 设置为0时, innochecksum 在第一个校验和不匹配时终止。

    在此示例中,将 innodb 重写 现有 校验和以设置 --allow-mismatches 为1。

    外壳> innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd
    

    随着 --allow-mismatches 设置为1,如果在600页和1000页文件不匹配另一个在700页,校验为0-599和601-699页进行更新。 因为 --allow-mismatches 设置为1,校验和容忍第一个不匹配并在第二个不匹配时终止,使页面600和页面700-999保持不变。

  • --write=name , -w num

    重写校验和。 重写无效校验和时,该 --no-check 选项必须与 --write 选项 一起使用 。 该 --no-check 选项告诉 innochecksum 忽略无效校验和的验证。 --no-check 如果当前校验和有效,则 不必指定该 选项。

    使用该 --write 选项 时必须指定算法 。 该 --write 选项的 可能值为 :

    • innodb :使用原始算法从软件计算的校验和 InnoDB 。

    • crc32 :使用 crc32 算法 计算的校验和 ,可能使用硬件辅助完成。

    • none :一个常数。

    该 --write 选项将整个页面重写为磁盘。 如果新校验和与现有校验和相同,则新校验和不会写入磁盘以最小化I / O.

    innochecksum 在使用该 --write 选项 时获得独占锁定 。

    在此示例中,为以下 crc32 内容编写校验和 tab1.ibd :

    外壳> innochecksum -w crc32 ../data/test/tab1.ibd
    

    在此示例中,将 crc32 重写校验和以替换无效的 crc32 校验和:

    外壳> innochecksum --no-check --write crc32 ../data/test/tab1.ibd
    
  • --page-type-summary , -S

    显示表空间中每种页面类型的计数。 用法示例:

    外壳> innochecksum --page-type-summary ../data/test/tab1.ibd
    

    示例输出 --page-type-summary :

    文件:: ../数据/测试/ tab1.ibd
    ================页面类型摘要==============
    #PAGE_COUNT PAGE_TYPE
    ===============================================
           2索引页面
           0撤消日志页面
           1 Inode页面
           0插入缓冲区空闲列表页面
           2新分配的页面
           1插入缓冲区位图
           0系统页面
           0交易系统页面
           1文件空间标题
           0范围描述符页面
           0 BLOB页面
           0压缩的BLOB页面
           0其他类型的页面
    ===============================================
    附加信息:
    撤消页面类型:0插入,0更新,0其他
    撤消页面状态:0活动,0缓存,0 to_free,0 to_purge,0准备,0其他
    
  • --page-type-dump , -D

    将表空间中每个页面的页面类型信息转储到 stderr 或 stdout 。 用法示例:

    外壳> innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd
    
  • --log , -l

    innochecksum 工具的 日志输出 。 必须提供日志文件名。 日志输出包含每个表空间页面的校验和值。 对于未压缩的表,还提供了LSN值。 在 --log 替换 --debug 选项,这是早期版本中提供。 用法示例:

    外壳> innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd
    

    要么:

    外壳> innochecksum -l /tmp/log.txt ../data/test/tab1.ibd
    
  • - 选项。

    指定 - 从标准输入读取 的 选项。 如果在 预期 “ 从标准读取 ” - 时缺少 该 选项 , innochecksum 将输出 innochecksum 使用信息,表明 省略 了 “ - ” 选项。 示例用法:

    外壳> cat t1.ibd | innochecksum -
    

    在此示例中, innochecksum 将 crc32 校验和算法 写入 a.ibd 而不更改原始 t1.ibd 文件。

    外壳> cat t1.ibd | innochecksum --write=crc32 - > a.ibd
    

在多个用户定义的表空间文件上运行innochecksum

以下示例演示如何 在多个用户定义的表空间文件( 文件) 上 运行 innochecksum .ibd 。

对 “ test ” 数据库 中的 所有tablespace( )文件 运行 innochecksum : .ibd

shell> innochecksum ./data/test/*.ibd

对于 文件名以 “ t ” 开头 的所有表空间文件( .ibd 文件) 运行 innochecksum :

shell> innochecksum ./data/test/t*.ibd

对 目录 中的 所有表空间文件( 文件) 运行 innochecksum : .ibd data

shell> innochecksum ./data/*/*.ibd
注意

Windows操作系统不支持在多个用户定义的表空间文件上 运行 innochecksum ,因为Windows shell(如 cmd.exe) 不支持glob模式扩展。 在Windows系统上, 必须为每个用户定义的表空间文件单独运行 innochecksum 。 例如:

cmd> innochecksum.exe t1.ibd
cmd> innochecksum.exe t2.ibd
cmd> innochecksum.exe t3.ibd

在多个系统表空间文件上运行innochecksum

默认情况下,只有一个 InnoDB 系统表空间文件( ibdata1 ),但可以使用该 innodb_data_file_path 选项 定义系统表空间的多个文件 。 在下面的例子中,三个文件系统表空间使用的定义 innodb_data_file_path 选项: ibdata1 , ibdata2 ,和 ibdata3 。

外壳> ./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"

这三个文件( ibdata1 , ibdata2 和 ibdata3 )构成一个逻辑系统表空间。 要 在形成一个逻辑系统表空间的多个文件上 运行 innochecksum , innochecksum 需要 - 选择从标准输入读取表空间文件,这相当于连接多个文件以创建一个文件。 对于上面提供的示例,将使用以下 innochecksum 命令:

shell> cat ibdata * | innochecksum  -

有关 “ - ” 选项的 更多信息, 请参阅 innochecksum 选项信息 。

注意

Windows操作系统不支持在同一表空间中的多个文件上 运行 innochecksum ,因为Windows shell(如 cmd.exe) 不支持glob模式扩展。 在Windows系统上, 必须为每个系统表空间文件单独运行 innochecksum 。 例如:

cmd> innochecksum.exe ibdata1
cmd> innochecksum.exe ibdata2
cmd> innochecksum.exe ibdata3

4.6.3  myisam_ftdump - 显示全文索引信息

myisam_ftdump 显示有关 表中 FULLTEXT 索引的 信息 MyISAM 。 它 MyISAM 直接 读取 索引文件,因此必须在表所在的服务器主机上运行。 在使用 myisam_ftdump 之前 ,请确保 FLUSH TABLES 在服务器运行时首先 发出 语句。

myisam_ftdump 扫描并转储整个索引,这不是特别快。 另一方面,单词的分布不经常变化,因此不需要经常运行。

像这样 调用 myisam_ftdump :

外壳> myisam_ftdump [options] tbl_name index_num

该 tbl_name 参数应该是一个名称 MyISAM 表。 您还可以通过命名其索引文件(带有 .MYI 后缀 的文件 ) 来指定表 。 如果未 在表文件所在的目录中 调用 myisam_ftdump ,则表或索引文件名必须以表的数据库目录的路径名开头。 索引号以0开头。

示例:假设 test 数据库包含名为 mytexttable 具有以下定义 的表 :

CREATE TABLE mytexttable
(
  id INT NOT NULL,
  txt TEXT NOT NULL,
  PRIMARY KEY(id),
  FULLTEXT(txt)
)ENGINE = MyISAM;

索引 id 为索引0, FULLTEXT 索引 txt 为索引1.如果您的工作目录是 test 数据库目录, 请 按如下方式 调用 myisam_ftdump :

外壳> myisam_ftdump mytexttable 1

如果是 test 数据库目录 的路径名 /usr/local/mysql/data/test ,则还可以使用该路径名指定表名参数。 如果您不在 数据库目录中 调用 myisam_ftdump , 这将非常有用 :

外壳> myisam_ftdump /usr/local/mysql/data/test/mytexttable 1

您可以使用 myisam_ftdump 按类似于Unix的系统上的出现频率生成索引条目列表:

外壳> myisam_ftdump -c mytexttable 1 | sort -r

在Windows上,使用:

外壳> myisam_ftdump -c mytexttable 1 | sort /R

myisam_ftdump 支持以下选项:

  • --help , -h -?

    显示帮助消息并退出。

  • --count , -c

    计算每个字的统计数据(计数和全局权重)。

  • --dump , -d

    转储索引,包括数据偏移和字权重。

  • --length , -l

    报告长度分布。

  • --stats , -s

    报告全球指数统计。 如果未指定其他操作,则这是默认操作。

  • --verbose , -v

    详细模式。 打印有关程序功能的更多输出。

4.6.4  myisamchk - MyISAM表维护实用程序

该 myisamchk的 程序获取信息有关数据库表或检查,修理,或优化他们。 myisamchk的 工作与 MyISAM 表(有表 .MYD 和 .MYI 文件存储数据和索引)。

您还可以使用 CHECK TABLE 和 REPAIR TABLE 语句来检查和修复 MyISAM 表。 请参见 第13.7.3.2节“检查表语法” 和 第13.7.3.5节“修复表语法” 。

不支持 将 myisamchk 与分区表一起 使用 。

警告

最好在执行表修复操作之前备份表; 在某些情况下,操作可能会导致数据丢失。 可能的原因包括但不限于文件系统错误。

像这样 调用 myisamchk :

外壳> myisamchk [options] tbl_name ...

在 options 你想要的指定 myisamchk的 做。 它们将在以下部分中介绍。 您还可以通过调用 myisamchk --help 获取选项列表 。

没有选项, myisamchk 只是将您的表检查为默认操作。 要获取更多信息或告知 myisamchk 采取纠正措施,请按照以下讨论中的说明指定选项。

tbl_name 是要检查或修复的数据库表。 如果 在数据库目录以外的其他位置 运行 myisamchk ,则必须指定数据库目录的路径,因为 myisamchk 不知道数据库的位置。 实际上, myisamchk 实际上并不关心您正在处理的文件是否位于数据库目录中。 您可以将与数据库表对应的文件复制到其他位置,并在那里对它们执行恢复操作。

如果您愿意, 可以在 myisamchk 命令行 上命名几个表 。 您还可以通过命名其索引文件(带有 .MYI 后缀 的文件 ) 来指定表 。 这使您可以使用模式指定目录中的所有表 *.MYI 。 例如,如果您在数据库目录中,则可以检查 MyISAM 该目录中的 所有 表,如下所示:

外壳> myisamchk *.MYI

如果您不在数据库目录中,则可以通过指定目录的路径来检查那里的所有表:

外壳> myisamchk /path/to/database_dir/*.MYI

您甚至可以通过指定带有MySQL数据目录路径的通配符来检查所有数据库中的所有表:

外壳> myisamchk /path/to/datadir/*/*.MYI

快速检查所有 MyISAM 表 的推荐方法 是:

外壳> myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果要检查所有 MyISAM 表并修复任何已损坏的表,可以使用以下命令:

外壳> myisamchk --silent --force --fast --update-state \
          --key_buffer_size=64M --myisam_sort_buffer_size=64M \
          --read_buffer_size=1M --write_buffer_size=1M \
          /path/to/datadir/*/*.MYI

此命令假定您有超过64MB的可用空间。 有关使用 myisamchk进行 内存分配的更多信息 ,请参见 第4.6.4.6节“myisamchk内存使用情况” 。

有关使用 myisamchk的 其他信息 ,请参见 第7.6节“MyISAM表维护和崩溃恢复” 。

重要

在运行 myisamchk 时,必须确保没有其他程序正在使用这些表 。 这样做的最有效方法是在运行 myisamchk时 关闭MySQL服务器 ,或锁定 myisamchk 正在使用的 所有表 。

否则,当您运行 myisamchk时 ,它可能会显示以下错误消息:

警告:客户端正在使用或未正确关闭表

这意味着您正在尝试检查已由另一个 尚未关闭文件的 程序(例如 mysqld 服务器) 更新的表, 或者在没有正确关闭文件的情况下已经死亡的表,这有时会导致损坏一个或多个 MyISAM 表。

如果 mysqld 正在运行,则必须强制它通过使用刷新仍在内存中缓冲的任何表修改 FLUSH TABLES 。 然后,您应确保在运行 myisamchk 时没有人使用这些表

但是,避免此问题的最简单方法是使用 CHECK TABLE 而不是 myisamchk 来检查表。 请参见 第13.7.3.2节“检查表语法” 。

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

表4.16 myisamchk选项

格式 描述
- 分析 分析关键值的分布
--backup 将.MYD文件备份为file_name-time.BAK
--block搜索 找到给定偏移量的块所属的记录
- 校验 检查表格是否有错误
--check-唯一改变的 仅检查自上次检查后已更改的表
--correct校验和 更正表的校验和信息
--data文件长度 数据文件的最大长度(当数据文件已满时重新创建数据文件)
--debug 写调试日志
--decode_bits Decode_bits
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
- 描述 打印有关表格的一些描述性信息
--extend检查 执行非常彻底的表检查或修复,尝试从数据文件中恢复每个可能的行
- 快速 仅检查未正确关闭的表
- 力 如果myisamchk在表中发现任何错误,请自动执行修复操作
- 力 覆盖旧的临时文件。 用于-r或-o选项
--ft_max_word_len FULLTEXT索引的最大字长
--ft_min_word_len FULLTEXT索引的最小字长
--ft_stopword_file 使用此文件中的停用词而不是内置列表
- 救命 显示帮助消息并退出
- 救命 显示帮助消息并退出
- 信息 打印有关已检查表的信息统计信息
--key_buffer_size 用于MyISAM表的索引块的缓冲区大小
--keys使用的 一个位值,指示要更新的索引
--max记录长度 如果myisamchk无法分配内存来保存它们,则跳过大于给定长度的行
--medium检查 执行比--extend-check操作更快的检查
--myisam_block_size 用于MyISAM索引页的块大小
--myisam_sort_buffer_size 在执行REPAIR时或使用CREATE INDEX或ALTER TABLE创建索引时对索引进行排序时分配的缓冲区
--no-默认 不读选项文件
--parallel-恢复 使用与-r和-n相同的技术,但使用不同的线程(beta)并行创建所有键
--print-默认 打印默认选项
- 快 通过不修改数据文件实现更快的修复。
--read_buffer_size 执行顺序扫描的每个线程为其扫描的每个表分配一个此大小的缓冲区
- 只读 不要将表标记为已选中
- 恢复 做一个可以解决几乎任何问题的修复,除了非唯一的唯一键
--safe-恢复 使用旧的恢复方法进行修复,该方法按顺序读取所有行,并根据找到的行更新所有索引树
--set-自动递增 强制AUTO_INCREMENT编号以使新记录以给定值开始
--set-整理 指定用于排序表索引的排序规则
- 无声 静音模式
--sort_buffer_size 在执行REPAIR时或使用CREATE INDEX或ALTER TABLE创建索引时对索引进行排序时分配的缓冲区
--sort指数 以高 - 低顺序对索引树块进行排序
--sort_key_blocks sort_key_blocks
--sort-记录 根据特定索引对记录进行排序
--sort-恢复 强制myisamchk使用排序来解析密钥,即使临时文件非常大
--stats_method 指定MyISAM索引统计信息收集代码应如何处理NULL
--tmpdir 用于存储临时文件的目录
--unpack 打开包含myisampack的表格
--update状态 将信息存储在.MYI文件中,以指示何时检查表以及表是否崩溃
--verbose 详细模式
- 版 显示版本信息并退出
--write_buffer_size 写缓冲区大小

4.6.4.1 myisamchk一般选项

本节中描述的选项可用于 myisamchk 执行的任何类型的表维护操作 。 此后面的部分描述了仅适用于特定操作的选项,例如表检查或修复。

您还可以使用 语法 设置以下变量 : --var_name=value

变量 默认值
decode_bits 9
ft_max_word_len 版本依赖性
ft_min_word_len 4
ft_stopword_file 内置列表
key_buffer_size 523264
myisam_block_size 1024
myisam_sort_key_blocks 16
read_buffer_size 262136
sort_buffer_size 2097144
sort_key_blocks 16
stats_method nulls_unequal
write_buffer_size 262136

可以使用 myisamchk --help 检查 可能的 myisamchk 变量及其默认值 :

myisam_sort_buffer_size 通过排序键修复键时使用,这是您使用时的正常情况 --recover 。 sort_buffer_size 是一个已弃用的同义词 myisam_sort_buffer_size 。

key_buffer_size 当您 --extend-check 通过将行逐行插入表中时(例如进行常规插入时) 检查表 或使用修复键时使用。 在以下情况下使用通过密钥缓冲区进行修复:

  • 你用 --safe-recover 。

  • 对密钥进行排序所需的临时文件将是直接创建密钥文件时的两倍。 当你有一个大的键值这是常有的事 CHAR , VARCHAR 或 TEXT 列,因为排序操作需要存储完整的键值因为它的收益。 如果您有大量临时空间并且可以 通过排序 强制 myisamchk 进行修复,则可以使用该 --sort-recover 选项。

通过密钥缓冲区修复所需的磁盘空间比使用排序要少得多,但速度也慢得多。

如果需要更快的修复,请将 key_buffer_size 和 myisam_sort_buffer_size 变量 设置为 可用内存的大约25%。 您可以将两个变量都设置为较大的值,因为一次只能使用其中一个变量。

myisam_block_size 是用于索引块的大小。

stats_method NULL 在 --analyze 给出选项 时,会 影响 索引统计信息收集的处理 方式。 它就像 myisam_stats_method 系统变量。 欲了解更多信息,请参阅的描述 myisam_stats_method 在 第5.1.8节,“服务器系统变量” 和 第8.3.8,“InnoDB和MyISAM索引统计集合” 。

ft_min_word_len 并 ft_max_word_len 指出 表上 FULLTEXT 索引 的最小和最大字长 MyISAM 。 ft_stopword_file 命名停用词文件。 这些需要在以下情况下进行设置。

如果使用 myisamchk 执行修改表索引的操作(例如修复或分析),则 FULLTEXT 使用默认的全文参数值(最小和最大字长)和停用词文件重建索引,除非您另行指定。 这可能导致查询失败。

出现此问题的原因是这些参数仅由服务器知道。 它们不存储在 MyISAM 索引文件中。 为了避免这个问题,如果你已经修改了最小或最大字长或服务器停止字文件,指定相同 ft_min_word_len , ft_max_word_len 和 ft_stopword_file 值 myisamchk的 ,你使用 的mysqld 。 例如,如果您将最小字长设置为3,则可以使用 myisamchk 修复表, 如下所示:

外壳> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI

为了确保 myisamchk的 和服务器使用全文参数相同的值,你可以将每一项都在 [mysqld] 和 [myisamchk] 选项文件的部分:

的[mysqld]
的ft_min_word_len = 3

[myisamchk的]
的ft_min_word_len = 3

到使用替代 myisamchk的 是使用 REPAIR TABLE , ANALYZE TABLE , OPTIMIZE TABLE ,或 ALTER TABLE 。 这些语句由服务器执行,服务器知道要使用的正确的全文参数值。

4.6.4.2 myisamchk检查选项

myisamchk 支持以下表检查操作选项:

  • --check , -c

    检查表格是否有错误。 如果未指定任何显式选择操作类型的选项,则这是默认操作。

  • --check-only-changed , -C

    仅检查自上次检查后已更改的表。

  • --extend-check , -e

    彻底检查表格。 如果表有很多索引,这个速度很慢。 此选项仅应在极端情况下使用。 通常, myisamchk 或 myisamchk --medium-check 应该能够确定表中是否有任何错误。

    如果您正在使用 --extend-check 并拥有足够的内存,则将 key_buffer_size 变量 设置 为较大值有助于更快地运行修复操作。

    另请参阅表修复选项下的此选项的说明。

    有关输出格式的说明,请参见 第4.6.4.5节“使用myisamchk获取表信息” 。

  • --fast , -F

    仅检查未正确关闭的表。

  • --force , -f

    如果 myisamchk 在表中发现任何错误,请 自动执行修复操作 。 修复类型与使用 --recover 或 -r 选项 指定的类型相同 。

  • --information , -i

    打印有关已检查表的信息统计信息。

  • --medium-check , -m

    执行比 --extend-check 操作 更快的检查 。 这只发现99.99%的错误,在大多数情况下应该足够好。

  • --read-only , -T

    不要将表标记为已选中。 如果您使用 myisamchk 检查一些其他不使用锁定的应用程序正在使用的表,例如 在禁用外部锁定时运行 mysqld , 这将非常有用 。

  • --update-state , -U

    将信息存储在 .MYI 文件中以指示何时检查表以及表是否崩溃。 这应该用于获得该 --check-only-changed 选项的 全部好处 ,但是如果 mysqld 服务器正在使用该表并且您在禁用外部锁定的情况下运行它, 则不应使用此选项 。

4.6.4.3 myisamchk修复选项

myisamchk 支持表修复操作的以下选项(当 给出 诸如 --recover 或 --safe-recover 给出 的选项时执行的操作 ):

  • --backup , -B

    将 .MYD 文件 备份 为 file_name-time.BAK

  • --character-sets-dir=dir_name

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

  • --correct-checksum

    更正表的校验和信息。

  • --data-file-length=len , -D len

    数据文件的最大长度(当数据文件 “ 满 ” 时重新创建数据文件 )。

  • --extend-check , -e

    执行尝试从数据文件中恢复每个可能行的修复。 通常,这也会发现很多垃圾行。 除非你绝望,否则不要使用此选项。

    另请参阅表检查选项下的此选项的说明。

    有关输出格式的说明,请参见 第4.6.4.5节“使用myisamchk获取表信息” 。

  • --force , -f

    覆盖旧的中间文件(名称相似的文件 tbl_name.TMD )而不是中止。

  • --keys-used=val , -k val

    对于 myisamchk ,选项值是一个位值,指示要更新的索引。 选项值的每个二进制位对应一个表索引,其中第一个索引是位0.选项值0禁用对所有索引的更新,这可用于获得更快的插入。 可以使用 myisamchk -r 重新激活已停用的索引 。

  • --no-symlinks , -l

    不要遵循符号链接。 通常 myisamchk会 修复符号链接指向的表。 从MySQL 4.0开始,此选项不存在,因为4.0版本的版本在修复操作期间不会删除符号链接。

  • --max-record-length=len

    如果 myisamchk 无法分配内存来保存它们, 则跳过大于给定长度的行 。

  • --parallel-recover , -p

    使用同样的技术 -r 和 -n ,而是创建并行的所有按键,使用不同的线程。 这是beta质量的代码。 使用风险自负!

  • --quick , -q

    通过仅修改索引文件而不是数据文件来实现更快的修复。 您可以指定此选项两次以强制 myisamchk 在重复键的情况下修改原始数据文件。

  • --recover , -r

    做一个可以解决几乎所有问题的修复,除了非唯一的唯一键(这是一个极不可能的 MyISAM 表 错误 )。 如果要恢复表,可以选择先尝试。 --safe-recover 只有在 myisamchk 报告无法使用表恢复时, 您才应该尝试 --recover 。 (在不太可能的情况下 --recover 失败,数据文件保持不变。)

    如果你有很多内存,你应该增加值 myisam_sort_buffer_size 。

  • --safe-recover , -o

    使用旧的恢复方法进行修复,该方法按顺序读取所有行,并根据找到的行更新所有索引树。 这比一个数量级慢 --recover ,但可以处理几个不可能的情况 --recover 。 此恢复方法也使用比磁盘空间少得多的磁盘空间 --recover 。 通常,您应首先使用修复 --recover ,然后 --safe-recover 仅在 --recover 失败时进行 修复 。

    如果你有很多内存,你应该增加值 key_buffer_size 。

  • --set-collation=name

    指定用于排序表索引的排序规则。 字符集名称由排序规则名称的第一部分隐含。

  • --sort-recover , -n

    强制 myisamchk 使用排序来解析密钥,即使临时文件非常大。

  • --tmpdir=dir_name , -t dir_name

    用于存储临时文件的目录的路径。 如果未设置, myisamchk 将使用 TMPDIR 环境变量 的值 。 --tmpdir 可以设置为以循环方式连续使用的目录路径列表,以创建临时文件。 目录名之间的分隔符是 : Unix上 的冒号( )和 ; Windows上 的分号( )。

  • --unpack , -u

    打开包含 myisampack 的表格 。

4.6.4.4其他myisamchk选项

除了表检查和修复之外, myisamchk 支持以下操作的以下选项:

  • --analyze , -a

    分析关键值的分布。 这可以通过使连接优化器更好地选择连接表的顺序以及应该使用的索引来提高连接性能。 要获取有关密钥分发的信息,请使用 myisamchk --description --verbose tbl_name 命令或 语句。 SHOW INDEX FROM tbl_name

  • --block-search=offset , -b offset

    找到给定偏移量的块所属的记录。

  • --description , -d

    打印有关表格的一些描述性信息。 指定 --verbose 选项一次或两次会产生其他信息。 请参见 第4.6.4.5节“使用myisamchk获取表信息” 。

  • --set-auto-increment[=value] , -A[value]

    强制 AUTO_INCREMENT 新记录的编号从给定值开始(如果现有记录的 AUTO_INCREMENT 值大 ,则为更高 )。 如果 value 未指定,则 AUTO_INCREMENT 新记录的数字以表中当前最大值加一。

  • --sort-index , -S

    以高 - 低顺序对索引树块进行排序。 这样可以优化搜索并使表扫描更快地使用索引。

  • --sort-records=N , -R N

    根据特定索引对记录进行排序。 这使您的数据更加本地化,​​并且可以加速 使用此索引 的基于范围 SELECT 和 ORDER BY 操作。 (第一次使用此选项对表进行排序时,它可能非常慢。)要确定表的索引号,请使用 SHOW INDEX ,它以 myisamchk 看到 的相同顺序显示表的索引 。 索引从1开始编号。

    如果key不是packed( PACK_KEYS=0 ),它们具有相同的长度,所以当 myisamchk对 记录进行排序和移动时,它只会覆盖索引中的记录偏移量。 如果密钥是packed( PACK_KEYS=1 ),则 myisamchk 必须首先解压缩密钥块,然后重新创建索引并再次打包密钥块。 (在这种情况下,重新创建索引比更新每个索引的偏移更快。)

4.6.4.5使用myisamchk获取表信息

要获取 MyISAM 表 的描述 或有关它的统计信息,请使用此处显示的命令。 这些命令的输出将在本节后面介绍。

所述 tbl_name 参数可以是任一的名称 MyISAM 表或它的索引文件的名称,如在 第4.6.4节“ myisamchk的 - MyISAM表的维护工具” 。 tbl_name 可以给出 多个 参数。

假设一个名为的表 person 具有以下结构。 ( MAX_ROWS 包括表选项,以便在 稍后显示的 myisamchk 的示例输出 中,某些值更小并且更容易适合输出格式。)

创建表人
(
  id INT NOT NULL AUTO_INCREMENT,
  last_name VARCHAR(20)NOT NULL,
  first_name VARCHAR(20)NOT NULL,
  生日,
  死亡日期,
  PRIMARY KEY(id),
  INDEX(last_name,first_name),
  INDEX(出生)
)MAX_ROWS = 1000000 ENGINE = MYISAM;

假设该表具有以下数据和索引文件大小:

-rw-rw ---- 1 mysql mysql 9347072 8月19日11:47 person.MYD
-rw-rw ---- 1 mysql mysql 6066176 8月19日11:47 person.MYI

myisamchk -dvv 输出 示例 :

MyISAM文件:person
记录格式:已打包
字符集:utf8mb4_0900_ai_ci(255)
文件版本:1
创作时间:2017-03-30 21:21:30
状态:已检查,已分析,已优化的密钥,已排序的索引页
自动增量键:1最后一个值:306688
数据记录:306688已删除块:0
数据文件部分:306688删除的数据:0
数据文件指针(字节):4密钥文件指针(字节):3
数据文件长度:9347072密钥文件长度:6066176
最大数据文件长度:4294967294最大密钥文件长度:17179868159
记录长度:54

表格说明:
Key Start Len Index类型Rec / key Root Blocksize
1 2 4独特长1 1024
2 6 80倍。varchar前缀0 1024
    87 80 varchar 0
3 168 3乘。uint24 NULL 0 1024

场起始长度Nullpos Nullbit类型
1 1 1                                                         
2 2 4没有零                           
3 6 81 varchar                            
4 87 81 varchar                            
5 168 3 1 1没有零                           
6 171 3 1 2没有零                           

这里给出了 myisamchk 产生 的信息类型的解释 。 “ 密钥 文件 ” 是指索引文件。 “ 记录 ” 和 “ 行 ” 是同义词, “ 字段 ” 和 “ 列 ” 也是同义词 。 ”

表描述的初始部分包含以下值:

  • MyISAM file

    MyISAM (索引)文件的 名称 。

  • Record format

    用于存储表行的格式。 前面的例子使用 Fixed length 。 其他可能的值是 Compressed 和 Packed 。 ( Packed 对应于 SHOW TABLE STATUS 报告的内容 Dynamic 。)

  • Chararacter set

    表默认字符集。

  • File-version

    MyISAM 格式 版本 。 总是1。

  • Creation time

    创建数据文件时。

  • Recover time

    上次重建索引/数据文件时。

  • Status

    表状态标志。 可能的值是 crashed , open , changed , analyzed , optimized keys ,和 sorted index pages 。

  • Auto increment key , Last value

    表的 AUTO_INCREMENT 列 关联的键编号 ,以及此列的最近生成的值。 如果没有这样的列,则不会显示这些字段。

  • Data records

    表中的行数。

  • Deleted blocks

    有多少已删除的块仍有预留空间。 您可以优化表格以最小化此空间。 请参见 第7.6.4节“MyISAM表优化” 。

  • Datafile parts

    对于动态行格式,这表示有多少数据块。 对于没有碎片行的优化表,这与 Data records 。

  • Deleted data

    有多少字节的未回收删除数据。 您可以优化表格以最小化此空间。 请参见 第7.6.4节“MyISAM表优化” 。

  • Datafile pointer

    数据文件指针的大小,以字节为单位。 它通常是2,3,4或5个字节。 大多数表都使用2个字节进行管理,但这还无法通过MySQL进行控制。 对于固定表,这是一个行地址。 对于动态表,这是一个字节地址。

  • Keyfile pointer

    索引文件指针的大小,以字节为单位。 它通常是1,2或3个字节。 大多数表使用2个字节进行管理,但这是由MySQL自动计算的。 它总是一个块地址。

  • Max datafile length

    表数据文件可以变为多长时间(以字节为单位)。

  • Max keyfile length

    表索引文件可以变为多长(以字节为单位)。

  • Recordlength

    每行占用多少空间,以字节为单位。

table description 输出 的 一部分包括表中所有键的列表。 对于每个密钥, myisamchk 显示一些低级信息:

  • Key

    这个钥匙的号码。 该值仅显示在键的第一列。 如果缺少此值,则该行对应于多列键的第二列或更高列。 对于示例中显示的表, table description 第二个索引 有两 行。 这表明它是一个包含两部分的多部分索引。

  • Start

    在该行的哪一部分索引开始。

  • Len

    这部分索引有多长。 对于打包数字,这应该始终是列的全长。 对于字符串,它可能短于索引列的全长,因为您可以索引字符串列的前缀。 多部分键的总长度是 Len 所有关键部分 的 值 的总和 。

  • Index

    键值是否可以在索引中多次存在。 可能的值是 unique 或 multip. (多个)。

  • Type

    索引的这一部分具有什么数据类型。 这是一个 MyISAM 与可能的值的数据类型 packed , stripped 或 empty 。

  • Root

    根索引块的地址。

  • Blocksize

    每个索引块的大小。 默认情况下,这是1024,但是当从源构建MySQL时,可以在编译时更改该值。

  • Rec/key

    这是优化程序使用的统计值。 它告诉该索引每个值有多少行。 唯一索引的值始终为1.这可以在使用 myisamchk -a 加载(或大大更改)表后更新 。 如果根本没有更新,则给出默认值30。

输出的最后一部分提供有关每列的信息:

  • Field

    列号。

  • Start

    表行中列的字节位置。

  • Length

    列的长度(以字节为单位)。

  • Nullpos , Nullbit

    对于可以的列 NULL , MyISAM 将 NULL 值 存储 为字节中的标志。 根据有多少可空列,可以有一个或多个字节用于此目的。 的 Nullpos 和 Nullbit 值时,如果非空,指示哪些字节和位包含标志,指示该列是否为 NULL 。

    用于存储 NULL 标志 的位置和字节数 显示在字段1的行中。这就是为什么 表 有六 Field 行, person 即使它只有五列。

  • Type

    数据类型。 该值可能包含以下任何描述符:

    • constant

      所有行都具有相同的值。

    • no endspace

      不要存储端空间。

    • no endspace, not_always

      不存储端空间,也不对所有值执行端空压缩。

    • no endspace, no empty

      不要存储端空间。 不要存储空值。

    • table-lookup

      该列被转换为 ENUM 。

    • zerofill(N)

      N 值中 最重要的 字节始终为0,不存储。

    • no zeros

      不要存储零。

    • always zero

      使用一位存储零值。

  • Huff tree

    与列关联的霍夫曼树的编号。

  • Bits

    霍夫曼树中使用的位数。

该 Huff tree 和 Bits 如果表已经被压缩与显示领域 的myisampack 。 有关 此信息的示例, 请参见 第4.6.6节“ myisampack - 生成压缩,只读MyISAM表” 。

myisamchk -eiv 输出 示例 :

检查MyISAM文件:person
数据记录:306688已删除块:0
- 检查文件大小
- 检查记录删除链
没有记录链接
- 检查密钥删除链
block_size 1024:
- 检查索引参考
- 检查数据记录参考索引:1
密钥:1:使用的密钥块:98%已打包:0%最高级别:3
- 检查数据记录参考索引:2
密钥:2:使用的密钥块:99%已包装:97%最高级别:3
- 检查数据记录参考索引:3
密钥:3:使用的密钥块:98%已包装:-14%最高级别:3
总计:使用的关键字块:98%已包装:89%

- 检查记录和索引引用
*** LOTS OF ROW NUMBERS DELETED ***

记录:306688 M.recordlength:25盒装:83%
使用的记录空间:97%空白空间:2%块/记录:1.00
记录块:306688删除块:0
记录数据:7934464删除数据:0
丢失的空间:256512 Linkdata:1156096

用户时间43.08,系统时间1.68
最大驻留集大小为0,整数驻留集大小为0
非物理页面故障0,物理页面故障0,交换0
阻止0 out 7,消息0 out 0,信号0
自愿上下文切换0,非自愿上下文切换0
最大内存使用量:1046926字节(1023k)

myisamchk -eiv 输出包括以下信息:

  • Data records

    表中的行数。

  • Deleted blocks

    有多少已删除的块仍有预留空间。 您可以优化表格以最小化此空间。 请参见 第7.6.4节“MyISAM表优化” 。

  • Key

    关键数字。

  • Keyblocks used

    使用了多少百分比的密钥块。 当一张表刚刚用 myisamchk 重新组织时 ,这些值非常高(非常接近理论最大值)。

  • Packed

    MySQL尝试打包具有公共后缀的键值。 这只能用于索引 CHAR 和 VARCHAR 列。 对于具有类似最左边部分的长索引字符串,这可以显着减少使用的空间。 在前面的例子中,第二个密钥长40个字节,空间减少了97%。

  • Max levels

    这把钥匙的B树有多深。 具有长键值的大表获得高值。

  • Records

    表中有多少行。

  • M.recordlength

    平均行长。 这是具有固定长度行的表的确切行长度,因为所有行具有相同的长度。

  • Packed

    MySQL从字符串末尾删除空格。 该 Packed 值表示通过执行此操作实现的节省百分比。

  • Recordspace used

    使用了多少百分比的数据文件。

  • Empty space

    未使用的数据文件的百分比。

  • Blocks/Record

    每行的平均块数(即,由碎片行组成的链接数)。 固定格式表总是1.0。 该值应尽可能接近1.0。 如果它太大,您可以重新组织表。 请参见 第7.6.4节“MyISAM表优化” 。

  • Recordblocks

    使用了多少块(链接)。 对于固定格式表,这与行数相同。

  • Deleteblocks

    删除了多少个块(链接)。

  • Recorddata

    使用数据文件中的字节数。

  • Deleted data

    删除(未使用)数据文件中的字节数。

  • Lost space

    如果将行更新为较短的长度,则会丢失一些空间。 这是所有这些损失的总和,以字节为单位。

  • Linkdata

    使用动态表格式时,行片段与指针(每个4到7个字节)链接。 Linkdata 是所有这些指针使用的存储量的总和。

4.6.4.6 myisamchk内存使用情况

运行 myisamchk 时,内存分配很重要 。 myisamchk 使用的内存不会超过其与内存相关的变量。 如果要 在非常大的表上 使用 myisamchk ,首先应确定要使用多少内存。 默认情况下,仅使用大约3MB进行修复。 通过使用更大的值,您可以让 myisamchk 更快地运行。 例如,如果您有超过512MB的RAM可用,则可以使用这些选项(除了您可能指定的任何其他选项):

外壳> myisamchk --myisam_sort_buffer_size=256M \
           --key_buffer_size=512M \
           --read_buffer_size=64M \
           --write_buffer_size=64M ...

--myisam_sort_buffer_size=16M 对大多数情况来说, 使用 可能已足够

请注意, myisamchk 使用临时文件 TMPDIR 。 如果 TMPDIR 指向内存文件系统,则很容易发生内存不足错误。 如果发生这种情况,请运行 myisamchk ,并 选择指定位于具有更多空间的文件系统上的目录。 --tmpdir=dir_name

执行修复操作时, myisamchk 还需要大量磁盘空间:

  • 数据文件大小的两倍(原始文件和副本)。 如果您进行维修,则不需要此空间 --quick ; 在这种情况下,只重新创建索引文件。 此空间必须在与原始数据文件相同的文件系统上可用 ,因为副本在与 原始文件 相同的目录中创建。

  • 用于替换旧索引文件的新索引文件的空间。 旧的索引文件在修复操作开始时被截断,因此您通常会忽略此空间。 此空间必须在与原始数据文件相同的文件系统上可用。

  • 使用 --recover 或 --sort-recover (但不使用时 --safe-recover ),您需要磁盘上的空间进行排序。 此空间在临时目录(由 TMPDIR 或 指定 )中 分配 。 以下公式产生所需的空间量: --tmpdir=dir_name

    (largest_key+ row_pointer_length)* number_of_rows* 2
    

    您可以 row_pointer_length 使用 myisamchk -dv tbl_name 检查密钥的长度和密码的长度 (请参见 第4.6.4.5节“使用myisamchk获取表信息” )。 该 row_pointer_length 和 number_of_rows 值是 Datafile pointer 和 Data records 值在表中说明。 要确定该 largest_key 值,请检查 Key 表说明中 的 行。 该 Len 列指示每个关键部分的字节数。 对于多列索引,密钥大小是 Len 所有关键部分 的 值 的总和 。

如果在修复期间遇到磁盘空间问题,可以尝试 --safe-recover 代替 --recover 。

4.6.5  myisamlog - 显示MyISAM日志文件内容

myisamlog 处理 MyISAM 日志文件 的内容 。 要创建此类文件,请使用 选项 启动服务器 。 --log-isam=log_file

像这样 调用 myisamlog :

外壳> myisamlog [options] [file_name [tbl_name] ...]

默认操作是update( -u )。 如果完成恢复( -r ), 则完成 所有写入以及可能的更新和删除,并且仅计算错误。 myisam.log 如果没有 log_file 给出参数,则 默认日志文件名 。 如果在命令行上命名表,则仅更新这些表。

myisamlog 支持以下选项:

  • -? , -I

    显示帮助消息并退出。

  • -c N

    仅执行 N 命令。

  • -f N

    指定最大打开文件数。

  • -F filepath/

    使用尾部斜杠指定文件路径。

  • -i

    退出前显示额外信息。

  • -o offset

    指定起始偏移量。

  • -p N

    N 从路径中 删除 组件。

  • -r

    执行恢复操作。

  • -R record_pos_file record_pos

    指定记录位置文件和记录位置。

  • -u

    执行更新操作。

  • -v

    详细模式。 打印有关程序功能的更多输出。 可以多次给出此选项以产生越来越多的输出。

  • -w write_file

    指定写文件。

  • -V

    显示版本信息。

4.6.6  myisampack - 生成压缩的只读MyISAM表

该 的myisampack 工具压缩 MyISAM 表。 myisampack 通过分别压缩表中的每一列来工作。 通常, myisampack 将数据文件打包40%到70%。

稍后使用该表时,服务器会将解压缩列所需的信息读入内存。 这样可以在访问单个行时获得更好的性能,因为您只需要解压缩一行。

MySQL mmap() 尽可能在压缩表上执行内存映射。 如果 mmap() 不起作用,MySQL将回退到正常的读/写文件操作。

请注意以下事项:

  • 如果在 禁用外部锁定的情况下调用 mysqld 服务器, 则 如果在打包过程中服务器可能更新了表 ,则调用 myisampack 不是一个好主意 。 在服务器停止的情况下压缩表是最安全的。

  • 打包表后,它变为只读。 这通常是预期的(例如在访问CD上的打包表时)。

  • myisampack 不支持分区表。

像这样 调用 myisampack :

外壳> myisampack [options] file_name ...

每个文件名参数都应该是index( .MYI )文件 的名称 。 如果您不在数据库目录中,则应指定该文件的路径名。 允许省略 .MYI 扩展名。

使用 myisampack 压缩表后 ,使用 myisamchk -rq 重建其索引。 第4.6.4节“ myisamchk - MyISAM表维护实用程序” 。

myisampack 支持以下选项。 它还读取选项文件并支持处理它们的选项,如 第4.2.2.3节“影响选项 - 文件处理的命令行选项”中所述 。

  • --help , -?

    显示帮助消息并退出。

  • --backup , -b

    使用名称备份每个表的数据文件 tbl_name.OLD 。

  • --character-sets-dir=dir_name

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

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

    编写调试日志。 典型的 debug_options 字符串是 。 默认是 。 d:t:o,file_name d:t:o

  • --force , -f

    生成打包表,即使它比原始表大,或者如果 存在 myisampack 的早期调用中间文件 。 ( myisampack tbl_name.TMD 在压缩表时 创建一个 在数据库目录中 命名的中间文件 。如果你杀了 myisampack ,那么该 .TMD 文件可能不会被删除。)通常情况下, 如果 myisampack 发现 tbl_name.TMD 存在, 则会退出并显示错误 。 有了 --force , myisampack 无论如何打包了桌子。

  • --join=big_tbl_name , -j big_tbl_name

    将命令行上命名的所有表连接到单个打包表中 big_tbl_name 。 要组合的所有表 必须 具有相同的结构(相同的列名称和类型,相同的索引等)。

    big_tbl_name 在连接操作之前必须不存在。 要合并的命令行上命名的所有源表 big_tbl_name 必须存在。 读取连接操作的源表但不进行修改。

  • --silent , -s

    静音模式。 仅在发生错误时写入输出。

  • --test , -t

    实际上不要打包桌子,只是测试包装。

  • --tmpdir=dir_name , -T dir_name

    使用指定目录作为 myisampack 创建临时文件 的位置 。

  • --verbose , -v

    详细模式。 写入有关包装操作进度及其结果的信息。

  • --version , -V

    显示版本信息并退出。

  • --wait , -w

    如果表正在使用中,请等待并重试。 如果在 禁用外部锁定的情况下调用 mysqld 服务器, 则 如果在打包过程中服务器可能更新了表 ,则调用 myisampack 不是一个好主意 。

以下命令序列说明了典型的表压缩会话:

外壳> ls -l station.*
-rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI

外壳> myisamchk -dvv station

MyISAM文件:站
Isam版:2
创作时间:1996-03-13 10:08:58
恢复时间:1997-02-02 3:06:43
数据记录:1192已删除块:0
数据文件部分:1192删除数据:0
数据文件指针(字节):2密钥文件指针(字节):2
最大数据文件长度:54657023最大密钥文件长度:33554431
记录长度:834
记录格式:固定长度

表格说明:
Key Start Len索引类型Root Blocksize Rec / key
1 2 4唯一无符号长1024 1024 1
2 32 30乘。文本10240 1024 1

场起始长度类型
1 1 1
2 2 4
3 6 4
4 10 1
5 11 20
6 31 1
7 32 30
8 62 35
9 97 35
10 132 35
11 167 4
12 171 16
13 187 35
14 222 4
15 226 16
16 242 20
17 262 20
18 282 20
19 302 30
20 332 4
21 336 4
22 340 1
23 341 8
24 349 8
25 357 8
26 365 2
27 367 2
28 369 4
29 373 4
30 377 1
31 378 2
32 380 8
33 388 4
34 392 4
35 396 4
36 400 4
37 404 1
38 405 4
39 409 4
40 413 4
41 417 4
42 421 4
43 425 4
44 429 20
45 449 30
46 479 1
47 480 1
48 481 79
49 560 79
50 639 79
51 718 79
52 797 8
53 805 1
54 806 1
55 807 20
56 827 4
57 831 4

外壳> myisampack station.MYI
压缩站.MYI:(1192条记录)
- 计算统计数据

normal:20 empty-space:16 empty-zero:12 empty-fill:11
pre-space:0 end-space:12 table-lookups:5 zero:7
原树:57加入后:17
- 压缩文件
87.14%
记得在压缩表上运行myisamchk -rq

外壳> myisamchk -rq station
- 检查记录删除链
- 恢复(有排序)MyISAM表''站'
数据记录:1192
- 修正指数1
- 修正指数2

外壳> mysqladmin -uroot flush-tables

外壳> ls -l station.*
-rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI

外壳> myisamchk -dvv station

MyISAM文件:站
Isam版:2
创作时间:1996-03-13 10:08:58
恢复时间:1997-04-17 19:04:26
数据记录:1192已删除块:0
数据文件部分:1192删除数据:0
数据文件指针(字节):3密钥文件指针(字节):1
最大数据文件长度:16777215最大密钥文件长度:131071
记录长度:834
记录格式:压缩

表格说明:
Key Start Len索引类型Root Blocksize Rec / key
1 2 4唯一无符号长10240 1024 1
2 32 30乘。文字54272 1024 1

字段起始长度类型Huff树位
1 1 1常数1 0
2 2 4 zerofill(1)2 9
3 6 4没有零,zerofill(1)2 9
4 10 1 3 9
5 11 20查表4 0
6 31 1 3 9
7 32 30没有空间,不是总是5 9
8 62 35没有任何空间,没有通道,没有空洞6 9
9 97 35不空7 9
10 132 35没有终端空间,没有通道,没有空的6 9
11 167 4 zerofill(1)2 9
12 171 16没有任何空间,没有空间,没空,5 9
13 187 35没有终端空间,没有通道,没有空洞6 9
14 222 4 zerofill(1)2 9
15 226 16没有空间,没有空,没有空5 9
16 242 20没有空间,不是总是8 9
17 262 20没有空间,没有空8 9
18 282 20没有空间,没有空5 9
19 302 30没有空间,没有空6 9
20 332 4总是零2 9
21 336 4总是零2 9
22 340 1 3 9
23 341 8查表9 0
24 349 8查表10 0
25 357 8总是零2 9
26 365 2 2 9
27 367 2没有零,zerofill(1)2 9
28 369 4 no zeros,zerofill(1)2 9
29 373 4查表11 0
30 377 1 3 9
31 378 2 no zeros,zerofill(1)2 9
32 380 8 no zeros 2 9
33 388 4总是零2 9
34 392 4查表12 0
35 396 4 no zeros,zerofill(1)13 9
36 400 4 no zeros,zerofill(1)2 9
37 404 1 2 9
38 405 4没有零2 9
39 409 4总是零2 9
40 413 4没有零2 9
41 417 4总是零2 9
42 421 4 no zeros 2 9
43 425 4总是零2 9
44 429 20空无3 9
45 449 30没空3 9
46 479 1 14 4
47 480 1 14 4
48 481 79没有空间,没有空15 9
49 560 79不空2 9
50 639 79不空2 9
51 718 79无空间16 9
52 797 8不空2 9
53 805 1 17 1
54 806 1 3 9
55 807 20不空3 9
56 827 4没有零,zerofill(2)2 9
57 831 4 no zeros,zerofill(1)2 9

myisampack 显示以下类型的信息:

  • normal

    没有使用额外包装的列数。

  • empty-space

    包含仅为空格的值的列数。 这些占据了一点。

  • empty-zero

    包含仅为二进制零的值的列数。 这些占据了一点。

  • empty-fill

    不占用其类型的完整字节范围的整数列数。 这些更改为较小的类型。 例如,如果 BIGINT 列(八个字节)的 TINYINT 所有值都在 -128 to 的范围内,则 可以将其存储为 列(一个字节) 127 。

  • pre-space

    与前导空格一起存储的十进制列数。 在这种情况下,每个值包含前导空格数的计数。

  • end-space

    具有大量尾随空格的列数。 在这种情况下,每个值都包含尾随空格数的计数。

  • table-lookup

    该列只有少量不同的值,这些值在转换为 ENUM Huffman压缩之前 转换为 。

  • zero

    所有值均为零的列数。

  • Original trees

    最初的霍夫曼树数量。

  • After join

    加入树以保存一些标题空间后留下的不同霍夫曼树的数量。

压缩表后 Field , myisamchk -dvv 显示 的 行 包含有关每列的其他信息:

  • Type

    数据类型。 该值可能包含以下任何描述符:

    • constant

      所有行都具有相同的值。

    • no endspace

      不要存储端空间。

    • no endspace, not_always

      不存储端空间,也不对所有值执行端空压缩。

    • no endspace, no empty

      不要存储端空间。 不要存储空值。

    • table-lookup

      该列被转换为 ENUM 。

    • zerofill(N)

      N 值中 最重要的 字节始终为0,不存储。

    • no zeros

      不要存储零。

    • always zero

      使用一位存储零值。

  • Huff tree

    与列关联的霍夫曼树的编号。

  • Bits

    霍夫曼树中使用的位数。

运行 myisampack后 ,使用 myisamchk 重新创建任何索引。 此时,您还可以对索引块进行排序,并创建MySQL优化器更高效工作所需的统计信息:

外壳> myisamchk -rq --sort-index --analyze tbl_name.MYI

将打包表安装到MySQL数据库目录后,应执行 mysqladmin flush-tables 以强制 mysqld 开始使用新表。

要解压缩打包表,请使用 myisamchk --unpack 选项 。

4.6.7  mysql_config_editor - MySQL配置实用程序

该 mysql_config_editor 实用程序,可以存储在一个名为模糊化的登录路径文件认证证书 .mylogin.cnf 。 文件位置是 %APPDATA%\MySQL Windows上的目录和非Windows系统上的当前用户的主目录。 MySQL客户端程序稍后可以读取该文件以获取用于连接到MySQL服务器的身份验证凭据。

.mylogin.cnf 登录路径文件 的未经模糊处理的格式 由选项组组成,类似于其他选项文件。 每个选项组中 .mylogin.cnf 被称为 “ 登录路径 , ” 这是一组只允许特定的选项: host , user , password , port 和 socket 。 将登录路径选项组视为一组选项,指定要连接到哪个MySQL服务器以及要进行身份验证的帐户。 这是一个未经混淆的例子:

[客户]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[我自己的路]
user = myothername
密码= myotherpass
host = localhost

当您调用客户端程序以连接到服务器时,客户端将 .mylogin.cnf 与其他选项文件一起使用。 它的优先级高于其他选项文件,但低于客户端命令行中明确指定的选项。 有关使用选项文件的顺序的信息,请参见 第4.2.2.2节“使用选项文件” 。

要指定备用登录路径文件名,请设置 MYSQL_TEST_LOGIN_FILE 环境变量。 mysql_config_editor ,标准MySQL客户端( mysql , mysqladmin 等)以及 mysql-test-run.pl 测试实用程序 可识别此变量 。

程序使用登录路径文件中的组,如下所示:

  • client 如果您未指定任何 选项以明确指示要使用 的 登录路径,则 mysql_config_editor 默认情况下在 登录路径上运行。 --login-path=name

  • 如果没有 --login-path 选项,客户端程序将从其他选项文件中读取的登录路径文件中读取相同的选项组。 考虑这个命令:

    外壳> mysql
    

    默认情况下, mysql 客户端 从其他选项文件中 读取 [client] 和 [mysql] 分组,因此它也会从登录路径文件中读取它们。

  • 通过 --login-path 选项,客户端程序还可以从登录路径文件中读取指定的登录路径。 从其他选项文件读取的选项组保持不变。 考虑这个命令:

    外壳> mysql --login-path=mypath
    

    在 MySQL的 客户端读取 [client] 和 [mysql] 其他选项的文件,并 [client] , [mysql] 以及 [mypath] 从登录路径文件。

  • 即使使用该 --no-defaults 选项, 客户端程序也会读取登录路径文件 。 这允许以比命令行更安全的方式指定密码,即使存在 --no-defaults 也是如此。

mysql_config_editor 对 .mylogin.cnf 文件进行 模糊处理 ,使其无法以明文形式读取,并且客户端程序未经过模糊处理时的内容仅在内存中使用。 通过这种方式,密码可以以非明文格式存储在文件中,以后使用,无需在命令行或环境变量中公开。 mysql_config_editor 提供了一个 print 显示登录路径文件内容 的 命令,但即使在这种情况下,也会屏蔽密码值,以免以其他用户可以看到的方式显示。

mysql_config_editor 使用的模糊处理 可防止密码 .mylogin.cnf 以明文形式 出现, 并通过防止无意中密码泄露来提供安全措施。 例如,如果您 my.cnf 在屏幕上 显示常规的未经模糊处理的 选项文件,则任何人都可以看到它包含的任何密码。 有 .mylogin.cnf ,那不是真的。 但是使用的混淆不会阻止坚定的攻击者,你不应该认为它是牢不可破的。 可以在您的计算机上获得系统管理权限以访问您的文件的用户可以 .mylogin.cnf 通过一些努力 来对文件进行非模糊处理 。

登录路径文件必须对当前用户可读写,并且其他用户无法访问。 否则, mysql_config_editor会 忽略它,客户端程序也不会使用它。

像这样 调用 mysql_config_editor :

外壳> mysql_config_editor [program_options] command [command_options]

如果登录路径文件不存在,则 mysql_config_editor 会创建它。

命令参数如下:

  • program_options 由一般的 mysql_config_editor 选项组成。

  • command 指示要对 .mylogin.cnf 登录路径文件 执行的 操作。 例如, set 写入文件 remove 的登录路径,删除登录路径,并 print 显示登录路径内容。

  • command_options 表示该命令特有的任何其他选项,例如登录路径名和登录路径中使用的值。

命令名称在程序参数集中的位置很重要。 例如,这些命令行具有相同的参数,但会产生不同的结果:

shell> mysql_config_editor --help set
shell>mysql_config_editor set --help

第一个命令行显示一般的 mysql_config_editor 帮助消息,并忽略该 set 命令。 第二个命令行显示特定于该 set 命令 的帮助消息 。

假设您要建立一个 client 定义默认连接参数的登录路径,以及另一个以 remote 连接MySQL服务器为主机的 登录路径 remote.example.com 。 您想要登录如下:

  • 默认情况下,到本地服务器的用户名和密码 localuser ,并 localpass

  • 与用户名的远程服务器和密码 remoteuser ,并 remotepass

要在 .mylogin.cnf 文件中 设置登录路径 ,请使用以下 set 命令。 在一行中输入每个命令,并在出现提示时输入相应的密码:

shell> 
输入密码:
shell> 
输入密码:mysql_config_editor set --login-path=client
         --host=localhost --user=localuser --passwordenter password "localpass" heremysql_config_editor set --login-path=remote
         --host=remote.example.com --user=remoteuser --passwordenter password "remotepass" here

mysql_config_editor client 默认 使用 登录路径,因此 --login-path=client 可以从第一个命令中省略 该 选项而不更改其效果。

要查看 mysql_config_editor 写入 .mylogin.cnf 文件的内容,请使用以下 print 命令:

外壳> mysql_config_editor print --all
[客户]
user = localuser
密码= *****
host = localhost
[远程]
user = remoteuser
密码= *****
host = remote.example.com

该 print 命令将每个登录路径显示为一组行,以一个组头开头,表示方括号中的登录路径名,后跟登录路径的选项值。 密码值被屏蔽,不会显示为明文。

如果未指定 --all 显示所有登录路径或 显示命名登录路径,则该 命令 默认 显示 登录路径(如果有)。 --login-path=name print client

如前面的示例所示,登录路径文件可以包含多个登录路径。 通过这种方式, mysql_config_editor 可以轻松设置多个 “ 个性 ” 以连接到不同的MySQL服务器,或者使用不同的帐户连接到给定的服务器。 --login-path 当您调用客户端程序时,可以 稍后使用该 选项 按名称选择其中任何 一个。 例如,要连接到远程服务器,请使用以下命令:

外壳> mysql --login-path=remote

在这里, MySQL的 读取 [client] 和 [mysql] 其他选项的文件选项组,和 [client] , [mysql] 和 [remote] 从登录路径文件组。

要连接到本地服务器,请使用以下命令:

外壳> mysql --login-path=client

因为 mysql 默认 读取 client 和 mysql 登录路径,所以 --login-path 在这种情况下 该 选项不会添加任何内容。 该命令等同于此命令:

外壳> mysql

从登录路径文件读取的选项优先于从其他选项文件读取的选项。 从登录路径文件中稍后出现的登录路径组中读取的选项优先于从文件中较早出现的组中读取的选项。

mysql_config_editor 按照您创建的顺序添加登录路径文件的登录路径,因此您应首先创建更多常规登录路径,然后再创建更具体的路径。 如果需要在文件中移动登录路径,可以将其删除,然后重新创建它以将其添加到最后。 例如, client 登录路径更通用,因为它被所有客户端程序读取,而 mysqldump 登录路径只能由 mysqldump 读取 。 后来指定的选项覆盖在此之前指定的选项,所以把登录路径的顺序 client , mysqldump 使 mysqldump的 特异性选项覆盖 client 选项。

使用 mysql_config_editor set 命令 创建登录路径时,无需指定所有可能的选项值(主机名,用户名,密码,端口,套接字)。 只有给定的值才会写入路径。 当您调用客户端路径连接到MySQL服务器时,可以在其他选项文件或命令行中指定以后需要的任何缺失值。 命令行上指定的任何选项都会覆盖登录路径文件或其他选项文件中指定的选项。 例如,如果 登录路径中 的凭据 也适用于主机 ,请连接到该主机上的服务器,如下所示: remote remote2.example.com

外壳> mysql --login-path=remote --host=remote2.example.com

mysql_config_editor常规选项

mysql_config_editor 支持以下常规选项,可以在命令行上命名的任何命令之前使用。 有关特定于命令的选项的说明,请参见 mysql_config_editor命令和特定于命令的选项 。

表4.17​​ mysql_config_editor常规选项

格式 描述
--debug 写调试日志
- 救命 显示帮助消息并退出
--verbose 详细模式
- 版 显示版本信息并退出

  • --help , -?

    显示常规帮助消息并退出。

    要查看特定于命令的帮助消息,请 按如下方式 调用 mysql_config_editor ,其中 command 的命令不是 help :

    外壳> mysql_config_editor command --help
    
  • --debug[=debug_options] , -# debug_options

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

  • --verbose , -v

    详细模式。 打印有关程序功能的更多信息。 如果操作没有您期望的效果,此选项可能有助于诊断问题。

  • --version , -V

    显示版本信息并退出。

mysql_config_editor命令和特定于命令的选项

本节介绍允许的 mysql_config_editor 命令,并且对于每个命令,在命令行上使用命令名后允许的特定于命令的选项。

此外, mysql_config_editor 支持可在任何命令之前使用的常规选项。 有关这些选项的说明,请参见 mysql_config_editor常规选项 。

mysql_config_editor 支持以下命令:

  • help

    显示常规帮助消息并退出。 此命令不带以下选项。

    要查看特定于命令的帮助消息,请 按如下方式 调用 mysql_config_editor ,其中 command 的命令不是 help :

    外壳> mysql_config_editor command --help
    
  • print [options]

    以未经模糊的形式打印登录路径文件的内容,但密码显示为 ***** 。

    client 如果未命名登录路径,则 默认登录路径名称 为。 如果两个 --all 和 --login-path 给出, --all 优先。

    该 print 命令允许在命令名后面显示以下选项:

    • --help , -?

      显示 print 命令 的帮助消息 并退出。

      要查看常规帮助消息,请使用 mysql_config_editor --help 。

    • --all

      打印登录路径文件中所有登录路径的内容。

    • --login-path=name , -G name

      打印指定登录路径的内容。

  • remove [options]

    从登录路径文件中删除登录路径,或通过从中删除选项来修改登录路径。

    该命令从登录路径只删除选项,如与被指定 --host , --password , --port , --socket ,和 --user 选项。 如果没有给出这些选项,则 remove 删除整个登录路径。 例如,此命令仅从 登录路径而不是整个 登录路径中 删除 user 选项 : mypath mypath

    外壳> mysql_config_editor remove --login-path=mypath --user
    

    此命令删除整个 mypath 登录路径:

    外壳> mysql_config_editor remove --login-path=mypath
    

    该 remove 命令允许在命令名后面显示以下选项:

    • --help , -?

      显示 remove 命令 的帮助消息 并退出。

      要查看常规帮助消息,请使用 mysql_config_editor --help 。

    • --host , -h

      从登录路径中删除主机名。

    • --login-path=name , -G name

      要删除或修改的登录路径。 client 如果未指定此选项,则 默认登录路径名称为 。

    • --password , -p

      从登录路径中删除密码。

    • --port , -P

      从登录路径中删除TCP / IP端口号。

    • --socket , -S

      从登录路径中删除Unix套接字文件名。

    • --user , -u

      从登录路径中删除用户名。

    • --warn , -w

      如果该命令尝试删除默认登录路径( client ) --login-path=client 且未指定 , 则 警告并提示用户进行确认 。 默认情况下启用此选项; 使用 --skip-warn 禁用它。

  • reset [options]

    清空登录路径文件的内容。

    该 reset 命令允许在命令名后面显示以下选项:

  • set [options]

    写入登录路径文件的登录路径。

    此命令写入登录路径作为被指定的唯一的这样的选项 --host , --password , --port , --socket ,和 --user 选项。 如果没有给出这些选项, mysql_config_editor 会将登录路径写为空组。

    该 set 命令允许在命令名后面显示以下选项:

    • --help , -?

      显示 set 命令 的帮助消息 并退出。

      要查看常规帮助消息,请使用 mysql_config_editor --help 。

    • --host=host_name , -h host_name

      要写入登录路径的主机名。

    • --login-path=name , -G name

      要创建的登录路径。 client 如果未指定此选项,则 默认登录路径名称为 。

    • --password , -p

      提示输入登录路径的密码。 之后 mysql_config_editor 显示提示符下,键入密码,然后按Enter键。 为防止其他用户看到密码, mysql_config_editor 不会回显它。

      要指定空密码,请在密码提示符下按Enter键。 写入登录路径文件的结果登录路径将包含如下所示的行:

      密码=
      
    • --port=port_num , -P port_num

      要写入登录路径的TCP / IP端口号。

    • --socket=file_name , -S file_name

      要写入登录路径的Unix套接字文件名。

    • --user=user_name , -u user_name

      要写入登录路径的用户名。

    • --warn , -w

      如果命令尝试覆盖现有登录路径,则警告并提示用户进行确认。 默认情况下启用此选项; 使用 --skip-warn 禁用它。

4.6.8  mysqlbinlog - 处理二进制日志文件的实用程序

服务器的二进制日志由包含 “ 事件 ” 的文件组成,这些 事件 描述了对数据库内容的修改。 服务器以二进制格式写入这些文件。 要以文本格式显示其内容,请使用 mysqlbinlog 实用程序。 您还可以使用 mysqlbinlog 在复制设置中显示从服务器写入的中继日志文件的内容,因为中继日志的格式与二进制日志相同。 第5.4.4节“二进制日志” 和 第17.2.4节“复制中继和状态日志”中 进一步讨论了二进制日志和中继日志 。

像这样 调用 mysqlbinlog :

外壳> mysqlbinlog [options] log_file ...

例如,要显示名为二进制日志文件的内容 binlog.000003 ,请使用以下命令:

外壳> mysqlbinlog binlog.0000003

输出包括包含的事件 binlog.000003 。 对于基于语句的日志记录,事件信息包括SQL语句,执行该语句的服务器的ID,执行语句的时间戳,花费的时间等等。 对于基于行的日志记录,该事件表示行更改而不是SQL语句。 有关日志记录模式的信息 , 请参见 第17.2.1节“复制格式” 。

事件之前是标题注释,提供其他信息。 例如:

#141
#100309 9:28:36服务器ID 123 end_log_pos 245
  查询thread_id = 3350 exec_time = 11 error_code = 0

在第一行中,后面的数字 at 表示二进制日志文件中事件的文件偏移量或起始位置。

第二行以日期和时间开始,指示语句在发生事件的服务器上何时开始。 对于复制,此时间戳将传播到从属服务器。 server id 是 server_id 发生事件的服务器 的 值。 end_log_pos 指示下一个事件开始的位置(即,它是当前事件的结束位置+ 1)。 thread_id 指示哪个线程执行了该事件。 exec_time 是在主服务器上执行事件所花费的时间。 在从站上,它是从站上的结束执行时间减去主站上的开始执行时间的差异。 差异用作指示复制滞后于主服务器的程度。 error_code 表示执行事件的结果。 零意味着没有发生错误。

注意

当使用事件组时,可以将事件的文件偏移分组在一起,并且可以将事件的评论分组在一起。 不要将这些分组事件误认为是空白文件偏移。

可以重新执行 mysqlbinlog 的输出 (例如,通过将其用作 mysql的 输入 )来重做日志中的语句。 这对于服务器崩溃后的恢复操作很有用。 有关其他用法示例,请参阅本节后面的 第7.5节“使用二进制日志进行时间点(增量)恢复”中的讨论 。

您可以使用 mysqlbinlog 直接读取二进制日志文件并将它们应用到本地MySQL服务器。 您还可以使用该 --read-from-remote-server 选项 从远程服务器读取二进制日志 。 要读取远程二进制日志,可以使用连接参数选项指示如何连接到服务器。 这些选项包括 --host , --password , --port , --protocol , --socket ,和 --user 。

当二进制日志文件已加密时,可以从MySQL 8.0.14开始, mysqlbinlog 无法直接读取它们,但可以使用该 --read-from-remote-server 选项 从服务器读取它们 。 当服务器的 binlog_encryption 系统变量设置 为时,二进制日志文件将被加密 ON 。 该 SHOW BINARY LOGS 语句显示特定二进制日志文件是加密还是未加密。 加密和未加密的二进制日志文件也可以使用加密日志文件( 0xFD62696E ) 的文件头开头的幻数来区分 ,这与用于未加密日志文件( 0xFE62696E )的 格式不同 。 请注意,从MySQL 8.0.14开始, mysqlbinlog 如果您尝试直接读取加密的二进制日志文件,则会返回一个合适的错误,但旧版本的 mysqlbinlog 根本不会将该文件识别为二进制日志文件。 有关二进制日志加密的更多信息,请参见 第17.3.10节“加密二进制日志文件和中继日志文件” 。

运行 mysqlbinlog时 对大型二进制日志 ,请注意文件系统有足够的空间容纳生成的文件。 要配置 mysqlbinlog 用于临时文件的目录,请使用 TMPDIR 环境变量。

mysqlbinlog pseudo_slave_mode 在执行任何SQL语句之前 将值设置 为true。

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

表4.18 mysqlbinlog选项

格式 描述 介绍 删除
--base64输出 使用base-64编码打印二进制日志条目
--bind地址 使用指定的网络接口连接到MySQL服务器
--binlog行事件-MAX尺寸 二进制日志最大事件大小
--character集-DIR 安装字符集的目录
- 压缩 压缩客户端和服务器之间发送的所有信息 8.0.17
--connection服务器-ID 用于测试和调试。 请参阅文本以了解适用的默认值和其他详细信息。
- 数据库 仅列出此数据库的条目
--debug 写调试日志
--debug检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息,内存和CPU统计信息
--default-AUTH 要使用的身份验证插件
--defaults-额外文件 除常用选项文件外,还可以读取命名选项文件
--defaults文件 只读命名选项文件
--defaults基团的后缀 选项组后缀值
- 禁用日志斌 禁用二进制日志
--exclude-gtids 不要在提供的GTID集中显示任何组
--force,如果开 即使打开或未正确关闭,也要读取二进制日志文件
--force阅读 如果mysqlbinlog读取它无法识别的二进制日志事件,则会输出警告
--get-服务器的公钥 从服务器请求RSA公钥 8.0.3
- 救命 显示帮助消息并退出
--hexdump 在注释中显示日志的十六进制转储
- 主办 连接到给定主机上的MySQL服务器
--idempotent 导致服务器仅在从此会话处理二进制日志更新时使用幂等模式
--include-gtids 仅显示提供的GTID集中的组
--local负荷 在指定目录中为LOAD DATA准备本地临时文件
--login路径 从.mylogin.cnf中读取登录路径选项
--no-默认 不读选项文件
--offset 跳过日志中的前N个条目
- 密码 连接到服务器时使用的密码
--plugin-DIR 安装插件的目录
- 港口 用于连接的TCP / IP端口号
--print-默认 打印默认选项
--print表元数据 打印表元数据
- 协议 要使用的连接协议
- 生的 将原始(二进制)格式的事件写入输出文件
--read-从远程主 从MySQL主服务器读取二进制日志而不是读取本地日志文件
--read-从远程服务器 从MySQL服务器读取二进制日志而不是本地日志文件
- 结果文件 直接输出到命名文件
--rewrite-DB 从基于行的格式编写的日志回放时,为数据库创建重写规则。 可以多次使用。
--secure-auth的 不要以旧的(4.1之前的)格式向服务器发送密码 8.0.3
--server-ID 仅提取由具有给定服务器ID的服务器创建的事件
--server-ID位 当mysqld的server-id-bits设置为小于最大值时,告诉mysqlbinlog如何解释二进制日志中的服务器ID; 仅受MySQL Cluster版本的mysqlbinlog支持
--server-公钥路径 包含RSA公钥的文件的路径名 8.0.4
--set-字符集 将SET NAMES charset_name语句添加到输出
--shared存储器碱基名 用于共享内存连接的共享内存的名称
- 简写 仅显示日志中包含的语句
--skip-gtids 不要打印任何GTID; 从包含GTID的二进制日志中写入转储文件时使用此选项。
- 插座 对于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模式 与服务器连接的安全状态
--start-日期时间 从第一个事件读取二进制日志,时间戳等于或晚于datetime参数
--start位置 从第一个事件读取二进制日志,其位置等于或大于参数
--stop-日期时间 在时间戳等于或大于datetime参数的第一个事件处停止读取二进制日志
--stop-从未 阅读完最后的二进制日志文件后,保持与服
--stop-从未从服务器的ID 连接到服务器时要报告的从服务器ID
--stop位置 在位置等于或大于参数的第一个事件处停止读取二进制日志
--tls-密码套件 允许加密连接的TLSv1.3密码套件 8.0.16
--tls版本 允许加密连接的协议
--to-最后日志 不要在MySQL服务器请求的二进制日志结束时停止,而是继续打印到最后一个二进制日志的末尾
- 用户 连接到服务器时使用的MySQL用户名
--verbose 将行事件重建为SQL语句
--verify-二进制日志校验和 验证二进制日志中的校验和
- 版 显示版本信息并退出

你可以管的输出 mysqlbinlog可以 到 MySQL的 客户端来执行包含在二进制日志中的事件。 当您有旧备份时,此技术用于从崩溃中恢复(请参见 第7.5节“使用二进制日志进行时间点(增量)恢复” )。 例如:

外壳> mysqlbinlog binlog.000001 | mysql -u root -p

要么:

外壳> mysqlbinlog binlog.[0-9]* | mysql -u root -p

如果 mysqlbinlog 生成的语句 可能包含 BLOB 值,那么当 mysql 处理它们 时,这些 语句 可能 会导致问题 。 在这种情况下, 使用该 选项 调用 mysql --binary-mode 。

如果需要首先修改语句日志(例如,删除因某些原因不想执行的语句), 也可以将 mysqlbinlog 的输出重定向 到文本文件。 编辑文件后,使用它作为 mysql 程序的 输入来执行它包含的语句 :

shell> mysqlbinlog binlog.000001 > tmpfile
shell> edit tmpfile......
外壳> mysql -u root -p < tmpfile

当 使用该 选项 调用 mysqlbinlog时 --start-position ,它仅显示二进制日志中偏移量大于或等于给定位置的事件(给定位置必须与一个事件的开头匹配)。 它还具有在看到具有给定日期和时间的事件时停止和启动的选项。 这使您可以使用该 --stop-datetime 选项 执行时间点恢复 (例如,可以说 “ 将我的数据库前滚到今天上午10:30的状态 ” )。

处理多个文件。  如果要在MySQL服务器上执行多个二进制日志,则安全方法是使用与服务器的单个连接来处理它们。 这是一个演示可能 不安全 的示例 :

shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell>mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

如果第一个日志文件包含 CREATE TEMPORARY TABLE 语句而第二个日志包含使用临时表的语句, 则使用多个服务器连接以这种方式处理二进制日志会导致问题 。 当第一个 mysql 进程终止时,服务器将删除临时表。 当第二个 mysql 进程尝试使用该表时,服务器报告 “ 未知表”。 ”

要避免这样的问题,请使用 单个 mysql 进程来执行要处理的所有二进制日志的内容。 这是一种方法:

外壳> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另一种方法是将所有日志写入单个文件,然后处理该文件:

shell> mysqlbinlog binlog.000001 >  /tmp/statements.sql
shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql
shell>mysql -u root -p -e "source /tmp/statements.sql"

从MySQL 8.0.12开始,您还可以 使用shell管道 将多个二进制日志文件 作为流输入提供 给 mysqlbinlog 。 压缩二进制日志文件的存档可以解压缩并直接提供给 mysqlbinlog 。 在此示例中, binlog-files_1.gz 包含多个二进制日志文件以进行处理。 管道提取内容 binlog-files_1.gz ,将二进制日志文件 作为标准输入 传递给 mysqlbinlog ,并将 mysqlbinlog 的输出通过管道 传输 到 mysql 客户端执行:

外壳> gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot  -p

您可以指定多个存档文件,例如:

外壳> gzip -cd binlog-files_1.gz binlog-files_2.gz | ./mysqlbinlog - | ./mysql -uroot  -p

对于流式输入,请勿使用 --stop-position ,因为 mysqlbinlog 无法识别要应用此选项的最后一个日志文件。

LOAD DATA操作。  mysqlbinlog 可以生成在 LOAD DATA 没有原始数据文件的情况下 重现 操作的 输出 。 mysqlbinlog 将数据复制到临时文件并写入 LOAD DATA LOCAL 引用该文件 的 语句。 写入这些文件的目录的缺省位置是特定于系统的。 要明确指定目录,请使用该 --local-load 选项。

因为 mysqlbinlog 将 LOAD DATA 语句 转换 为 LOAD DATA LOCAL 语句(即,它添加 LOCAL ),所以必须使用 LOCAL 启用 的 功能 配置用于处理语句的客户端和服务器 。 请参见 第6.1.6节“LOAD DATA LOCAL的安全问题” 。

警告

为 LOAD DATA LOCAL 语句 创建的临时文件 不会 自动删除,因为在您实际执行这些语句之前需要它们。 在不再需要语句日志后,应自行删除临时文件。 这些文件可以在临时文件目录中找到,并且名称类似于 original_file_name-#-# 。

4.6.8.1 mysqlbinlog十六进制转储格式

该 --hexdump 选项导致 mysqlbinlog 生成二进制日志内容的十六进制转储:

外壳> mysqlbinlog --hexdump master-bin.000001

十六进制输出由以...开头的注释行组成 # ,因此对于前面的命令,输出可能如下所示:

/ *!40019 SET @@ SESSION.max_insert_delayed_threads = 0 * /;
/ *!50003 SET @OLD_COMPLETION_TYPE = @@ COMPLETION_TYPE,COMPLETION_TYPE = 0 * /;
#at 4
#051024 17:24:13服务器ID 1 end_log_pos 98
#Location Timestamp Type Master ID Size Master Pos Flags
#00000004 9d fc 5c 43 0f 01 00 00 00 5e 00 00 00 62 00 00 00 00 00
#00000017 04 00 35 2e 30 2e 31 35 2d 64 65 62 75 67 2d 6c | ..5.0.15.debug.l |
#00000027 6f 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | og .............. |
#00000037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
#00000047 00 00 00 00 9d fc 5c 43 13 38 0d 00 08 00 12 00 | ....... C.8 ...... |
#00000057 04 04 04 04 12 00 00 4b 00 04 1a | ....... K ... |
#Start:binlog v 4,server v 5.0.15-debug-log created 051024 17:24:13
#在启动时
ROLLBACK;

十六进制转储输出当前包含以下列表中的元素。 此格式可能会有所变化。 有关二进制日志格式的更多信息,请参阅 MySQL内部:二进制日志 。

  • Position :日志文件中的字节位置。

  • Timestamp :事件时间戳。 在所示的示例中, '9d fc 5c 43' 是 '051024 17:24:13' 十六进制 的表示 。

  • Type :事件类型代码。

  • Master ID :创建事件的主服务器的服务器ID。

  • Size :事件的大小(以字节为单位)。

  • Master Pos :原始主日志文件中下一个事件的位置。

  • Flags :事件标志值。

4.6.8.2 mysqlbinlog行事件显示

以下示例说明了 mysqlbinlog 如何 显示指定数据修改的行事件。 这些对应于与事件 WRITE_ROWS_EVENT , UPDATE_ROWS_EVENT 和 DELETE_ROWS_EVENT 类型代码。 该 --base64-output=DECODE-ROWS 和 --verbose 选项可用于影响排事件输出。

假设服务器正在使用基于行的二进制日志记录,并且您执行以下语句序列:

创建表t
(
  id INT NOT NULL,
  name VARCHAR(20)NOT NULL,
  date DATE NULL
)ENGINE = InnoDB;

开始交易;
INSERT IN TO VALUES(1,'apple',NULL);
UPDATE t SET name ='pear',date ='2009-01-01'WHERE id = 1;
DELETE FROM t WHERE id = 1;
承诺;

默认情况下, mysqlbinlog 使用 BINLOG 语句 显示编码为base-64字符串的行事件 。 省略多余的行,前面的语句序列产生的行事件的输出如下所示:

外壳> mysqlbinlog log_file
...
#218
#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:table id 17标志:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
“/ * * /!;
...
#302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
“/ * * /!;
...
#400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
“/ * * /!;

要以 “ 伪SQL ” 语句 的形式将行事件视为注释,请 使用 或 选项 运行 mysqlbinlog 。 此输出级别还显示适用的表分区信息。 输出将包含以下行开头的行 : --verbose -v ###

外壳> mysqlbinlog -v log_file
...
#218
#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:table id 17标志:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
“/ * * /!;
### INSERT INTO test.t
### SET
### @ 1 = 1
### @ 2 ='apple'
### @ 3 = NULL
...
#302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
“/ * * /!;
###更新test.t
### WHERE
### @ 1 = 1
### @ 2 ='apple'
### @ 3 = NULL
### SET
### @ 1 = 1
### @ 2 ='梨'
### @ 3 ='2009:01:01'
...
#400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
“/ * * /!;
### DELETE FROM test.t
### WHERE
### @ 1 = 1
### @ 2 ='梨'
### @ 3 ='2009:01:01'

指定 --verbose 或 -v 两次也显示每列的数据类型和一些元数据,以及信息日志事件,如 binlog_rows_query_log_events 系统变量设置 为行查询日志事件 TRUE 。 每个列更改后,输出将包含一个附加注释:

外壳> mysqlbinlog -vv log_file
...
#218
#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:table id 17标志:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA // 8AQAAAAVhcHBsZQ ==
“/ * * /!;
### INSERT INTO test.t
### SET
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 ='apple'/ * VARSTRING(20)meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = NULL / * VARSTRING(20)meta = 0 nullable = 1 is_null = 1 * /
...
#302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA //// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
“/ * * /!;
###更新test.t
### WHERE
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 ='apple'/ * VARSTRING(20)meta = 20 nullable = 0 is_null = 0 * /
### @ 3 = NULL / * VARSTRING(20)meta = 0 nullable = 1 is_null = 1 * /
### SET
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 ='pear'/ * VARSTRING(20)meta = 20 nullable = 0 is_null = 0 * /
### @ 3 ='2009:01:01'/ * DATE meta = 0 nullable = 1 is_null = 0 * /
...
#400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows:table id 17 flags:STMT_END_F

BINLOG'
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ =
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA // 4AQAAAARwZWFyIbIP
“/ * * /!;
### DELETE FROM test.t
### WHERE
### @ 1 = 1 / * INT meta = 0 nullable = 0 is_null = 0 * /
### @ 2 ='pear'/ * VARSTRING(20)meta = 20 nullable = 0 is_null = 0 * /
### @ 3 ='2009:01:01'/ * DATE meta = 0 nullable = 1 is_null = 0 * /

您可以 通过使用 来告诉 mysqlbinlog 来禁止 BINLOG 行事件 的 语句 --base64-output=DECODE-ROWS 选项 。 这类似 --base64-output=NEVER 但如果找到行事件则不会退出并返回错误。 的组合 --base64-output=DECODE-ROWS ,并 --verbose 提供了一个便捷的方式,看看行事件只是作为SQL语句:

外壳> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
#218
#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:table id 17标志:STMT_END_F
### INSERT INTO test.t
### SET
### @ 1 = 1
### @ 2 ='apple'
### @ 3 = NULL
...
#302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows:table id 17 flags:STMT_END_F
###更新test.t
### WHERE
### @ 1 = 1
### @ 2 ='apple'
### @ 3 = NULL
### SET
### @ 1 = 1
### @ 2 ='梨'
### @ 3 ='2009:01:01'
...
#400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows:table id 17 flags:STMT_END_F
### DELETE FROM test.t
### WHERE
### @ 1 = 1
### @ 2 ='梨'
### @ 3 ='2009:01:01'
注意

BINLOG 如果您打算重新执行 mysqlbinlog 输出, 则不应该禁止 语句 。

--verbose 行事件 生成的SQL语句 比相应的 BINLOG 语句 更具可读性 。 但是,它们与生成事件的原始SQL语句不完全对应。 以下限制适用:

  • 原始列名称将丢失并替换为 ,其中 是列号。 @N N

  • 二进制日志中没有字符集信息,这会影响字符串列显示:

    • 对应的二进制和非二进制字符串类型( BINARY 和 CHAR , VARBINARY 和 VARCHAR , BLOB 和 TEXT ) 之间没有区别 。 输出使用 STRING 固定长度字符串和 VARSTRING 可变长度字符串 的数据类型 。

    • 对于多字节字符集,二进制日志中不存在每个字符的最大字节数,因此字符串类型的长度以字节而不是字符显示。 例如, STRING(4) 将用作以下任一列类型的值的数据类型:

      CHAR(4)CHARACTER SET latin1
      CHAR(2)CHARACTER SET ucs2
      
    • 由于类型事件的存储格式 UPDATE_ROWS_EVENT , UPDATE 语句将与 WHERE 子句前面的 SET 子句 一起显示 。

对行事件的正确解释需要来自二进制日志开头的格式描述事件的信息。 因为 mysqlbinlog 事先不知道日志的其余部分是否包含行事件,所以默认情况下它会 BINLOG 在输出的初始部分 使用 语句 显示格式描述事件 。

如果已知二进制日志不包含任何需要 BINLOG 语句的 事件 (即没有行事件),则 --base64-output=NEVER 可以使用 该 选项来防止写入此标头。

4.6.8.3使用mysqlbinlog备份二进制日志文件

默认情况下, mysqlbinlog 读取二进制日志文件并以文本格式显示其内容。 这使您可以更轻松地检查文件中的事件并重新执行它们(例如,通过使用输出作为 mysql的 输入 )。 mysqlbinlog 可以直接从本地文件系统读取日志文件,或者,通过该 --read-from-remote-server 选项,它可以连接到服务器并从该服务器请求二进制日志内容。 mysqlbinlog 将文本输出写入其标准输出,或者 如果给出 该 选项,则将 文件输出写入 选项 的值 。 --result-file=file_name

mysqlbinlog备份功能

mysqlbinlog 可以读取二进制日志文件并写入包含相同内容的新文件,即二进制格式而不是文本格式。 此功能使您可以轻松备份其原始格式的二进制日志。 mysqlbinlog 可以进行静态备份,备份一组日志文件,并在到达最后一个文件的末尾时停止。 它还可以进行连续( “ 实时 ” )备份,当它到达最后一个日志文件的末尾时保持与服务器的连接,并在生成它们时继续复制新事件。 在连续备份操作中, mysqlbinlog 运行直到连接结束(例如,当服务器退出时)或 强制终止 mysqlbinlog 。 当连接结束时, mysqlbinlog 不会等待 并重 试连接,这与从属复制服务器不同。 要在服务器重新启动后继续进行实时备份,还必须重新启动 mysqlbinlog 。

重要

mysqlbinlog 可以备份加密和未加密的二进制日志文件。 但是,使用 mysqlbinlog 生成的加密二进制日志文件的副本 以未加密的格式存储。

mysqlbinlog备份选项

二进制日志备份要求您 至少使用两个选项 调用 mysqlbinlog :

与此同时 --read-from-remote-server ,通常指定其他选项: --host 指示服务器的运行位置,您可能还需要指定连接选项,例如 --user 和 --password 。

其他几个选项可用于 --raw :

静态和实时备份

要使用 mysqlbinlog 备份服务器的二进制日志文件 ,必须指定服务器上实际存在的文件名。 如果您不知道名称,请连接到服务器并使用该 SHOW BINARY LOGS 语句查看当前名称。 假设该语句产生此输出:

MySQL的> SHOW BINARY LOGS;
+ --------------- + ----------- ----------- + +
| Log_name | File_size | 加密|
+ --------------- + ----------- ----------- + +
| binlog.000130 | 27459 | 没有|
| binlog.000131 | 13719 | 没有|
| binlog.000132 | 43268 | 没有|
+ --------------- + ----------- ----------- + +

使用该信息,您可以使用 mysqlbinlog 将二进制日志备份到当前目录,如下所示(在一行中输入每个命令):

  • 要对 binlog.000130 through 进行静态备份 binlog.000132 ,请使用以下任一命令:

    mysqlbinlog --read-from-remote-server --host = host_name--raw
      binlog.000130 binlog.000131 binlog.000132
    
    mysqlbinlog --read-from-remote-server --host = host_name--raw
      --to-last-log binlog.000130
    

    第一个命令显式指定每个文件名。 第二个名称只是第一个文件,用于 --to-last-log 读取最后 一个文件 。 这些命令之间的区别在于,如果服务器 binlog.000133 在 mysqlbinlog 到达结束 之前 打开 binlog.000132 ,则第一个命令将不读取它,但第二个命令将会读取。

  • 要进行 mysqlbinlog 启动 的实时备份 binlog.000130 以复制现有日志文件,然后保持连接以在服务器生成它们时复制新事件:

    mysqlbinlog --read-from-remote-server --host =host_name--raw
      --stop-never binlog.000130
    

    使用时 --stop-never ,没有必要指定 --to-last-log 读取最后一个日志文件,因为该选项是隐含的。

输出文件命名

如果没有 --raw , mysqlbinlog 会生成文本输出 --result-file ,如果给定, 则 选项指定写入所有输出的单个文件的名称。 使用 --raw , mysqlbinlog 为从服务器传输的每个日志文件写入一个二进制输出文件。 默认情况下, mysqlbinlog 使用与原始日志文件相同的名称写入当前目录中的文件。 要修改输出文件名,请使用该 --result-file 选项。 与此同时 --raw , --result-file 选项值被视为修改输出文件名的前缀。

假设服务器当前具有名为 binlog.000999 up的 二进制日志文件 。 如果使用 mysqlbinlog --raw 备份文件,该 --result-file 选项将生成输出文件名,如下表所示。 您可以通过 --result-file 使用目录路径 开始 值 将文件写入特定目录 。 如果 --result-file 值仅包含目录名,则该值必须以路径名分隔符结尾。 输出文件如果存在则会被覆盖。

--result-file 选项 输出文件名
--result-file=x xbinlog.000999 而且
--result-file=/tmp/ /tmp/binlog.000999 而且
--result-file=/tmp/x /tmp/xbinlog.000999 而且
示例:mysqldump + mysqlbinlog用于备份和还原

以下示例描述了一个简单的场景,该场景显示了如何一起使用 mysqldump 和 mysqlbinlog 来备份服务器的数据和二进制日志,以及如何在发生数据丢失时使用备份来还原服务器。 该示例假定服务器正在主机上运行, host_name 并且其第一个二进制日志文件已命名 binlog.000999 。 在一行中输入每个命令。

使用 mysqlbinlog 对二进制日志进行连续备份:

mysqlbinlog --read-from-remote-server --host = host_name--raw
  --stop-never binlog.000999

使用 mysqldump 创建转储文件作为服务器数据的快照。 使用 --all-databases , --events 和 --routines 备份所有数据,并将 --master-data=2 当前二进制日志坐标包含在转储文件中。

mysqldump --host = host_name--all-databases --events --routines --master-data = 2>dump_file

定期 执行 mysqldump 命令以根据需要创建更新的快照。

如果发生数据丢失(例如,如果服务器崩溃),请使用最新的转储文件来还原数据:

mysql --host = host_name-u root -p <dump_file

然后使用二进制日志备份重新执行在转储文件中列出的坐标之后写入的事件。 假设文件中的坐标如下所示:

-  CHANGE MASTER TO MASTER_LOG_FILE ='binlog.001002',MASTER_LOG_POS = 27284;

如果命名了最新的备份日志文件 binlog.001004 ,请重新执行以下日志事件:

mysqlbinlog --start-position = 27284 binlog.001002 binlog.001003 binlog.001004
  | mysql --host = host_name-u root -p

您可能会发现将备份文件(转储文件和二进制日志文件)复制到服务器主机更容易,以便更容易执行还原操作,或者MySQL不允许远程 root 访问。

mysqlbinlog备份限制

使用 mysqlbinlog 进行 二进制日志备份 受以下限制:

  • 如果连接丢失, mysqlbinlog 不会自动重新连接到MySQL服务器(例如,如果服务器重新启动或网络中断)。

  • 备份的延迟类似于复制从站的延迟。

4.6.8.4指定mysqlbinlog服务器ID

当使用该 --read-from-remote-server 选项 调用时 , mysqlbinlog 连接到MySQL服务器,指定用于标识自身的服务器ID,并从服务器请求二进制日志文件。 您可以使用 mysqlbinlog 以多种方式从服务器请求日志文件:

  • 指定一组显式命名的文件:对于每个文件, mysqlbinlog 连接并发出 Binlog dump 命令。 服务器发送文件并断开连接。 每个文件有一个连接。

  • 指定开始文件和 --to-last-log : mysqlbinlog 连接并 Binlog dump 为所有文件 发出 命令。 服务器发送所有文件并断开连接。

  • 指定开始文件和 --stop-never (暗示 --to-last-log ): mysqlbinlog 连接并发出 Binlog dump 所有文件 的 命令。 服务器发送所有文件,但在发送最后一个文件后不会断开连接。

随着 --read-from-remote-server 而已, mysqlbinlog可以 连接使用0服务器ID,它告诉服务器发送一个请求日志文件后断开。

使用 --read-from-remote-server 和 --stop-never , mysqlbinlog 使用非零服务器ID连接,因此服务器在发送最后一个日志文件后不会断开连接。 默认情况下,服务器ID为1,但可以使用此更改 --connection-server-id 。

因此,对于请求文件的前两种方式,服务器断开连接,因为 mysqlbinlog 指定服务器ID为0.如果 --stop-never 给出 ,则不会断开连接, 因为 mysqlbinlog 指定非零服务器ID。

4.6.9  mysqldumpslow - 汇总慢查询日志文件

MySQL慢查询日志包含有关需要很长时间才能执行的查询的信息(请参见 第5.4.5节“慢查询日志” )。 mysqldumpslow 解析MySQL慢查询日志文件并总结其内容。

通常, 除了数字和字符串数据值的特定值之外 , mysqldumpslow 对类似的查询进行分组。 它将 这些值 “ 抽象 ” 为 N 和 'S' 显示摘要输出。 要修改值抽象行为,请使用 -a 和 -n 选项。

像这样 调用 mysqldumpslow :

外壳> mysqldumpslow [options] [log_file ...]

用法示例:

外壳> mysqldumpslow

从/usr/local/mysql/data/mysqld80-slow.log读取mysql慢查询日志
计数:1时间= 4.32s(4s)锁= 0.00s(0s)行= 0.0(0),根[root] @localhost
 从t1插入t2 select *

计数:3时间= 2.53s(7s)锁= 0.00s(0s)行= 0.0(0),根[root] @localhost
 插入到t2中选择*从t1限制N.

计数:3时间= 2.13s(6s)锁= 0.00s(0s)行= 0.0(0),根[root] @localhost
 从t1插入t1 select *

mysqldumpslow 支持以下选项。

表4.19 mysqldumpslow选项

格式 描述
-一个 不要将所有数字抽象为N,将字符串抽象为'S'
-n 具有至少指定数字的抽象数字
--debug 写调试信息
-G 仅考虑与模式匹配的语句
- 救命 显示帮助消息并退出
-H 日志文件名中服务器的主机名
-一世 服务器实例的名称
-l 不要从总时间中减去锁定时间
-r 反转排序顺序
-s 如何排序输出
-t 仅显示第一个num查询
--verbose 详细模式

  • --help

    显示帮助消息并退出。

  • -a

    不要将所有数字 N 和字符串 抽象 为 'S' 。

  • --debug , -d

    在调试模式下运行。

  • -g pattern

    仅考虑与( grep- style)模式 匹配的查询 。

  • -h host_name

    *-slow.log 文件名 的MySQL服务器的主机 名。 该值可以包含通配符。 默认值为 * (全部匹配)。

  • -i name

    服务器实例的名称(如果使用 mysql.server 启动脚本)。

  • -l

    不要从总时间中减去锁定时间。

  • -n N

    N 名称 中至少有 数字的 抽象数字 。

  • -r

    反转排序顺序。

  • -s sort_type

    如何对输出进行排序。 sort_type 应从以下列表中选择 值 :

    • t , at :按查询时间或平均查询时间排序

    • l , al :按锁定时间或平均锁定时间排序

    • r , ar :按发送的行或发送的平均行排序

    • c :按计数排序

    默认情况下, mysqldumpslow 按平均查询时间(相当于 -s at ) 排序 。

  • -t N

    仅显示 N 输出中 的第一个 查询。

  • --verbose , -v

    详细模式。 打印有关程序功能的更多信息。

4.7 MySQL程序开发实用程序

本节介绍在开发MySQL程序时可能会发现有用的一些实用程序。

在shell脚本中,您可以使用 my_print_defaults 程序来解析选项文件,并查看给定程序将使用哪些选项。 以下示例显示 my_print_defaults 在被要求显示在 [client] 和 [mysql] 组中 找到的选项时可能产生 的输出 :

外壳> my_print_defaults client mysql
--port = 3306
--socket = / TMP /的mysql.sock
--no-自动翻版

开发人员注意事项:只需在任何命令行参数之前处理相应组或组中的所有选项,即可在C客户端库中实现选项文件处理。 这适用于使用多次指定的选项的最后一个实例的程序。 如果您有一个C或C ++程序以这种方式处理多个指定选项但不读取选项文件,则只需添加两行来为其提供该功能。 检查任何标准MySQL客户端的源代码,看看如何执行此操作。

MySQL的其他几种语言接口基于C客户端库,其中一些提供了访问选项文件内容的方法。 这些包括Perl和Python。 有关详细信息,请参阅首选界面的文档。

4.7.1  mysql_config - 显示编译客户端的选项

mysql_config 为编译MySQL客户端并将其连接到MySQL提供了有用的信息。 它是一个shell脚本,因此只能在Unix和类Unix系统上使用。

注意

pkg-config 可以用作 mysql_config 的替代方法, 用于获取编译MySQL应用程序所需的编译器标志或链接库等信息。 有关更多信息,请参见 第28.7.4.2节“使用pkg-config构建C API客户端程序” 。

mysql_config 支持以下选项。

  • --cflags

    C编译器标志,用于查找包含文件和关键编译器标志以及编译 libmysqlclient 库 时使用的定义 。 返回的选项与创建库时使用的特定编译器相关联,并且可能与您自己的编译器的设置冲突。 使用 --include 了仅包含包括路径更便携的选择。

  • --cxxflags

    喜欢 --cflags ,但对于C ++编译器标志。

  • --include

    用于查找MySQL包含文件的编译器选项。

  • --libs

    链接MySQL客户端库所需的库和选项。

  • --libs_r

    链接到线程安全的MySQL客户端库所需的库和选项。 在MySQL 8.0中,所有客户端库都是线程安全的,因此不需要使用此选项。 该 --libs 选项可用于所有情况。

  • --plugindir

    配置MySQL时定义的默认插件目录路径名。

  • --port

    配置MySQL时定义的默认TCP / IP端口号。

  • --socket

    配置MySQL时定义的默认Unix套接字文件。

  • --variable=var_name

    显示指定配置变量的值。 允许的 var_name 值是 pkgincludedir (头文件目录), pkglibdir (库目录)和 plugindir (插件目录)。

  • --version

    MySQL发行版的版本号。

如果 在没有选项的情况下 调用 mysql_config ,它将显示它支持的所有选项的列表及其值:

外壳> mysql_config
用法:/ usr / local / mysql / bin / mysql_config [options]
选项:
  --cflags [-I / usr / local / mysql / include / mysql -mcpu = pentiumpro]
  --cxxflags [-I / usr / local / mysql / include / mysql -mcpu = pentiumpro]
  --include [-I / usr / local / mysql / include / mysql]
  --libs [-L / usr / local / mysql / lib / mysql -lmysqlclient
                    -lpthread -lm -lrt -lssl -lcrypto -ldl]
  --libs_r [-L / usr / local / mysql / lib / mysql -lmysqlclient_r
                    -lpthread -lm -lrt -lssl -lcrypto -ldl]
  --plugindir [/ usr / local / mysql / lib / plugin]
  --socket [/tmp/mysql.sock]
  --port [3306]
  - 版本[5.8.0-m17]
  --variable = VAR VAR是以下之一:
          pkgincludedir [/ usr / local / mysql / include]
          pkglibdir [/ usr / local / mysql / lib]
          plugindir [/ usr / local / mysql / lib / plugin]

您可以 在命令行中使用反引号来 使用 mysql_config 来包含它为特定选项生成的输出。 例如,要编译和链接MySQL客户端程序,请使用 mysql_config ,如下所示:

gcc -c`mysql_config --cflags` progname.c
gcc -o progname progname.o`mysql_config --libs`

4.7.2  my_print_defaults - 显示选项文件中的选项

my_print_defaults 显示选项文件的选项组中存在的选项。 输出指示读取指定选项组的程序将使用哪些选项。 例如, mysqlcheck 程序读取 [mysqlcheck] 和 [client] 选项组。 要查看标准选项文件中这些组中存在哪些选项, 请 像这样 调用 my_print_defaults :

外壳> my_print_defaults mysqlcheck client
--user =名为myUsername
--password =password
主机=本地主机

输出由选项组成,每行一个,其形式将在命令行中指定。

my_print_defaults 支持以下选项。

4.8其他课程

4.8.1  lz4_decompress - 解压缩mysqlpump LZ4压缩输出

所述 lz4_decompress 实用程序解压缩 mysqlpump 这是使用LZ4压缩创建的输出。

注意

如果MySQL配置了该 -DWITH_LZ4=system 选项, 则不会构建 lz4_decompress 。 在这种情况下, 可以使用 系统 lz4 命令。

像这样 调用 lz4_decompress :

外壳> lz4_decompress input_file output_file

例:

shell> mysqlpump --compress-output=LZ4 > dump.lz4
shell>lz4_decompress dump.lz4 dump.txt

要查看帮助消息,请调用 不 带参数的 lz4_decompress 。

要解压缩 mysqlpump ZLIB压缩输出,请使用 zlib_decompress 。 请参见 第4.8.3节“ zlib_decompress - 解压缩mysqlpump ZLIB压缩输出” 。

4.8.2  perror - 显示MySQL错误消息信息

perror 显示MySQL或操作系统错误代码的错误消息。 像这样 调用 perror :

外壳> perror [options] errorcode ...

perror 试图灵活地理解其论点。 例如,对于该 ER_WRONG_VALUE_FOR_VAR 误差, PERROR 理解任何这些参数: 1231 , 001231 , MY-1231 ,或 MY-001231 ,或 ER_WRONG_VALUE_FOR_VAR 。

外壳> perror 1231
MySQL错误代码MY-001231(ER_WRONG_VALUE_FOR_VAR):变量'% -  .64s'
不能设置为'% - 。200s'的值

如果错误编号在MySQL和操作系统错误重叠的范围内,则 perror 会显示以下错误消息:

外壳> perror 1 13
操作系统错误代码1:不允许操作
MySQL错误代码MY-000001:无法创建/写入文件'%s'(OS错误%d  - %s)
操作系统错误代码13:权限被拒绝
MySQL错误代码MY-000013:无法获取'%s'的统计信息(OS errno%d  - %s)

要获取MySQL Cluster错误代码的错误消息,请使用 ndb_perror 实用程序。

系统错误消息的含义可能取决于您的操作系统。 给定的错误代码可能意味着不同操作系统上的不同内容。

perror 支持以下选项。

  • --help , --info , -I , -?

    显示帮助消息并退出。

  • --ndb

    打印MySQL Cluster错误代码的错误消息。

    在MySQL 8.0.13中删除了此选项。 请改用 ndb_perror 实用程序。

  • --silent , -s

    静音模式。 仅打印错误消息。

  • --verbose , -v

    详细模式。 打印错误代码和消息。 这是默认行为。

  • --version , -V

    显示版本信息并退出。

4.8.3  zlib_decompress - 解压缩mysqlpump ZLIB压缩输出

所述 zlib_decompress 实用程序解压缩 mysqlpump 这是使用ZLIB压缩创建的输出。

注意

如果使用该 -DWITH_ZLIB=system 选项 配置MySQL , 则不会构建 zlib_decompress 。 在这种情况下, 可以使用 系统 openssl zlib 命令。

像这样 调用 zlib_decompress :

外壳> zlib_decompress input_file output_file

例:

shell> mysqlpump --compress-output=ZLIB > dump.zlib
shell>zlib_decompress dump.zlib dump.txt

要查看帮助消息,请调用 不 带参数的 zlib_decompress 。

要解压缩 mysqlpump LZ4压缩输出,请使用 lz4_decompress 。 请参见 第4.8.1节“ lz4_decompress - 解压缩mysqlpump LZ4压缩输出” 。

4.9 MySQL程序环境变量

本节列出了MySQL直接或间接使用的环境变量。 其中大部分也可以在本手册的其他地方找到。

命令行上的选项优先于选项文件和环境变量中指定的值,选项文件中的值优先于环境变量中的值。 在许多情况下,最好使用选项文件而不是环境变量来修改MySQL的行为。 请参见 第4.2.2.2节“使用选项文件” 。

变量 描述
AUTHENTICATION_PAM_LOG PAM 身份验证插件调试日志记录设置。
CC C编译器的名称(用于运行 CMake )。
CXX C ++编译器的名称(用于运行 CMake )。
CC C编译器的名称(用于运行 CMake )。
DBI_USER Perl DBI的默认用户名。
DBI_TRACE Perl DBI的跟踪选项。
HOME mysql 历史文件 的默认路径 是 $HOME/.mysql_history 。
LD_RUN_PATH 用于指定的位置 libmysqlclient.so 。
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN 启用 mysql_clear_password 身份验证插件; 请参见 第6.4.1.4节“客户端明文可插拔认证” 。
LIBMYSQL_PLUGIN_DIR 查找客户端插件的目录。
LIBMYSQL_PLUGINS 客户端插件预加载。
MYSQL_DEBUG 调试时调试跟踪选项。
MYSQL_GROUP_SUFFIX 选项组后缀值(如指定 --defaults-group-suffix )。
MYSQL_HISTFILE mysql 历史文件 的路径 。 如果设置了此变量,则其值将覆盖默认值 $HOME/.mysql_history 。
MYSQL_HISTIGNORE 模式指定 mysql 不应该记录的 语句 $HOME/.mysql_history ,或者 syslog 是否 --syslog 给出。
MYSQL_HOME 服务器特定 my.cnf 文件所在 目录的路径 。
MYSQL_HOST mysql 命令行客户端 使用的默认主机名 。
MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD 最大密钥长度 CREATE_DH_PARAMETERS() 。 请参见 第12.19.2节“MySQL Enterprise Encryption用法和示例” 。
MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD 最大DSA密钥长度 CREATE_ASYMMETRIC_PRIV_KEY() 。 请参见 第12.19.2节“MySQL Enterprise Encryption用法和示例” 。
MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD 最大RSA密钥长度 CREATE_ASYMMETRIC_PRIV_KEY() 。 请参见 第12.19.2节“MySQL Enterprise Encryption用法和示例” 。
MYSQL_PS1 要在 mysql 命令行客户端中 使用的命令提示符 。
MYSQL_PWD 连接 mysqld 时的默认密码 。 使用它是不安全的。 请参见 第6.1.2.1节“密码安全的最终用户指南” 。
MYSQL_TCP_PORT 默认的TCP / IP端口号。
MYSQL_TEST_LOGIN_FILE .mylogin.cnf 登录路径文件 的名称 。
MYSQL_TEST_TRACE_CRASH 测试协议跟踪插件是否会崩溃客户端。 见下表注释。
MYSQL_TEST_TRACE_DEBUG 测试协议跟踪插件是否产生输出。 见下表注释。
MYSQL_UNIX_PORT 默认的Unix套接字文件名; 用于连接 localhost 。
MYSQLX_TCP_PORT X Plugin默认的TCP / IP端口号。
MYSQLX_UNIX_PORT X Plugin默认的Unix套接字文件名; 用于连接 localhost 。
NOTIFY_SOCKET mysqld 用来与systemd通信的 套接字 。
PATH 用于shell来查找MySQL程序。
PKG_CONFIG_PATH 的位置 mysqlclient.pc pkg配置 文件。 见下表注释。
TMPDIR 创建临时文件的目录。
TZ 这应该设置为您当地的时区。 请参见 第B.4.3.7节“时区问题” 。
UMASK 创建文件时的用户文件创建模式。 见下表注释。
UMASK_DIR 创建目录时的用户目录创建模式。 见下表注释。
USER 连接到 mysqld 时Windows上的默认用户名 。

有关 mysql 历史文件的信息,请参见 第4.5.1.3节“mysql客户端日志记录” 。

MYSQL_TEST_LOGIN_FILE 是登录路径文件的路径名(由 mysql_config_editor 创建的文件 )。 如果未设置,则默认值为 %APPDATA%\MySQL\.mylogin.cnf Windows和 $HOME/.mylogin.cnf 非Windows系统上的 目录 。 请参见 第4.6.7节“ mysql_config_editor - MySQL配置实用程序” 。

在 MYSQL_TEST_TRACE_DEBUG 和 MYSQL_TEST_TRACE_CRASH 变量控制测试协议跟踪客户端插件,如果MySQL启用该插件内置。 有关更多信息,请参见 第29.2.4.11.1节“使用测试协议跟踪插件” 。

默认值 UMASK 和 UMASK_DIR 值分别为 0640 和 0750 。 如果以零开头, MySQL假定值为 UMASK 或 UMASK_DIR 八进制。 例如,设置 UMASK=0600 相当于 UMASK=384 因为0600八进制是384十进制。

在 UMASK 和 UMASK_DIR 变数,尽管他们的名字,被用作模式,没有口罩:

  • 如果 UMASK 设置, mysqld的 使用 ($UMASK | 0600) 的模式文件的创建,使新创建的文件在从0600到0666范围内的模式(所有值八进制)。

  • 如果 UMASK_DIR 设置了,则 mysqld 将 ($UMASK_DIR | 0700) 用作目录创建的基本模式,然后与其进行AND编辑 ~(~$UMASK & 0666) ,以便新创建的目录具有范围为0700到0777的模式(所有值为八进制)。 AND操作可以从目录模式中删除读写权限,但不执行执行权限。

PKG_CONFIG_PATH 如果使用 pkg-config 构建MySQL程序 ,可能需要进行设置 。 请参见 第28.7.4.2节“使用pkg-config构建C API客户端程序” 。

原文