原文:docs.oracle.com/javase/tutorial/reallybigindex.html
原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-other-options.html
6.6.4.4 其他 myisamchk 选项
myisamchk 支持以下除检查和修复表之外的操作选项:
–分析,-a
命令行格式——分析键值的分布。这允许连接优化器对表的连接顺序和使用的索引做出更好的选择,从而提高连接性能。要获取有关密钥分发的信息,请使用myisamchk –description –verbose tbl_name 命令或SHOW INDEX FROM *tbl_name* 语句。
–block-search=*偏移量*, -b *偏移量*
命令行格式–block-search=offset typenumber 在指定偏移处搜索该块所属的记录。
–描述,-d
命令行格式–description 打印有关表的描述性信息。指定–verbose 选项一次或两次会生成附加信息。请参阅使用myisamchk 获取表信息。
–set-auto-increment[=*值*], -A[*值*]
强制AUTO_INCREMENT 从指定值开始对新记录进行编号(如果存在AUTO_INCRMENT 值大于该值的现有记录,则为更高的值)。如果未指定*value*,新记录的AUTO_INCRMENT 编号将从表中当前最大值加1 开始。
–排序索引,-S
命令行形式–sort-index 对索引树块从上到下进行排序。这可以优化查找并加速使用索引的表扫描。
–sort-records=*N*, -R *N*
命令行格式–sort-records=#Type number 根据特定索引对记录进行排序。这使您的数据更加本地化,并且可以使用此索引加速基于范围的SELECT 和ORDER BY 操作。 (第一次使用此选项时,对表进行排序可能会非常慢。) 要确定表的索引号,请使用SHOW 以与myisamchk 识别的顺序相同的顺序显示表的索引。 使用INDEX。索引从1 开始编号。
如果键没有打包(PACK_KEYS=0),则键的长度相同,因此当myisamchk排序和移动记录时,它只是覆盖索引中的记录偏移量。如果密钥已经打包(PACK_KEYS=1),myisamchk 必须首先解包密钥块,然后重新索引并再次打包密钥块。 (在这种情况下,重新创建索引比更新每个索引的偏移量更快。)
原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-table-info.html
6.6.4.5 使用 myisamchk 获取表信息
要获取MyISAM 表的描述或有关它的统计信息,请使用此处显示的命令。稍后将解释这些命令的输出。
myisamchk -d tbl_name
在“描述模式”下运行myisamchk 以生成表的描述。如果在禁用外部锁的情况下启动MySQL 服务器,则在运行时更新的表可能会报告错误。但是,myisamchk 在写入模式下不会修改表,因此不会损坏数据。
myisamchk -dv tbl_name
添加-v 参数以详细模式运行myisamchk 并生成有关表的详细信息。再次添加-v参数将生成更详细的信息。
myisamchk -eis tbl_name
仅显示表中最重要的信息。这个操作需要读取整个表,所以比较耗时。
myisamchk -eiv tbl_name
这与-eis 类似,但您可以看到发生了什么。
tbl_name 参数可以是MyISAM 表或其索引文件的名称,如myisamchk — MyISAM 表维护实用程序中所述。可以指定多个tbl_name 参数。
假设名为person 的表具有以下结构: (因为包含了MAX_ROWS 表选项,所以后面显示的myisamchk 示例输出具有一些较小的值,使其更容易适应输出格式。)
创建表的人
(
id INT NOT NULL AUTO_INCRMENT,
姓氏VARCHAR(20) NOT NULL,
名字VARCHAR(20) NOT NULL,
出生日期,
死亡日期,
主键(ID),
索引(姓氏、名字),
指数(出生)
) MAX_ROWS=1000000 引擎=MYISAM;
假设一个表有以下数据和索引文件大小:
-rw-rw—- 1 mysql mysql 9347072 八月19 11:47 人.MYD
-rw-rw—- 1 mysql mysql 6066176 8月19日11:47人.MYI
myisamchk -dvv 的输出示例:
MyISAM 文件: 人
记录格式: 打包
字符集: utf8mb4_0900_ai_ci (255)
文件版本: 1
创建时间: 2017-03-30 21:21:30
状态: 检查、分析、优化键、排序索引页
自动递增key: 1 最终值: 306688
数据记录: 306688 删除的块: 0
数据文件部分: 306688 删除的数据: 0
数据文件指针(字节) : 4 密钥文件指针(字节) : 3
数据文件长度: 9347072 密钥文件长度: 6066176
数据文件的最大长度: 4294967294 密钥文件的最大长度: 17179868159
记录长度: 54
表说明:
密钥起始长度索引类型录制/密钥根块大小
1 2 4 唯一长1 1024
2 6 80 varchar 前缀0 1024
87 80 可变字符0
3 168 3 乘法uint24 NULL 0 1024
字段起始长度Nullpos Nullbit 类型
1 1 1
2 2 4 无零
3 6 81 个可变长度字符
4 87 81 可变长度字符
5 168 3 1 1 无零
6 171 3 1 2 无零
本节描述myisamchk 生成的消息类型。 “密钥文件”指的是索引文件。 “记录”和“行”是同义词,“字段”和“列”也是同义词。
表描述的第一部分包含以下值:
MyISAM 文件
MyISAM(索引)文件的名称。
记录格式
用于存储表行的格式。前面的示例使用固定长度。其他可能的值包括压缩和打包。 (打包对应于SHOW TABLE STATUS 报告的动态。)
字符集
表的默认字符集。
文件版本
MyISAM 格式版本。总是1。
创建时间
数据文件创建时间。
恢复时间
上次重建索引/数据文件的时间。
状态
表状态标志。可能的值有崩溃、打开、修改、分析、优化键和排序索引页。
自增键,最后一个值
与表中AUTO_INCREMENT 列关联的键号以及为此列生成的最后一个值。如果没有这样的列,则不会显示这些字段。
数据记录
表中的行数。
已删除的块
仍有剩余空间的已删除块的数量。您可以通过优化表格来最小化此空间。请参阅优化MyISAM 表。
数据文件部分
对于动态行格式,这表示数据块的数量。对于没有碎片行的优化表,这与数据记录相同。
删除的数据
存在多少字节已删除的数据尚未回收。您可以通过优化表格来最小化此空间。请参阅优化MyISAM 表。
数据文件指针
数据文件指针的大小(以字节为单位)。通常为2、3、4 或5 个字节。大多数表使用2 个字节,目前MySQL 无法控制该大小。对于固定表,这是行地址。对于动态表,这是一个字节地址。
密钥文件指针
索引文件指针的大小(以字节为单位)。通常为1、2 或3 个字节。大多数表使用2 个字节,但MySQL 会自动计算此值。始终是块地址。
数据文件最大长度
表数据文件的长度(以字节为单位)。
最大密钥文件长度
表索引文件的长度(以字节为单位)。
记录长度
每行占用的空间(以字节为单位)。
输出的表描述部分包含表中所有键的列表。 myisamchk 显示每个键的一些低级信息。
钥匙
该键的编号。仅针对键的第一列显示该值。如果缺少此值,则该行对应于多列键的第二列和后续列。在此示例所示的表中,第二个索引包含两行表描述。这意味着它是一个由两部分组成的多部分索引。
开始
该索引部分中行的起始位置。
长度
该部分索引的长度。对于填充数字,这必须始终是列的总长度。对于字符串,它可以比索引列的总长度短,因为字符串列的前缀可以被索引。多部分密钥的总长度是所有密钥部分的Len值之和。
指数
一个索引中是否可以存在多个相同的键值。可能的值是唯一的或多个。
类型
该部分索引的数据类型。这是一种MyISAM 数据类型,允许打包、剥离和空值。
根
根索引块的地址。
块大小
每个索引块的大小。默认值为1024,但从源代码构建MySQL 时可以在编译时更改该值。
录音/按键
这是优化器使用的统计数据。这告诉该索引每个值有多少行。唯一索引值始终为1。加载表(或进行重大修改)后,可以使用myisamchk -a 更新此值。如果没有更新,则给出默认值30。
输出的最后部分显示有关每列的信息。
场地
列索引。
开始
表行中列的字节位置。
长度
列长度(以字节为单位)。
努尔波苏、努尔比特
对于可以为空的列,MyISAM 将空值存储为字节内的标志。一个或多个字节可用于此目的,具体取决于允许空值的列数。如果Nullpos和Nullbit值不为空,则表明哪些字节和位包含指示该列是否为NULL的标志。
字段1行显示位置和数字,指示用于存储NULL标志的位置和字节数。这就是为什么person 表有5 列和6 行字段。
类型
数据类型。该值可能包括以下描述符之一:
连续的
所有行都具有相同的值。
没有结束空间
不要保存尾随空格。
没有结束空间,并不总是
不要保留尾随空格或对所有值执行尾随空格压缩。
没有尽头的空间,没有天空
不要保存尾随空格。不要存储空值。
查表
列已转换为ENUM。
零填充(*N*)
该值的最高有效*N* 字节始终为0 并且不保存。
没有零
不要存储零值。
始终为零
零值使用1 位存储。
怒气树
与列关联的霍夫曼树编号。
少量
霍夫曼树中使用的位数。
如果使用myisampack 压缩表,则会显示霍夫树和位字段。有关此信息的示例,请参见第6.6.6 节“myisampack — 生成压缩的只读MyISAM 表”。
myisamchk -eiv 的输出示例:
33,360 人检查MyISAM 文件
数据记录: 306688 删除的块: 0
-检查文件大小
– 检查记录删除链
无记录链接
– 检查密钥删除链
区块大小1024:
– 检查索引参考
– 检查数据记录参考。索引: 1
密钥: 1: 使用的密钥块: 98% 包: 0% 最大级别: 3
– 检查数据记录参考。索引: 2
密钥: 2: 使用的密钥块: 99% 包: 97% 最大级别: 3
– 检查数据记录参考。索引: 3
密钥: 3: 使用的密钥块: 98% 包: -14% 最大级别: 3
总计: 使用的密钥块数量: 98% 打包: 89%
– 检查记录和索引引用
**** 删除了大量行号****
记录: 306688 M.recordlength: 25 Packed: 83%
已用记录空间: 97% 空闲空间: 2% 块/记录: 1.00
记录块: 306688 删除块: 0
记录数据: 7934464 删除数据: 0
丢失空间: 256512 链接数据: 1156096
用户时间43.08,系统时间1.68
最大驻留集大小0,组合驻留集大小0
0 个非物理页错误、0 个物理页错误、0 个交换
块输入0 输出7、消息输入0 输出0、信号0
自愿上下文切换0、非自愿上下文切换0
最大内存使用量: 1046926 字节(1023k)
myisamchk -eiv 的输出包括以下信息:
数据记录
表中的行数。
已删除的块
仍保留空间的已删除块的数量。您可以通过优化表格来最小化此空间。请参阅优化MyISAM 表。
钥匙
关键号码。
使用过的钥匙块
使用的关键块的百分比。如果表刚刚使用myisamchk 重组,该值将非常高(非常接近理论最大值)。
压缩
MySQL尝试使用通用后缀来压缩键值。这仅适用于CHAR 和VARCHAR 列上的索引。这可以显着减少具有相似左侧部分的长索引字符串所使用的空间。在前面的示例中,第二个密钥的长度为40 字节,实现了97% 的空间减少。
最高等级
该键的B 树有多深?具有长键值的大表将获得更高的值。
记录
表中有多少行?
M.记录长度
平均线长度。对于具有固定长度行的表,这是精确的行长度,因为所有行的长度相同。
压缩
MySQL 删除字符串末尾的空格。压缩值表示通过执行此操作实现的节省百分比。
已用记录空间
使用的数据文件的百分比。
空间
未使用的数据文件的百分比。
块/记录
每行的平均块数(即,有多少个链接组成一个碎片行)。对于固定格式表,该值始终为1.0。该值应尽可能接近1.0。如果值太大,可以重新组织表。请参阅优化MyISAM 表。
记录块
使用的块(链接)数量。对于固定格式表,这与行数相同。
删除块
已删除(未使用)的块(链接)的数量。
记录数据
数据文件中使用的字节数。
删除的数据
数据文件中已删除(未使用)的字节数。
失去的空间
如果将行的长度更新为较短,则会丢失一些空间。这是所有此类损失的总和,以字节为单位。
链接数据
当使用动态表格式时,行片段通过指针(每个4到7个字节)连接。 Linkdata 是所有这些指针使用的总存储空间。
原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-memory.html
6.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 指向内存中的文件系统,则更有可能出现内存不足错误。如果遇到此问题,请使用–tmpdir=*dir_name* 选项运行myisamchk 并指定文件系统上具有更多空间的目录。
Myisamchk 在执行修复操作时也需要大量的磁盘空间。
数据文件大小的两倍(原始文件和副本)。使用–quick 修复时不需要此空间。仅重新创建索引文件。副本是在与原始文件相同的目录中创建的,因此该空间必须在与原始数据文件相同的文件系统上可用。
用于新索引文件替换旧索引文件的空间。该空间通常会被忽略,因为旧索引文件在修复操作开始时被截断。该空间必须在与原始数据文件相同的文件系统上可用。
如果使用–recover 或–sort-recover (但不使用–safe-recover),则需要磁盘上的排序空间。此空间分配给临时目录(TMPDIR 或使用–tmpdir=*dir_name* 指定)。以下公式显示了所需的空间量:
(*最大键* + *行指针长度*) * *行数* * 2
您可以使用**myisamchk -dv *tbl_name 检查键长度和row_pointer_length (请参阅使用myisamchk 获取表信息)。 row_pointer_length和number_of_rows值分别是表描述中的数据文件指针和数据记录值。要查看Maximum_key* 的值,请检查表描述中的Key 行。 Len 列显示每个关键部分的字节数。对于多列索引,键大小是所有键部分的Len值之和。
如果在修复过程中遇到磁盘空间问题,请尝试使用–safe-recover 而不是–recover。
6.6.5 myisamlog — 显示 MyISAM 日志文件内容
dev.mysql.com/doc/refman/8.0/en/myisamlog.html
myisamlog 处理MyISAM 日志文件的内容。要创建此类文件,请使用–log-isam=log_file 选项启动服务器。
调用myisamlog如下:
myisamlog [*选项*] [*文件名* [*tbl_name*] .]
默认操作是更新(-u)。执行恢复操作(-r) 时,将执行所有写入(以及可能的更新和删除),并且仅计算错误。如果未指定log_file参数,则默认日志文件名为myisam.log。如果您在命令行上命名表,则只有这些表才会被更新。
myisamlog 支持以下选项:
-? -我
显示帮助消息并退出。
-c *N*
仅运行N 个命令。
-f*N*
指定可以打开的最大文件数。
-F *文件路径/*
指定末尾带有斜杠的文件路径。
-我
退出前显示附加信息。
-o *偏移量*
指定起始偏移量。
-p*N*
从路径中删除N 个组件。
-r
执行恢复操作。
-R *记录位置文件记录位置*
指定录制位置文件和录制位置。
-u
执行更新操作。
-v
高级模式。打印有关程序行为的附加输出。您可以多次使用此选项以生成更多输出。
-w *写入文件*
指定要写入的文件。
-V
显示版本信息。
6.6.6 myisampack — 生成压缩的只读 MyISAM 表
原文:dev.mysql.com/doc/refman
/8.0/en/myisampack.html
myisampack 实用程序用于压缩MyISAM表。myisampack 通过分别压缩表中的每一列来工作。通常,myisampack 将数据文件压缩 40% 到 70%。
当稍后使用表时,服务器会读取解压缩列所需的信息到内存中。这样在访问单个行时会有更好的性能,因为你只需要解压缩一个行。
MySQL 在可能的情况下使用mmap()对压缩表执行内存映射。如果mmap()无法工作,MySQL 将退回到正常的读/写文件操作。
请注意以下事项:
如果使用外部锁定禁用启动了mysqld服务器,如果在打包过程中服务器可能更新表,那么调用myisampack不是一个好主意。最安全的方法是在服务器停止时压缩表。
对表进行打包后,它变为只读。这通常是有意为之的(比如在 CD 上访问打包的表时)。
myisampack 不支持分区表。
像这样调用myisampack:
myisampack [*options*] *file_name* …
每个文件名参数应该是一个索引(.MYI)文件的名称。如果你不在数据库目录中,你应该指定文件的路径名。可以省略.MYI扩展名。
在使用myisampack压缩表后,请使用myisamchk -rq重建其索引。6.6.4 “myisamchk — MyISAM 表维护实用程序”。
myisampack 支持以下选项。它还读取选项文件并支持处理它们的选项,详见 6.2.2.3 “影响选项文件处理的命令行选项”。
–help, -?
命令行格式–help显示帮助消息并退出。
–backup, -b
命令行格式–backup使用名称*tbl_name*.OLD备份每个表的数据文件。
–character-sets-dir=*dir_name*
命令行格式–character-sets-dir=dir_name类型目录名称安装字符集的目录。参见第 12.15 节,“字符集配置”。
–debug[=*debug_options*], -# [*debug_options*]
命令行格式–debug[=debug_options]类型字符串默认值d:t:o写入调试日志。典型的*debug_options*字符串是d:t:o,*file_name*。默认为d:t:o。
只有在使用WITH_DEBUG构建 MySQL 时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。
–force, -f
命令行格式–force即使生成的打包表比原始表大,或者如果之前调用myisampack的中间文件存在,也要生成打包表。(myisampack在压缩表时在数据库目录中创建一个名为*tbl_name*.TMD的中间文件。如果终止myisampack,可能不会删除.TMD文件。)通常,如果发现*tbl_name*.TMD存在,myisampack会因此而出错。使用–force,myisampack仍会打包表。
–join=*big_tbl_name*, -j *big_tbl_name*
命令行格式–join=big_tbl_name类型字符串将命令行中命名的所有表连接成一个单独的打包表*big_tbl_name。所有要合并的表必须*具有相同的结构(相同的列名和类型,相同的索引等)。
在连接操作之前,*big_tbl_name不能存在。要合并到big_tbl_name*的命令行中命名的所有源表必须存在。源表用于连接操作,但不会被修改。
–silent, -s
命令行格式–silent静默模式。仅在发生错误时输出。
–test, -t
命令行格式–test不实际打包表,只是测试打包。
–tmpdir=*dir_name*, -T *dir_name*
命令行格式–tmpdir=dir_name类型目录名称使用命名目录作为myisampack创建临时文件的位置。
–verbose, -v
命令行格式–verbose详细模式。写入有关打包操作进展及其结果的信息。
–version, -V
命令行格式–version显示版本信息并退出。
–wait, -w
命令行格式–wait如果表正在使用,则等待并重试。如果mysqld服务器是在禁用外部锁定的情况下调用的,则在打包过程中服务器可能更新表时,调用myisampack不是一个好主意。
以下命令序列展示了一个典型的表压缩会话:
$> ls -l station.*
-rw-rw-r– 1 jones my 994128 Apr 17 19:00 station.MYD
-rw-rw-r– 1 jones my 53248 Apr 17 19:00 station.MYI
$> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-02-02 3:06:43
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
Max datafile length: 54657023 Max keyfile length: 33554431
Recordlength: 834
Record format: Fixed length
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 1024 1024 1
2 32 30 multip. text 10240 1024 1
Field Start Length Type
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
Compressing station.MYI: (1192 records)
– Calculating statistics
normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
Original trees: 57 After join: 17
– Compressing file
87.14%
Remember to run myisamchk -rq on compressed tables
$> myisamchk -rq station
– check record delete-chain
– recovering (with sort) MyISAM-table \’station\’
Data records: 1192
– Fixing index 1
– Fixing index 2
$> mysqladmin -uroot flush-tables
$> ls -l station.*
-rw-rw-r– 1 jones my 127874 Apr 17 19:00 station.MYD
-rw-rw-r– 1 jones my 55296 Apr 17 19:04 station.MYI
$> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-04-17 19:04:26
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1
Max datafile length: 16777215 Max keyfile length: 131071
Recordlength: 834
Record format: Compressed
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 10240 1024 1
2 32 30 multip. text 54272 1024 1
Field Start Length Type Huff tree Bits
1 1 1 constant 1 0
2 2 4 zerofill(1) 2 9
3 6 4 no zeros, zerofill(1) 2 9
4 10 1 3 9
5 11 20 table-lookup 4 0
6 31 1 3 9
7 32 30 no endspace, not_always 5 9
8 62 35 no endspace, not_always, no empty 6 9
9 97 35 no empty 7 9
10 132 35 no endspace, not_always, no empty 6 9
11 167 4 zerofill(1) 2 9
12 171 16 no endspace, not_always, no empty 5 9
13 187 35 no endspace, not_always, no empty 6 9
14 222 4 zerofill(1) 2 9
15 226 16 no endspace, not_always, no empty 5 9
16 242 20 no endspace, not_always 8 9
17 262 20 no endspace, no empty 8 9
18 282 20 no endspace, no empty 5 9
19 302 30 no endspace, no empty 6 9
20 332 4 always zero 2 9
21 336 4 always zero 2 9
22 340 1 3 9
23 341 8 table-lookup 9 0
24 349 8 table-lookup 10 0
25 357 8 always zero 2 9
26 365 2 2 9
27 367 2 no zeros, zerofill(1) 2 9
28 369 4 no zeros, zerofill(1) 2 9
29 373 4 table-lookup 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 always zero 2 9
34 392 4 table-lookup 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 no zeros 2 9
39 409 4 always zero 2 9
40 413 4 no zeros 2 9
41 417 4 always zero 2 9
42 421 4 no zeros 2 9
43 425 4 always zero 2 9
44 429 20 no empty 3 9
45 449 30 no empty 3 9
46 479 1 14 4
47 480 1 14 4
48 481 79 no endspace, no empty 15 9
49 560 79 no empty 2 9
50 639 79 no empty 2 9
51 718 79 no endspace 16 9
52 797 8 no empty 2 9
53 805 1 17 1
54 806 1 3 9
55 807 20 no empty 3 9
56 827 4 no zeros, zerofill(2) 2 9
57 831 4 no zeros, zerofill(1) 2 9
myisampack显示以下类型的信息:
正常
未使用额外打包的列数。
空格空间
只包含空格值的列数。这些占用一个位。
空零
只包含二进制零值的列数。这些占用一个位。
空填充
不占据其类型的完整字节范围的整数列数。这些将被更改为较小的类型。例如,BIGINT – INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT\”)列(八个字节)可以存储为TINYINT – INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT\”)列(一个字节),如果所有值都在-128到127的范围内。
前置空格
存储有前导空格的十进制列数。在这种情况下,每个值都包含前导空格的计数。
结束空间
具有大量尾随空格的列数。在这种情况下,每个值都包含尾随空格的计数。
表查找
该列只有少量不同的值,这些值在 Huffman 压缩之前被转换为ENUM。
零
所有值都为零的列数。
原始树
初始 Huffman 树的数量。
连接后
在连接树以节省一些标题空间后剩余的不同 Huffman 树的数量。
表格压缩后,由myisamchk -dvv显示的Field行包括有关每列的附加信息:
类型
数据类型。值可能包含以下描述符之一:
常量
所有行具有相同的值。
无末尾空格
不要存储末尾空格。
无末尾空格,非始终
不要存储末尾空格,也不要对所有值进行末尾空格压缩。
无末尾空格,无空值
不要存储末尾空格。不要存储空值。
表查找
该列已转换为ENUM。
零填充(*N*)
值中最重要的*N*字节始终为 0 且不存储。
无零值
不要存储零值。
始终为零
零值使用一位存储。
Huff 树
与列相关的哈夫曼树的编号。
位
哈夫曼树中使用的位数。
运行myisampack后,使用myisamchk重新创建任何索引。此时,您还可以对索引块进行排序,并创建 MySQL 优化器需要的统计信息,以使其更高效地工作:
myisamchk -rq –sort-index –analyze *tbl_name*.MYI
将打包的表安装到 MySQL 数据库目录后,应执行mysqladmin flush-tables以强制mysqld开始使用新表。
要解压缩打包的表,请使用–unpack选项到myisamchk。
6.6.7 mysql_config_editor — MySQL Configuration Utility
原文:dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html
mysql_config_editor 实用程序允许您将身份验证凭据存储在名为.mylogin.cnf的混淆登录路径文件中。在 Windows 上,文件位置是%APPDATA%\\MySQL目录,在非 Windows 系统上是当前用户的主目录。稍后,MySQL 客户端程序可以读取该文件以获取连接到 MySQL 服务器的身份验证凭据。
.mylogin.cnf登录路径文件的未混淆格式由选项组组成,类似于其他选项文件。.mylogin.cnf中的每个选项组称为“登录路径”,这是一个仅允许特定选项的组:host、user、password、port和socket。将登录路径选项组视为一组指定连接到哪个 MySQL 服务器以及以哪个帐户进行身份验证的选项。以下是一个未混淆的示例:
[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost
当您调用客户端程序连接到服务器时,客户端将与其他选项文件一起使用.mylogin.cnf。它的优先级高于其他选项文件,但低于在客户端命令行上明确指定的选项。有关使用选项文件的顺序,请参阅第 6.2.2.2 节“使用选项文件”。
要指定替代的登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。此变量被mysql_config_editor、标准 MySQL 客户端(mysql、mysqladmin等)以及mysql-test-run.pl测试实用程序识别。
程序使用登录路径文件中的组如下:
mysql_config_editor 默认情况下在client登录路径上运行,如果您未指定–login-path=*name*选项来明确指示要使用哪个登录路径。
如果没有–login-path选项,客户端程序将从登录路径文件中读取与从其他选项文件中读取的相同选项组。考虑以下命令:
mysql
默认情况下,mysql客户端从其他选项文件中读取[client]和[mysql]组,因此也从登录路径文件中读取它们。
使用–login-path选项时,客户端程序还会从登录路径文件中读取指定的登录路径。从其他选项文件中读取的选项组保持不变。考虑以下命令:
mysql –login-path=mypath
mysql客户端从其他选项文件中读取[client]和[mysql],以及登录路径文件中的[client]、[mysql]和[mypath]。
即使使用–no-defaults选项,客户端程序也会读取登录路径文件,除非设置了–no-login-paths。这样即使存在–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 表示特定于命令的任何其他选项,例如登录路径名称和在登录路径中使用的值。
命令名称在程序参数集中的位置很重要。例如,这些命令行具有相同的参数,但产生不同的结果:
mysql_config_editor –help set
mysql_config_editor set –help
第一条命令行显示一条一般的mysql_config_editor帮助消息,并忽略set命令。第二条命令行显示特定于set命令的帮助消息。
假设您想要建立一个定义默认连接参数的client登录路径,以及一个名为remote的额外登录路径,用于连接到主机remote.example.com���MySQL 服务器。您想要如下登录:
默认情况下,使用用户名和密码localuser和localpass连接到本地服务器
使用用户名和密码remoteuser和remotepass连接到远程服务器
要在.mylogin.cnf文件中设置登录路径,请使用以下set命令。每个命令都要单独输入一行,并在提示时输入适当的密码:
$> mysql_config_editor set –login-path=client
–host=localhost –user=localuser –password
Enter password: *enter password \”localpass\” here*
$> mysql_config_editor set –login-path=remote
–host=remote.example.com –user=remoteuser –password
Enter password: *enter password \”remotepass\” here*
mysql_config_editor默认使用client登录路径,因此第一个命令可以省略–login-path=client选项而不改变其效果。
要查看mysql_config_editor写入.mylogin.cnf文件的内容,请使用print命令:
$> mysql_config_editor print –all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
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 的选项。
当使用 set 命令与 mysql_config_editor 创建登录路径时,无需指定所有可能的选项值(主机名、用户名、密码、端口、套接字)。只有给定的值会被写入路径。稍后需要的任何缺失值可以在调用客户端路径连接到 MySQL 服务器时指定,无论是在其他选项文件中还是在命令行上。在命令行上指定的任何选项会覆盖登录路径文件或其他选项文件中指定的选项。例如,如果 remote 登录路径中的凭据也适用于主机 remote2.example.com,可以像这样连接到该主机的服务器:
mysql –login-path=remote –host=remote2.example.com
mysql_config_editor 通用选项
mysql_config_editor 支持以下通用选项,可用于在命令行上任何命令名称之前使用。有关特定命令选项的描述,请参见 mysql_config_editor 命令和特定命令选项。
表 6.21 mysql_config_editor 通用选项
选项名称描述–debug写入调试日志–help显示帮助消息并退出–verbose详细模式–version显示版本信息并退出
–help, -?
命令行格式–help显示通用帮助消息并退出。
要查看特定于命令的帮助消息,请按照以下方式调用mysql_config_editor,其中*command*是除help之外的命令:
mysql_config_editor *command* –help
–debug[=*debug_options*], -# *debug_options*
命令行格式–debug[=debug_options]类型字符串默认值d:t:o写入调试日志。典型的*debug_options*字符串是d:t:o,*file_name*。默认值为d:t:o,/tmp/mysql_config_editor.trace。
此选项仅在使用WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。
–verbose, -v
命令行格式–verbose详细模式。打印有关程序执行的更多信息。如果操作没有您期望的效果,此选项可能有助于诊断问题。
–version, -V
命令行格式–version显示版本信息并退出。
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将移除整个登录路径。例如,此命令仅从mypath登录路径中移除user选项,而不是整个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命令允许在命令名称后面使用以下选项:
–help, -?
显示reset命令的帮助信息并退出。
要查��通用帮助信息,请使用mysql_config_editor –help。
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 键。写入登录路径文件的结果包括如下一行:
password =
–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来禁用它。
6.6.8 mysql_migrate_keyring — 密钥迁移实用程序
原文:dev.mysql.com/doc/refman/8.0/en/mysql-migrate-keyring.html
mysql_migrate_keyring实用程序在一个密钥环组件和另一个之间迁移密钥。它支持离线和在线迁移。
像这样调用mysql_migrate_keyring(在一行上输入命令):
mysql_migrate_keyring
–component-dir=*dir_name*
–source-keyring=*name*
–destination-keyring=*name*
[*other options*]
有关密钥迁移的信息以及使用mysql_migrate_keyring和其他方法执行它们的说明,请参见第 8.4.4.14 节,“在密钥环密钥存储之间迁移密钥”。
mysql_migrate_keyring支持以下选项,可以在命令行或选项文件的[mysql_migrate_keyring]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见第 6.2.2.2 节,“使用选项文件”。
表 6.22 mysql_migrate_keyring 选项
选项名称描述引入废弃–component-dir密钥环组件目录–defaults-extra-file除了通常的选项文件外,还读取命名选项文件–defaults-file仅读取命名选项文件–defaults-group-suffix选项组后缀值–destination-keyring目标密钥环组件名称–destination-keyring-configuration-dir目标密钥环组件配置目录–get-server-public-key从服务器请求 RSA 公钥–help显示帮助信息并退出–hostMySQL 服务器所在的主机–login-path从.mylogin.cnf 中读取登录路径选项–no-defaults不读取任何选项文件–online-migration迁移源是活动服务器–password连接到服务器时要使用的密码–port连接的 TCP/IP 端口号–print-defaults打印默认选项–server-public-key-path包含 RSA 公钥的文件路径名–socket要使用的 Unix 套接字文件或 Windows 命名管道–source-keyring源密钥环组件名称–source-keyring-configuration-dir源密钥环组件配置目录–ssl-ca包含受信任的 SSL 证书颁发机构列表的文件–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录–ssl-cert包含 X.509 证书的文件–ssl-cipher连接加密的允许密码–ssl-crl包含证书吊销列表的文件–ssl-crlpath包含证书吊销列表文件的目录–ssl-fips-mode是否在客户端启用 FIPS 模式8.0.34–ssl-key包含 X.509 密钥的文件–ssl-mode与服务器连接的期望安全状态–ssl-session-data包含 SSL 会话数据的文件8.0.29–ssl-session-data-continue-on-failed-reuse如果会话重用失败是否建立连接8.0.29–tls-ciphersuites加密连接的允许的 TLSv1.3 密码套件–tls-version加密连接的允许 TLS 协议–user连接到服务器时要使用的 MySQL 用户名–verbose详细模式–version显示版本信息并退出选项名称描述引入废弃
–help, -h
命令行格式–help显示帮助信息并退出。
–component-dir=*dir_name*
命令行格式–component-dir=dir_name类型目录名存放关键环组件的目录。这通常是本地 MySQL 服务器的plugin_dir系统变量的值。
注意
对于由mysql_migrate_keyring执行的所有关键环迁移操作,–component-dir、–source-keyring和–destination-keyring是强制的。此外,源组件和目标组件必须不同,并且两个组件必须配置正确,以便mysql_migrate_keyring可以加载和使用它们。
–defaults-extra-file=*file_name*
命令行格式–defaults-extra-file=file_name类型文件名在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。
有关此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-file=*file_name*
命令行格式–defaults-file=file_name类型文件名仅使用给定的选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。
例外:即使使用–defaults-file,客户端程序也会读取.mylogin.cnf。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-group-suffix=*str*
命令行格式–defaults-group-suffix=str类型字符串不仅读取通常的选项组,还读取具有通常名称和后缀*str*的组。例如,mysql_migrate_keyring通常会读取[mysql_migrate_keyring]组。如果将此选项给定为–defaults-group-suffix=_other,mysql_migrate_keyring还会读取[mysql_migrate_keyring_other]组。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–destination-keyring=*name*
命令行格式–destination-keyring=name类型字符串用于密钥迁移的目标密钥环组件。选项值的格式和解释与–source-keyring选项描述的相同。
注意
–component-dir,–source-keyring和–destination-keyring对由mysql_migrate_keyring执行的所有密钥环迁移操作都是强制性的。此外,源组件和目标组件必须不同,并且两个组件必须配置正确,以便mysql_migrate_keyring可以加载和使用它们。
–destination-keyring-configuration-dir=*dir_name*
命令行格式–destination-keyring-configuration-dir=dir_name类型目录名称仅当目标密钥环组件全局配置文件包含\”read_local_config\”: true时,此选项才适用,表示组件配置包含在本地配置文件中。选项值指定包含该本地文件的目录。
–get-server-public-key
命令行格式–get-server-public-key类型布尔值从服务器请求用于 RSA 密钥对密码交换所需的公钥。此选项适用于使用caching_sha2_password认证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于不使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。
如果给定–server-public-key-path=*file_name*并指定有效的公钥文件,则优先于–get-server-public-key。
有关caching_sha2_password插件的信息,请参见第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。
–host=*host_name*,-h *host_name*
命令行格式–host=host_name类型字符串默认值localhost当前正在使用其中一个密钥迁移密钥库的运行服务器的主机位置。迁移始终在本地主机上进行,因此该选项始终指定用于连接到本地服务器的值,例如localhost,127.0.0.1,::1或本地主机 IP 地址或主机名。
–login-path=*name*
命令行格式–login-path=name类型字符串从.mylogin.cnf登录路径文件中读取指定登录路径中的选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–no-defaults
命令行格式–no-defaults不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用–no-defaults来防止读取它们。
例外情况是无论何种情况下都会读取.mylogin.cnf文件,如果存在的话。这允许以比在命令行上更安全的方式指定密码,即使使用–no-defaults也是如此。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。请���见 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关此选项和其他选项文件选项的更多信息,请参见 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–online-migration
命令行格式–online-migration类型布尔值默认值FALSE当运行服务器使用密钥环时,此选项是强制性的。它告诉mysql_migrate_keyring执行在线密钥迁移。该选项具有以下效果:
mysql_migrate_keyring 连接到服务器时使用指定的任何连接选项;否则这些选项将被忽略。
在mysql_migrate_keyring连接到服务器后,它告诉服务器暂停密钥环操作。当密钥复制完成后,mysql_migrate_keyring告诉服务器可以在断开连接之前恢复密钥环操作。
–password[=*password*], -p[*password*]
命令行格式–password[=password]类型字符串用于连接到当前使用密钥迁移密钥库的运行服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysql_migrate_keyring会提示输入密码。如果提供了密码选项,则–password=或-p后面必须没有空格。如果未指定密码选项,则默认情况下不发送密码。
在命令行上指定密码应被视为不安全。为了避免在命令行上输入密码,请使用一个选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。
明确指定没有密码,并且mysql_migrate_keyring不应提示密码,使用–skip-password选项。
–port=*port_num*, -P *port_num*
命令行格式–port=port_num类型数值默认值0对于 TCP/IP 连接,用于连接到当前使用其中一个密钥迁移密钥库的运行服务器的端口号。
–print-defaults
命令行格式–print-defaults打印程序名称以及从选项文件获取的所有选项。
有关此选项和其他选项文件选项的附加信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–server-public-key-path=*file_name*
命令行格式–server-public-key-path=file_name类型文件名PEM 格式文件的路径名,其中包含服务器所需的用于 RSA 密钥对密码交换的客户端端公钥的副本。此选项适用于使用sha256_password或caching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,即当客户端使用安全连接连接到服务器时,此选项也将被忽略。
如果给定–server-public-key-path=*file_name*并指定一个有效的公钥文件,则它优先于–get-server-public-key。
对于sha256_password,此选项仅在 MySQL 使用 OpenSSL 构建时适用。
有关sha256_password和caching_sha2_password插件的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔认证”和第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。
–socket=*path*, -S *path*
命令行格式–socket={file_name|pipe_name}类型字符串对于 Unix 套接字文件或 Windows 命名管道连接,用于连接到当前使用其中一个密钥迁移密钥库的运行服务器的套接字文件或命名管道。
在 Windows 上,只有在服务器启动时启用了named_pipe系统变量以支持命名管道连接时,此选项才会生效。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。
–source-keyring=*name*
命令行格式–source-keyring=name类型字符串用于密钥迁移的源密钥环组件。这是指定的组件库文件名,不带任何平台特定扩展名,如.so或.dll。例如,要使用库文件为component_keyring_file.so的组件,请将选项指定为–source-keyring=component_keyring_file。
注意
–component-dir、–source-keyring和–destination-keyring对于由mysql_migrate_keyring执行的所有密钥环迁移操作都是强制性的。此外,源组件和目标组件必须不同,并且两个组件必须正确配置,以便mysql_migrate_keyring可以加载和使用它们。
–source-keyring-configuration-dir=*dir_name*
命令行格式–source-keyring-configuration-dir=dir_name类型目录名称此选项仅在源密钥环组件全局配置文件包含\”read_local_config\”: true时才生效,表示组件配置包含在本地配置文件中。选项值指定包含该本地文件的目录。
–ssl*
以–ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅加密连接的命令选项。
–ssl-fips-mode={OFF|ON|STRICT}
命令行格式–ssl-fips-mode={OFF|ON|STRICT}已弃用8.0.34类型枚举默认值OFF有效值OFF“ON“STRICT控制是否在客户端启用 FIPS 模式。–ssl-fips-mode 选项与其他 –ssl-*xxx* 选项不同,它不用于建立加密连接,而是用于影响允许的加密操作。请参见第 8.8 节,“FIPS 支持”。
允许的–ssl-fips-mode 值为:
OFF:禁用 FIPS 模式。
ON:启用 FIPS 模式。
STRICT:启用“严格” FIPS 模式。
注意
如果 OpenSSL FIPS 对象模块不可用,则–ssl-fips-mode 的唯一允许值是 OFF。在这种情况下,将–ssl-fips-mode 设置为 ON 或 STRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。
从 MySQL 8.0.34 开始,此选项已弃用。预计在将来的 MySQL 版本中将其移除。
–tls-ciphersuites=*ciphersuite_list*
命令行格式–tls-ciphersuites=ciphersuite_list类型字符串用于使用 TLSv1.3 的加密连接的允许的密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
–tls-version=*protocol_list*
命令行格式–tls-version=protocol_list类型字符串默认值TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2(否则)允许的加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
–user=*user_name*, -u *user_name*
命令行格式–user=user_name类型字符串用于连接到当前使用其中一个密钥迁移密钥库的运行服务器的 MySQL 帐户的用户名。
–verbose, -v
命令行格式–verbose详细模式。输出关于程序操作的更多信息。
–version, -V
命令行格式–version显示版本信息并退出。
6.6.9 mysqlbinlog — 用于处理二进制日志文件的实用程序
原文:dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html
6.6.9.1 mysqlbinlog 十六进制转储格式
6.6.9.2 mysqlbinlog 行事件显示
6.6.9.3 使用 mysqlbinlog 备份二进制日志文件
6.6.9.4 指定 mysqlbinlog 服务器 ID
服务器的二进制日志由包含描述数据库内容修改的“事件”的文件组成。服务器以二进制格式编写这些文件。要以文本格式显示它们的内容,请使用mysqlbinlog实用程序。您还可以使用mysqlbinlog来显示由复制设置中的副本服务器写入的中继日志文件的内容,因为中继日志与二进制日志具有相同的格式。有关二进制日志和中继日志的进一步讨论,请参见第 7.4.4 节,“二进制日志”和第 19.2.4 节,“中继日志和复制元数据存储库”。
调用mysqlbinlog的方法如下:
mysqlbinlog [*options*] *log_file* …
例如,要显示名为binlog.000003的二进制日志文件的内容,请使用以下命令:
mysqlbinlog binlog.000003
输出包括binlog.000003中包含的事件。对于基于语句的日志记录,事件信息包括 SQL 语句、执行该语句的服务器 ID、执行语句时的时间戳、花费的时间等。对于基于行的日志记录,事件指示的是行更改而不是 SQL 语句。有关日志记录模式的信息,请参见第 19.2.1 节,“复制格式”。
事件前面有提供额外信息的头部注释。例如:
# at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query 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的输入)以重做日志中的语句。这对于意外服务器退出后的恢复操作非常有用。有关其他用法示例,请参见本节后面的讨论以及第 9.5 节,“时间点(增量)恢复”。要执行mysqlbinlog使用的内部使用BINLOG语句,用户需要BINLOG_ADMIN权限(或已弃用的SUPER权限),或者REPLICATION_APPLIER权限加上��行每个日志事件所需的适当权限。
你可以使用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 完全不会将文件识别为二进制日志文件。有关二进制日志加密的更多信息,请参见 Section 19.3.2, “Encrypting Binary Log Files and Relay Log Files”。
当二进制日志事务负载已经被压缩时,可以从 MySQL 8.0.20 开始执行,mysqlbinlog 版本从该版本开始会自动解压缩和解码事务负载,并将其打印为未压缩事件。旧版本的mysqlbinlog 无法读取压缩的事务负载。当服务器的binlog_transaction_compression系统变量设置为ON时,事务负载会被压缩,然后作为单个事件(Transaction_payload_event)写入服务器的二进制日志文件。使用–verbose选项,mysqlbinlog 添加注释,说明使用的压缩算法,最初接收到的压缩负载大小,以及解压缩后的负载大小。
注意
mysqlbinlog 对于作为压缩事务负载的一部分的单个事件所述的结束位置(end_log_pos)与原始压缩负载的结束位置相同。因此,多个解压缩事件可能具有相同的结束位置。
mysqlbinlog自身的连接压缩如果事务负载已经被压缩,则效果较小,但仍会对未压缩的事务和标头进行操作。
有关二进制日志事务压缩的更多信息,请参见第 7.4.4.5 节,“二进制日志事务压缩”。
运行mysqlbinlog时,针对大型二进制日志,请注意文件系统是否有足够的空间来存储生成的文件。要配置mysqlbinlog用于临时文件的目录,请使用TMPDIR环境变量。
mysqlbinlog 在执行任何 SQL 语句之前将pseudo_replica_mode或pseudo_slave_mode的值设置为 true。此系统变量影响 XA 事务的处理,original_commit_timestamp复制延迟时间戳和original_server_version系统变量以及不受支持的 SQL 模式。
mysqlbinlog 支持以下选项,可以在命令行或选项文件的[mysqlbinlog]和[client]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见第 6.2.2.2 节,“使用选项文件”。
表 6.23 mysqlbinlog ���项
选项名称描述引入废弃–base64-output使用 base-64 编码打印二进制日志条目–bind-address使用指定的网络接口连接到 MySQL 服务器–binlog-row-event-max-size二进制日志最大事件大小–character-sets-dir安装字符集的目录–compress压缩客户端和服务器之间发送的所有信息8.0.178.0.18–compression-algorithms连接到服务器的允许的压缩算法8.0.18–connection-server-id用于测试和调试。有关适用的默认值和其他详细信息,请参阅文本–database仅列出此数据库的条目–debug写入调试日志–debug-check在程序退出时打印调试信息–debug-info在程序退出时打印调试信息、内存和 CPU 统计信息–default-auth要使用的认证插件–defaults-extra-file除了通常的选项文件外,读取指定的命名选项文件–defaults-file仅读取指定的选项文件–defaults-group-suffix选项组后缀值–disable-log-bin禁用二进制日志记录–exclude-gtids不显示提供的 GTID 集合中的任何组–force-if-open即使打开或未正确关闭,也读取二进制日志文件–force-read如果 mysqlbinlog 读取一个无法识别的��进制日志事件,它会打印警告–get-server-public-key从服务器请求 RSA 公钥–help显示帮助消息并退出–hexdump在注释中显示日志的十六进制转储–hostMySQL 服务器所在的主机–idempotent使服务器在仅从此会话处理二进制日志更新时使用幂等模式–include-gtids仅显示提供的 GTID 集合中的组–local-load在指定目录为 LOAD DATA 准备本地临时文件–login-path从.mylogin.cnf 中读取登录路径选项–no-defaults不读取任何选项文件–offset跳过日志中的前 N 个条目–password连接到服务器时使用的密码–plugin-dir安装插件的目录–port连接的 TCP/IP 端口号–print-defaults打印默认选项–print-table-metadata打印表元数据–protocol使用的传输协议–raw将事件以原始(二进制)格式写入输出文件–read-from-remote-master从 MySQL 复制源服务器读取二进制日志,而不是读取本地日志文件8.0.26–read-from-remote-server从 MySQL 服务器读取二进制日志,而不是本地日志文件–read-from-remote-source从 MySQL 复制源服务器读取二进制日志,而不是读取本地日志文件8.0.26–require-row-format要求行级二进制日志格式8.0.19–result-file将输出直接定向到指定文件–rewrite-db在以行格式编写的日志中回放时为数据库创建重写规则。可以多次使用–server-id仅提取由具有给定服务器 ID 的服务器创建的事件–server-id-bits告诉 mysqlbinlog 如何解释二进制日志中的服务器 ID,当日志由将其 server-id-bits 设置为小于最大值的 mysqld 编写时;仅由 MySQL Cluster 版本的 mysqlbinlog 支持–server-public-key-path包含 RSA 公钥的文件路径名–set-charset在输出中添加一个 SET NAMES charset_name 语句–shared-memory-base-name共享内存连接的共享内存名称(仅限 Windows)–short-form仅显示日志中包含的语句–skip-gtids在输出转储文件中不包括二进制日志文件中的 GTID–socket要使用的 Unix 套接字文件或 Windows 命名管道–ssl-ca包含受信任 SSL 证书颁发机构列表的文件–ssl-capath包含受信任 SSL 证书颁发机构证书文件的目录–ssl-cert包含 X.509 证书的文件–ssl-cipher连接加密的允许密码–ssl-crl包含证书吊销列表的文件–ssl-crlpath包含证书吊销列表文件的目录–ssl-fips-mode是否在客户端启用 FIPS 模式8.0.34–ssl-key包含 X.509 密钥的文件–ssl-mode与服务器连接的期望安全状态–ssl-session-data包含 SSL 会话数据的文件8.0.29–ssl-session-data-continue-on-failed-reuse是否在会话重用失败时建立连接8.0.29–start-datetime从时间戳等于或晚于日期时间参数的第一个事件读取二进制日志–start-position从位置等于或大于参数的第一个事件解码二进制日志–stop-datetime在时间戳等于或大于日期时间参数的第一个事件处停止读取二进制日志–stop-never在读取最后一个二进制日志文件后保持与服务器的连接–stop-never-slave-server-id连接到服务器时报告的从服务器 ID–stop-position在位置等于或大于参数的第一个事件处停止解码二进制日志–tls-ciphersuites用于加密连接的允许的 TLSv1.3 密码套件8.0.16–tls-version用于加密连接的允许的 TLS 协议–to-last-log不要在从 MySQL 服务器请求的二进制日志末尾停止,而是继续打印到最后一个二进制日志的末尾–user连接到服务器时要使用的 MySQL 用户名–verbose将行事件重构为 SQL 语句–verify-binlog-checksum验证二进制日志中的校验和–version显示版本信息并退出–zstd-compression-level用于使用 zstd 压缩连接的服务器的压缩级别8.0.18选项名称描述引入废弃
–help,-?
命令行格式–help显示帮助消息并退出。
–base64-output=*value*
命令行格式–base64-output=value类型字符串默认值AUTO有效值AUTO“NEVER“DECODE-ROWS此选项确定何时应使用BINLOG语句将事件显示为经过 base-64 编码的字符串。该选项具有以下可允许的值(不区分大小写):
AUTO(“自动”)或UNSPEC(“未指定”)在必要时自动显示BINLOG语句(即,用于格式描述事件和行事件)。如果没有给出–base64-output选项,则效果与–base64-output=AUTO相同。
注意
如果您打算使用mysqlbinlog的输出重新执行二进制日志文件内容,则自动显示BINLOG是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能生成不包含所有事件的可执行形式的输出。
NEVER导致不显示BINLOG语句。如果发现必须使用BINLOG显示的行事件,则mysqlbinlog将退出并显示错误。
DECODE-ROWS 指定给 mysqlbinlog,你打算将行事件解码并显示为注释的 SQL 语句,同时还要指定 –verbose 选项。与 NEVER 类似,DECODE-ROWS 抑制显示 BINLOG 语句,但与 NEVER 不同的是,如果找到行事件,它不会因错误而退出。
有关 –base64-output 和 –verbose 对行事件输出的影响的示例,请参见第 6.6.9.2 节,“mysqlbinlog 行事件显示”。
–bind-address=*ip_address*
命令行格式–bind-address=ip_address在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的网络接口。
–binlog-row-event-max-size=*N*
命令行格式–binlog-row-event-max-size=#类型数字默认值4294967040最小值256最大值18446744073709547520指定基于行的二进制日志事件的最大大小,以字节为单位。如果可能,将行分组为小于此大小的事件。该值应为 256 的倍数。默认值为 4GB。
–character-sets-dir=*dir_name*
命令行格式–character-sets-dir=dir_name类型目录名称安装字符集的目录。参见第 12.15 节,“字符集配置”。
–compress
命令行格式–compress[={OFF|ON}]引入版本8.0.17已弃用8.0.18类型布尔值默认值OFF尽可能压缩客户端和服务器之间发送的所有信息。参见第 6.2.8 节,“连接压缩控制”。
此选项在 MySQL 8.0.17 版本中添加。截至 MySQL 8.0.18 版本,该选项已被弃用。预计在未来的 MySQL 版本中将会移除。参见配置传统连接压缩。
–compression-algorithms=*value*
命令行格式–compression-algorithms=value引入版本8.0.18类型集合默认值uncompressed有效值zlib“zstd“uncompressed连接到服务器的允许压缩算法。可用算法与protocol_compression_algorithms系统变量相同。默认值为uncompressed。
查看更多信息,请参阅第 6.2.8 节,“连接压缩控制”。
此选项在 MySQL 8.0.18 中添加。
–connection-server-id=*server_id*
命令行格式–connection-server-id=#]类型整数默认值0 (1)最小值0 (1)最大值4294967295–connection-server-id指定mysqlbinlog连接到服务器时报告的服务器 ID。它可用于避免与复制服务器或另一个mysqlbinlog进程的 ID 冲突。
如果指定了–read-from-remote-server选项,mysqlbinlog报告服务器 ID 为 0,告诉服务器在发送最后一个日志文件后断开连接(非阻塞行为)。如果还指定了–stop-never选项以保持与服务器的连接,mysqlbinlog默认报告服务器 ID 为 1 而不是 0,并且如果需要,可以使用–connection-server-id替换该服务器 ID。参见第 6.6.9.4 节,“指定 mysqlbinlog 服务器 ID”。
–database=*db_name*, -d *db_name*
命令行格式–database=db_name类型字符串此选项导致mysqlbinlog输出二进制日志(仅本地日志)中在*db_name*被选择为默认数据库时发生的条目,USE语句。
mysqlbinlog的–database选项类似于mysqld的–binlog-do-db选项,但只能用于指定一个数据库。如果–database被多次给出,只有最后一个实例会被使用。
此选项的效果取决于是否使用基于语句或基于行的日志格式,就像–binlog-do-db的效果取决于是否使用基于语句或基于行的日志一样。
基于语句的日志记录。 –database选项的工作方式如下:
当*db_name是默认数据库时,无论是修改db_name*中的表还是其他数据库中的表,语句都会输出。
除非*db_name被选为默认数据库,否则不会输出语句,即使它们修改了db_name*中的表。
对于CREATE DATABASE、ALTER DATABASE和DROP DATABASE有一个例外。在确定是否输出语句时,被创建、修改或删除的数据库被视为默认数据库。
假设二进制日志是通过使用基于语句记录执行这些语句创建的:
INSERT INTO test.t1 (i) VALUES(100);
INSERT INTO db2.t2 (j) VALUES(200);
USE test;
INSERT INTO test.t1 (i) VALUES(101);
INSERT INTO t1 (i) VALUES(102);
INSERT INTO db2.t2 (j) VALUES(201);
USE db2;
INSERT INTO test.t1 (i) VALUES(103);
INSERT INTO db2.t2 (j) VALUES(202);
INSERT INTO t2 (j) VALUES(203);
mysqlbinlog –database=test 不会输出前两个INSERT语句,因为没有默认数据库。它会输出USE test后面的三个INSERT语句,但不会输出USE db2后面的三个INSERT语句。
mysqlbinlog –database=db2 不会输出前两个INSERT语句,因为没有默认数据库。它不会输出USE test后面的三个INSERT语句,但会输出USE db2后面的三个INSERT语句。
基于行的日志记录。 mysqlbinlog 仅输出更改属于*db_name*的表的条目。默认数据库对此没有影响。假设刚才描述的二进制日志是使用基于行的日志记录而不是基于语句的日志记录创建的。mysqlbinlog –database=test 仅输出修改测试数据库中的t1的条目,无论是否发出了USE或默认数据库是什么。
如果服务器正在以MIXED设置binlog_format运行,并且您希望能够使用mysqlbinlog与–database选项,则必须确保被修改的表位于由USE选择的数据库中。(特别是,不应使用跨数据库更新。)
与–rewrite-db选项一起使用时,–rewrite-db选项首先应用;然后应用–database选项,使用重写后的数据库名称。在提供选项的顺序方面没有任何区别。
–debug[=*debug_options*], -# [*debug_options*]
命令行格式–debug[=debug_options]类型字符串默认值d:t:o,/tmp/mysqlbinlog.trace写入调试日志。典型的*debug_options*字符串是d:t:o,*file_name*。默认值为d:t:o,/tmp/mysqlbinlog.trace。
此选项仅在使用WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。
–debug-check
命令行格式–debug-check类型布尔值默认值FALSE在程序退出时打印一些调试信息。
此选项仅在使用WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。
–debug-info
命令行格式–debug-info类型布尔值默认值FALSE在程序退出时打印调试信息以及内存和 CPU 使用统计信息。
此选项仅在使用WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。
–default-auth=*plugin*
命令行格式–default-auth=plugin类型字符串关于要使用哪个客户端端身份验证插件的提示。请参见第 8.2.17 节,“可插拔身份验证”。
–defaults-extra-file=*file_name*
命令行格式–defaults-extra-file=file_name类型文件名在全局选项文件之后但在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-file=*file_name*
命令行格式–defaults-file=file_name类型文件名仅使用给定的选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。
例外:即使使用–defaults-file,客户端程序也会读取.mylogin.cnf。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-group-suffix=*str*
命令行格式–defaults-group-suffix=str类型字符串不仅读取通常的选项组,还读取具有通常名称和后缀*str*的组。例如,mysqlbinlog通常会读取[client]和[mysqlbinlog]组。如果给定此选项作为–defaults-group-suffix=_other,mysqlbinlog还会读取[client_other]和[mysqlbinlog_other]组。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–disable-log-bin, -D
命令行格式–disable-log-bin禁用二进制日志记录。如果您使用–to-last-log选项并将输出发送到同一 MySQL 服务器,这对于避免无限循环很有用。此选项在意外退出后进行恢复时也很有用,以避免重复记录的语句。
此选项会导致mysqlbinlog在输出中包含一个SET sql_log_bin = 0语句,以禁用剩余输出的二进制日志记录。操纵sql_log_bin系统变量的会话值是一项受限操作,因此此选项要求您具有足够权限设置受限会话变量。请参阅 Section 7.1.9.1, “System Variable Privileges”。
–exclude-gtids=*gtid_set*
命令行格式–exclude-gtids=gtid_set类型字符串默认值不显示*gtid_set*中列出的任何组。
–force-if-open, -F
命令行格式–force-if-open读取二进制日志文件,即使它们是打开的或未正确关闭(IN_USE标志已设置);如果文件以截断事件结束,则不会失败。
IN_USE标志仅针对当前由服务器写入的二进制日志设置;如果服务器崩溃,该标志将保持设置,直到服务器再次启动并恢复二进制日志。没有此选项,mysqlbinlog拒绝处理具有此标志设置的文件。由于服务器可能正在写入文件,因此截断最后一个事件被视为正常。
–force-read, -f
命令行格式–force-read使用此选项,如果mysqlbinlog读取一个无法识别的二进制日志事件,它会打印警告,忽略该事件并继续。如果没有此选项,mysqlbinlog会在读取此类事件时停止。
–get-server-public-key
命令行格式–get-server-public-key类型布尔值从服务器请求用于 RSA 密钥对密码交换的公钥。此选项适用于使用caching_sha2_password认证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于不使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。
如果提供了–server-public-key-path=*file_name*并指定了有效的公钥文件,则它优先于–get-server-public-key。
有关caching_sha2_password插件的信息,请参阅第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。
–hexdump, -H
命令行格式–hexdump在注释中显示日志的十六进制转储,如第 6.6.9.1 节,“mysqlbinlog 十六进制转储格式”所述。十六进制输出对于复制调试可能很有帮助。
–host=*host_name*, -h *host_name*
命令行格式–host=host_name类型字符串默认值localhost从给定主机的 MySQL 服务器获取二进制日志。
–幂等
命令行格式–幂等类型布尔值默认值true告诉 MySQL 服务器在处理更新时使用幂等模式;这会导致服务器在处理更新时遇到当前会话中的任何重复键或找不到键错误时进行抑制。每当需要或必须重放一个或多个二进制日志到可能不包含日志所指数据的 MySQL 服务器时,此选项可能会很有用。
此选项的影响范围仅包括当前的mysqlbinlog客户端和会话。
–include-gtids=*gtid_set*
命令行格式–include-gtids=gtid_set类型字符串默认值仅显示*gtid_set*中列出的组。
–local-load=*dir_name*, -l *dir_name*
命令行格式–local-load=dir_name类型目录名称对应于LOAD DATA语句的数据加载操作,mysqlbinlog从二进制日志事件中提取文件,将它们写入本地文件系统作为临时文件,并写入LOAD DATA LOCAL语句以导入文件。 默认情况下,mysqlbinlog将这些临时文件写入操作系统特定的目录。 可以使用–local-load选项来明确指定mysqlbinlog应准备本地临时文件的目录。
因为其他进程可以将文件写入默认的操作系统特定目录,建议使用–local-load选项来指定mysqlbinlog的不同目录用于数据文件,并在处理来自mysqlbinlog输出时通过指定–load-data-local-dir选项来指定相同目录给mysql。 例如:
mysqlbinlog –local-load=/my/local/data …
| mysql –load-data-local-dir=/my/local/data …
重要提示
这些临时文件不会被mysqlbinlog或任何其他 MySQL 程序自动删除。
–login-path=*name*
命令行格式–login-path=name类型字符串从.mylogin.cnf登录路径文件中读取指定登录路径中的选项。 “登录路径”是一个包含指定要连接的 MySQL 服务器和要进行身份验证的帐户的选项的选项组。 要创建或修改登录路径文件,请使用mysql_config_editor实用程序。 请参阅第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关此选项文件选项和其他选项的其他信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–no-defaults
命令行格式–no-defaults不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用–no-defaults来防止读取它们。
例外情况是无论何种情况下都会读取.mylogin.cnf文件,如果存在的话。这允许以比在命令行上更安全的方式指定密码,即使使用了–no-defaults。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关此选项文件选项和其他选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–offset=*N*, -o *N*
命令行格式–offset=#类型数字跳过日志中的第*N*条目。
–open-files-limit=*N*
命令行格式–open-files-limit=#类型数字默认值8最小值1最大值[依赖于平台]指定要保留的打开文件描述符的数量。
–password[=*password*], -p[*password*]
命令行格式–password[=password]类型字符串用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlbinlog会提示输入密码。如果提供了密码,则–password=或-p后面不能有空格。如果未指定密码选项,则默认不发送密码。
在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用一个选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysqlbinlog不应提示输入密码,请使用–skip-password选项。
–plugin-dir=*dir_name*
命令行格式–plugin-dir=dir_name类型目录名称查找插件的目录。如果使用–default-auth选项指定身份验证插件但mysqlbinlog找不到它,请指定此选项。请参阅第 8.2.17 节,“可插拔认证”。
–port=*port_num*, -P *port_num*
命令行格式–port=port_num类型数值默认值3306用于连接到远程服务器的 TCP/IP 端口号。
–print-defaults
命令行格式–print-defaults打印程序名称以及从选项文件获取的所有选项。
有关此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–print-table-metadata
命令行格式–print-table-metadata从二进制日志中打印与表相关的元数据。使用binlog-row-metadata配置二进制日志中记录的表相关元数据的数量。
–protocol={TCP|SOCKET|PIPE|MEMORY}
命令行格式–protocol=type类型字符串默认值[查看文本]有效值TCP“SOCKET“PIPE“MEMORY用于连接到服务器的传输协议。当其他连接参数通常导致使用您不想要的协议时,这很有用。有关允许值的详细信息,请参见第 6.2.7 节,“连接传输协议”。
–raw
命令行格式–raw类型布尔值默认值FALSE默认情况下,mysqlbinlog 读取二进制日志文件并以文本格式写入事件。–raw 选项告诉 mysqlbinlog 以原始二进制格式写入它们。其使用需要同时使用 –read-from-remote-server,因为文件是从服务器请求的。mysqlbinlog 为从服务器读取的每个文件写入一个输出文件。–raw 选项可用于备份服务器的二进制日志。使用 –stop-never 选项,备份是“实时”的,因为 mysqlbinlog 保持与服务器的连接。默认情况下,输出文件写入当前目录,与原始日志文件具有相同的名称。可以使用 –result-file 选项修改输出文件名。有关更多信息,请参见 Section 6.6.9.3, “Using mysqlbinlog to Back Up Binary Log Files”。
–read-from-remote-source=*type*
命令行格式–read-from-remote-source=type引入版本8.0.26从 MySQL 8.0.26 开始,使用 –read-from-remote-source,在 MySQL 8.0.26 之前,使用 –read-from-remote-master。这两个选项具有相同的效果。这些选项通过将选项值设置为 BINLOG-DUMP-NON-GTIDS 或 BINLOG-DUMP-GTIDS,使用 COM_BINLOG_DUMP 或 COM_BINLOG_DUMP_GTID 命令从 MySQL 服务器读取二进制日志。如果 –read-from-remote-source=BINLOG-DUMP-GTIDS 或 –read-from-remote-master=BINLOG-DUMP-GTIDS 与 –exclude-gtids 结合使用,可以在源端过滤事务,避免不必要的网络流量。
连接参数选项与这些选项或–read-from-remote-server选项一起使用。这些选项是–host、–password、–port、–protocol、–socket和–user。如果没有指定任何远程选项,则连接参数选项将被忽略。
使用这些选项需要REPLICATION SLAVE权限。
–read-from-remote-master=*type*
命令行格式–read-from-remote-master=type已弃用8.0.26在 MySQL 8.0.26 之前,请使用此选项,而不是–read-from-remote-source。这两个选项具有相同的效果。
–read-from-remote-server=*file_name*, -R
命令行格式–read-from-remote-server=file_name从 MySQL 服务器读取二进制日志,而不是读取本地日志文件。此选项要求远程服务器正在运行。它仅适用于远程服务器上的二进制日志文件,而不适用于中继日志文件。它接受二进制日志文件名(包括数字后缀),不包括文件路径。
连接参数选项与此选项或–read-from-remote-master选项一起使用。这些选项是–host、–password、–port、–protocol、–socket和–user。如果没有指定任何远程选项,则连接参数选项将被忽略。
使用此选项需要REPLICATION SLAVE权限。
此选项类似于–read-from-remote-master=BINLOG-DUMP-NON-GTIDS。
–result-file=*name*, -r *name*
命令行格式–result-file=name没有使用–raw选项,此选项表示mysqlbinlog写入文本输出的文件。使用–raw,mysqlbinlog为从服务器传输的每个日志文件写入一个二进制输出文件,默认情况下将它们写入当前目录,使用与原始日志文件相同的名称。在这种情况下,–result-file选项值被视为修改输出文件名的前缀。
–require-row-format
命令行格式–require-row-format引入版本8.0.19类型布尔值默认值false要求事件使用基于行的二进制日志格式。此选项强制mysqlbinlog输出使用基于行的复制事件。使用此选项生成的事件流将被使用REQUIRE_ROW_FORMAT选项的CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前)保护的复制通道接受。必须在写入二进制日志的服务器上设置binlog_format=ROW。当指定此选项时,mysqlbinlog在遇到任何不符合REQUIRE_ROW_FORMAT限制的事件时会停止,并打印错误消息,包括LOAD DATA INFILE指令,创建或删除临时表,INTVAR,RAND或USER_VAR事件,以及在 DML 事务中的非基于行的事件。mysqlbinlog还会在输出开头打印一个SET @@session.require_row_format语句,以在执行输出时应用限制,并不打印SET @@session.pseudo_thread_id语句。
此选项在 MySQL 8.0.19 中添加。
–rewrite-db=\’*from_name*->*to_name*\’
命令行格式–rewrite-db=\’oldname->newname\’类型字符串默认值[none]当从基于行或基于语句的日志中读取时,请将所有出现的*from_name重写为to_name*。对于基于行的日志,重写是在行上进行的,对于基于语句的日志,重写是在USE子句上进行的。
警告
使用此选项时,带有数据库名称限定的表名的语句不会被重写以使用新名称。
作为此选项值的重写规则是一个字符串,其形式为\’*from_name*->*to_name*\’,如前所示,因此必须用引号括起来。
要使用多个重写规则,请多次指定该选项,如下所示:
mysqlbinlog –rewrite-db=\’dbcurrent->dbold\’ –rewrite-db=\’dbtest->dbcurrent\’ \\
binlog.00001 > /tmp/statements.sql
与 –database 选项一起使用时,–rewrite-db 选项首先应用;然后使用重写后的数据库名称应用 –database 选项。在这方面,提供选项的顺序不会有任何影响。
这意味着,例如,如果使用 –rewrite-db=\’mydb->yourdb\’ –database=yourdb 启动 mysqlbinlog,那么所有对数据库 mydb 和 yourdb 中任何表的更新都包含在输出中。另一方面,如果使用 –rewrite-db=\’mydb->yourdb\’ –database=mydb 启动,则 mysqlbinlog 根本不输出任何语句:因为所有对 mydb 的更新首先被重写为对 yourdb 的更新,然后应用 –database 选项,因此没有与 –database=mydb 匹配的更新。
–server-id=*id*
命令行格式–server-id=id类型数字仅显示由具有给定服务器 ID 的服务器创建的事件。
–server-id-bits=*N*
命令行格式–server-id-bits=#类型数字默认值32最小值7最大值32仅使用server_id的前 N 位来标识服务器。如果二进制日志是由将 server-id-bits 设置为小于 32 并且用户数据存储在最高位的 mysqld 写入的,则运行 mysqlbinlog 并将 –server-id-bits 设置为 32 可以查看此数据。
此选项仅由 NDB Cluster 分发的 mysqlbinlog 版本或带有 NDB Cluster 支持构建的版本支持。
–server-public-key-path=*file_name*
命令行格式–server-public-key-path=file_name类型文件名以 PEM 格式包含服务器所需的公钥的客户端端副本的文件路径名,用于基于 RSA 密钥对的密码交换。此选项适用于使用sha256_password或caching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。
如果提供了–server-public-key-path=*file_name*并指定了有效的公钥文件,则它优先于–get-server-public-key。
对于sha256_password,此选项仅在 MySQL 使用 OpenSSL 构建时适用。
有关sha256_password和caching_sha2_password插件的信息,请参见 Section 8.4.1.3, “SHA-256 Pluggable Authentication”和 Section 8.4.1.2, “Caching SHA-2 Pluggable Authentication”。
–set-charset=*charset_name*
命令行格式–set-charset=charset_name类型字符串向输出添加一个SET NAMES *charset_name*语句,指定用于处理日志文件的字符集。
–shared-memory-base-name=*name*
命令行格式–shared-memory-base-name=name平台特定Windows在 Windows 上,用于使用共享内存连接到本地服务器的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。
仅当服务器启用了shared_memory系统变量以支持共享内存连接时,此选项才适用。
–short-form, -s
命令行格式–short-form仅显示日志中包含的语句,不包含任何额外信息或基于行的事件。仅用于测试,不应在生产系统中使用。已弃用,预计将在将来的版本中删除。
–skip-gtids[=(true|false)]
命令行格式–skip-gtids[=true|false]类型布尔值默认值false不要在输出转储文件中包含二进制日志文件中的 GTIDs。例如:
mysqlbinlog –skip-gtids binlog.000001 > /tmp/dump.sql
mysql -u root -p -e \”source /tmp/dump.sql\”
通常不应在生产环境或恢复中使用此选项,除非在特定且罕见的情况下不需要 GTID。例如,管理员可能希望从一个部署复制选定的事务(如表定义)到另一个不相关的部署,该部署不会与原始部署进行复制。在这种情况下,–skip-gtids 可用于使管理员能够将事务应用为新事务,并确保部署保持不相关。但是,只有在 GTID 的包含对您的用例造成已知问题时才应使用此选项。
–socket=*路径*, -S *路径*
命令行格式–socket={file_name|pipe_name}类型字符串对于连接到 localhost 的连接,使用的 Unix 套接字文件,或者在 Windows 上使用的命名管道的名称。
在 Windows 上,此选项仅在服务器启动时启用了支持命名管道连接的 named_pipe 系统变量时才适用。此外,进行连接的用户必须是由 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。
–ssl*
以–ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅加密连接的命令选项。
–ssl-fips-mode={OFF|ON|STRICT}
命令行格式–ssl-fips-mode={OFF|ON|STRICT}弃用8.0.34类型枚举默认值OFF有效值OFF“ON“STRICT控制是否在客户端端启用 FIPS 模式。–ssl-fips-mode 选项与其他 –ssl-*xxx* 选项不同,它不用于建立加密连接,而是影响允许哪些加密操作。请参阅第 8.8 节,“FIPS 支持”。
允许使用以下 –ssl-fips-mode 值:
OFF: 禁用 FIPS 模式。
ON: 启用 FIPS 模式。
STRICT: 启用“严格” FIPS 模式。
注意
如果 OpenSSL FIPS 对象模块不可用,则 –ssl-fips-mode 的唯一允许值为 OFF。在这种情况下,将 –ssl-fips-mode 设置为 ON 或 STRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。
从 MySQL 8.0.34 开始,此选项已弃用。预计在将来的 MySQL 版本中将其移除。
–start-datetime=*datetime*
命令行格式–start-datetime=datetime类型日期时间从第一个具有时间戳等于或晚于 datetime 参数的事件开始读取二进制日志。datetime 值相对于运行 mysqlbinlog 的机器上的本地时区。该值应为 DATETIME 或 TIMESTAMP 数据类型接受的格式。例如:
mysqlbinlog –start-datetime=\”2005-12-25 11:25:56\” binlog.000003
此选项对于点对点恢复很有用。请参阅 第 9.5 节,“时点(增量)恢复” Recovery\”)。
–start-position=*N*, -j *N*
命令行格式–start-position=#类型数值从日志位置 N 开始解码二进制日志,将输出任何从位置 N 或之后开始的事件。该位置是日志文件中的字节位置,而不是事件计数器;它需要指向一个事件的起始位置才能生成有用的输出。此选项适用于命令行中命名的第一个日志文件。
在 MySQL 8.0.33 之前,此选项支持的最大值为 4294967295(2³²-1)。在 MySQL 8.0.33 及更高版本中,除非也使用 –read-from-remote-server 或 –read-from-remote-source,否则最大值为 18446744073709551616(2⁶⁴-1)。
此选项对于点对点恢复很有用。请参阅 第 9.5 节,“时点(增量)恢复” Recovery\”)。
–stop-datetime=*datetime*
命令行格式–stop-datetime=datetime在第一个具有时间戳等于或晚于 datetime 参数的事件处停止读取二进制日志。有关 datetime 值的信息,请参阅 –start-datetime 选项的描述。
此选项对于点对点恢复很有用。请参阅 第 9.5 节,“时点(增量)恢复” Recovery\”)。
–stop-never
命令行格式–stop-never类型布尔值默认值FALSE此选项与–read-from-remote-server一起使用。它告诉mysqlbinlog保持与服务器的连接。否则,当最后一个日志文件从服务器传输时,mysqlbinlog将退出。–stop-never意味着–to-last-log,因此只需要在命令行上命名要传输的第一个日志文件。
–stop-never通常与–raw一起用于进行实时二进制日志备份,但也可以在不使用–raw的情况下使用,以保持服务器生成的日志事件的连续文本显示。
使用–stop-never,默认情况下,mysqlbinlog在连接到服务器时报告服务器 ID 为 1。使用–connection-server-id来明确指定要报告的替代 ID。这可用于避免与复制服务器或另一个mysqlbinlog进程的 ID 冲突。参见第 6.6.9.4 节,“指定 mysqlbinlog 服务器 ID”。
–stop-never-slave-server-id=*id*
命令行格式–stop-never-slave-server-id=#类型数字默认值65535最小值1此选项已被弃用;预计将在将来的版本中删除。请改用–connection-server-id选项来指定mysqlbinlog报告的服务器 ID。
–stop-position=*N*
命令行格式–stop-position=#类型数字在日志位置 N 处停止解码二进制日志,从输出中排除从位置 N 开始的任何事件。该位置是日志文件中的一个字节点,而不是事件计数器;它需要指向最后要包含在输出中的事件的起始位置之后的位置。从位置 N 开始并在位置 N 或之后结束的事件是要处理的最后一个事件。此���项适用于命令行上命名的最后一个日志文件。
此选项对于点对点恢复很有用。请参见第 9.5 节,“时点恢复(增量恢复)”。
–tls-ciphersuites=*ciphersuite_list*
命令行格式–tls-ciphersuites=ciphersuite_list引入版本8.0.16类型字符串使用 TLSv1.3 的加密连接的可接受的密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
–tls-version=*protocol_list*
命令行格式–tls-version=protocol_list类型字符串默认值(≥ 8.0.16)TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2(否则)默认值(≤ 8.0.15)TLSv1,TLSv1.1,TLSv1.2加密连接的可接受的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
–to-last-log, -t
命令行格式–to-last-log不要在从 MySQL 服务器请求的二进制日志的末尾停止,而是继续打印直到最后一个二进制日志的末尾。如果将输出发送到同一台 MySQL 服务器,则可能导致无限循环。此选项需要–read-from-remote-server。
–user=*user_name*, -u *user_name*
命令行格式–user=user_name,类型字符串连接到远程服务器时要使用的 MySQL 帐户的用户名。
如果您在 MySQL 8.0.31 或更高版本中使用 Rewriter 插件,则应授予该用户SKIP_QUERY_REWRITE 权限。
–verbose, -v
命令行格式–verbose重建行事件并将其显示为带有表分区信息的注释 SQL 语句。如果此选项被传入两次(通过\”-vv\”或\”–verbose –verbose\”),输出将包括注释以指示列数据类型和一些元数据,以及信息日志事件,如binlog_rows_query_log_events系统变量设置为TRUE时的行查询日志事件。
有关–base64-output和–verbose对行事件输出的影响的示例,请参见第 6.6.9.2 节,“mysqlbinlog 行事件显示”。
–verify-binlog-checksum, -c
命令行格式–verify-binlog-checksum验证二进制日��文件中的校验和。
–version, -V
命令行格式–version显示版本信息并退出。
与 MySQL 先前版本不同,使用此选项时mysqlbinlog显示的版本号与 MySQL 服务器版本相同。
–zstd-compression-level=*level*
命令行格式–zstd-compression-level=#引入版本8.0.18类型整数用于使用zstd压缩算法连接到服务器的压缩级别。允许的级别为 1 到 22,较大的值表示较高级别的压缩。默认的zstd压缩级别为 3。压缩级别设置对不使用zstd压缩的连接没有影响。
更多信息,请参见第 6.2.8 节,“连接压缩控制”。
此选项在 MySQL 8.0.18 中添加。
你可以将mysqlbinlog的输出导入到mysql客户端中,以执行二进制日志中包含的事件。这种技术用于在出现意外退出时从旧备份中恢复(参见第 9.5 节,“时间点(增量)恢复”)。例如:
mysqlbinlog binlog.000001 | mysql -u root -p
或者:
mysqlbinlog binlog.[0-9]* | mysql -u root -p
如果mysqlbinlog生成的语句可能包含BLOB值,当mysql处理它们时可能会出现问题。在这种情况下,使用–binary-mode选项调用mysql。
如果需要先修改语句日志(例如删除某些不想执行的语句),还可以将mysqlbinlog的输出重定向到文本文件。编辑文件后,通过将其作为输入传递给mysql程序来执行其中包含的语句:
mysqlbinlog binlog.000001 > tmpfile
… *edit tmpfile* …
mysql -u root -p < tmpfile
当使用–start-position选项调用mysqlbinlog时,它仅显示二进制日志中偏移大于或等于给定位置的事件(给定位置必须与一个事件的开始匹配)。它还具有在看到具有给定日期和时间的事件时停止和开始的选项。这使您可以使用–stop-datetime选项执行时间点恢复(例如,能够说“将我的数据库回滚到今天上午 10:30 的状态”)。
处理多个文件。 如果您有多个二进制日志要在 MySQL 服务器上执行,安全的方法是使用单个连接处理它们。以下是一个示例,演示了可能是不安全的情况:
mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
使用多个连接到服务器处理二进制日志会导致问题,如果第一个日志文件包含一个CREATE TEMPORARY TABLE语句,而第二个日志包含使用临时表的语句。当第一个mysql进程终止时,服务器会删除临时表。当第二个mysql进程尝试使用该表时,服务器会报告“未知表”。
为避免这样的问题,使用一个单一的 mysql 进程执行您想要处理的所有二进制日志的内容。以下是一种方法:
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
另一种方法是将所有日志写入单个文件,然后处理该文件:
mysqlbinlog binlog.000001 > /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
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 能力。 请参阅 第 8.1.6 节,“LOAD DATA LOCAL 的安全注意事项”。
警告
为 LOAD DATA LOCAL 语句创建的临时文件 不会 自动删除,因为直到您实际执行这些语���之前都需要它们。 在您不再需要语句日志后,应自行删除临时文件。 这些文件可以在临时文件目录中找到,名称类似 original_file_name-#-#。
#以上关于MySQL8 中文参考(十四)的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92463.html