MySQL8 中文参考(十四)
原文:
dev.mysql.com/doc/refman/8.0/en/myisamchk-other-options.html
6.6.4.4 其他 myisamchk 选项
myisamchk支持以下选项,用于除表检查和修复之外的操作:
-
--analyze,-a命令行格式 --analyze分析关键值的分布。这通过使连接优化器更好地选择连接表的顺序和应该使用的索引来提高连接性能。要获取关于关键分布的信息,请使用myisamchk --description --verbose
tbl_name命令或SHOW INDEX FROM *tbl_name*语句。 -
--block-search=*offset*,-b *offset*命令行格式 --block-search=offset类型 数字 查找给定偏移处块所属的记录。
-
命令行格式 --description打印有关表的一些描述性信息。指定
--verbose选项一次或两次会产生额外信息。参见第 6.6.4.5 节,“使用 myisamchk 获取表信息”。 -
--set-auto-increment[=*value*],-A[*value*]强制
AUTO_INCREMENT为新记录的编号从给定值开始(如果存在AUTO_INCREMENT值大于此值的现有记录,则从更高值开始)。如果未指定*value*,则新记录的AUTO_INCREMENT编号从表中当前最大值加一开始。 -
--sort-index,-S命令行格式 --sort-index按高低顺序对索引树块进行排序。这优化了查找并使使用索引的表扫描更快。
-
--sort-records=*N*,-R *N*命令行格式 --sort-records=#类型 数字 根据特定索引对记录进行排序。这使您的数据更加本地化,并可能加快使用此索引的基于范围的
SELECT和ORDER BY操作的速度。(第一次使用此选项对表进行排序时可能会非常慢。)要确定表的��引编号,请使用SHOW INDEX,它以myisamchk看到的相同顺序显示表的索引。索引从 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 表的名称,也可以是其索引文件的名称,如第 6.6.4 节,“myisamchk — MyISAM Table-Maintenance Utility”中所述。可以提供多个 tbl_name 参数。
假设名为 person 的表具有以下结构。(包含 MAX_ROWS 表选项,以便在稍后显示的myisamchk 示例输出中,某些值较小且更容易适应输出格式。)
CREATE TABLE person
(
id INT NOT NULL AUTO_INCREMENT,
last_name VARCHAR(20) NOT NULL,
first_name VARCHAR(20) NOT NULL,
birth DATE,
death DATE,
PRIMARY KEY (id),
INDEX (last_name, first_name),
INDEX (birth)
) MAX_ROWS = 1000000 ENGINE=MYISAM;
假设表具有以下数据和索引文件大小:
-rw-rw---- 1 mysql mysql 9347072 Aug 19 11:47 person.MYD
-rw-rw---- 1 mysql mysql 6066176 Aug 19 11:47 person.MYI
myisamchk -dvv 输出示例:
MyISAM file: person
Record format: Packed
Character set: utf8mb4_0900_ai_ci (255)
File-version: 1
Creation time: 2017-03-30 21:21:30
Status: checked,analyzed,optimized keys,sorted index pages
Auto increment key: 1 Last value: 306688
Data records: 306688 Deleted blocks: 0
Datafile parts: 306688 Deleted data: 0
Datafile pointer (bytes): 4 Keyfile pointer (bytes): 3
Datafile length: 9347072 Keyfile length: 6066176
Max datafile length: 4294967294 Max keyfile length: 17179868159
Recordlength: 54
table description:
Key Start Len Index Type Rec/key Root Blocksize
1 2 4 unique long 1 1024
2 6 80 multip. varchar prefix 0 1024
87 80 varchar 0
3 168 3 multip. uint24 NULL 0 1024
Field Start Length Nullpos Nullbit Type
1 1 1
2 2 4 no zeros
3 6 81 varchar
4 87 81 varchar
5 168 3 1 1 no zeros
6 171 3 1 2 no zeros
myisamchk 生成的信息类型解释在此处。 “Keyfile” 指的是索引文件。“Record” 和 “row” 是同义词,同样,“field” 和 “column” 也是。
表描述的初始部分包含这些值:
-
MyISAM 文件MyISAM(索引)文件的名称。 -
记录格式用于存储表行的格式。前面的示例使用
固定长度。其他可能的值包括压缩和打包。(打包对应于SHOW TABLE STATUS报告的动态。) -
字符集表的默认字符集。
-
文件版本MyISAM格式的版本。始终为 1。 -
创建时间数据文件创建时间。
-
恢复时间上次重建索引/数据文件的时间。
-
状态表状态标志。可能的值为
崩溃、打开、更改、分析、优化键和排序索引页。 -
自增键,最后值与表的
AUTO_INCREMENT列相关联的键号,以及此列的最近生成的值。如果没有这样的列,则不显示这些字段。 -
数据记录表中的行数。
-
已删除块有多少已删除块仍然保留空间。您可以优化表以最小化此空间。请参阅第 9.6.4 节,“MyISAM 表优化”。
-
数据文件部分对于动态行格式,这表示有多少数据块。对于没有碎片行的优化表,这与
数据记录相同。 -
已删除数据有多少字节的未回收删除数据。您可以优化表以最小化此空间。请参阅第 9.6.4 节,“MyISAM 表优化”。
-
数据文件指针数据文件指针的大小,以字节为单位。通常为 2、3、4 或 5 字节。大多数表使用 2 字节,但目前无法从 MySQL 控制。对于固定表,这是一个行地址。对于动态表,这是一个字节地址。
-
键文件指针索引文件指针的大小,以字节为单位。通常为 1、2 或 3 字节。大多数表使用 2 字节,但 MySQL 会自动计算。它始终是一个块地址。
-
最大数据文件长度表数据文件可以变得多长,以字节为单位。
-
最大键文件长度表索引文件可以变得多长,以字节为单位。
-
记录长度每行占用多少空间,以字节为单位。
输出的表描述部分包括表中所有键的列表。对于每个键,myisamchk显示一些低级信息:
-
键此键的编号。仅对键的第一列显示此值。如果缺少此值,则该行对应于多列键的第二列或更高列。对于示例中显示的表,第二个索引有两行
表描述。这表示它是一个具有两部分的多部分索引。 -
开始此索引部分在行中的起始位置。
-
长度此部分索引的长度。对于压缩数字,这应始终是列的完整长度。对于字符串,它可能比索引列的完整长度短,因为可以索引字符串列的前缀。多部分键的总长度是所有关键部分的
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 的行中显示。这就是为什么person表有五列,但有六行Field行的原因。 -
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与列关联的 Huffman 树的编号。
-
Bits在 Huffman 树中使用的位数。
如果表已使用myisampack进行压缩,则显示Huff tree和Bits字段。参见第 6.6.6 节,“myisampack — 生成压缩的只读 MyISAM 表”,了解此信息的示例。
myisamchk -eiv输出示例:
Checking MyISAM file: person
Data records: 306688 Deleted blocks: 0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key: 1: Keyblocks used: 98% Packed: 0% Max levels: 3
- check data record references index: 2
Key: 2: Keyblocks used: 99% Packed: 97% Max levels: 3
- check data record references index: 3
Key: 3: Keyblocks used: 98% Packed: -14% Max levels: 3
Total: Keyblocks used: 98% Packed: 89%
- check records and index references
**** LOTS OF ROW NUMBERS DELETED ****
Records: 306688 M.recordlength: 25 Packed: 83%
Recordspace used: 97% Empty space: 2% Blocks/Record: 1.00
Record blocks: 306688 Delete blocks: 0
Record data: 7934464 Deleted data: 0
Lost space: 256512 Linkdata: 1156096
User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)
myisamchk -eiv输出包括以下信息:
-
数据记录表中的行数。
-
已删除块有多少已删除的块仍然保留了空间。您可以优化表以最小化此空间。参见第 9.6.4 节,“MyISAM 表优化”。
-
键键号。
-
已使用键块使用的键块的百分比。当表刚刚使用myisamchk重新组织时,值非常高(非常接近理论最大值)。
-
压缩MySQL 尝试压缩具有共同后缀的键值。这仅适用于
CHAR和VARCHAR列上的索引。对于具有相似左侧部分的长索引字符串,这可以显着减少使用的空间。在前面的示例中,第二个键长 40 字节,实现了 97%的空间减少。 -
最大级别此键的 B 树有多深。具有长键值的大表会获得较高的值。
-
记录表中有多少行。
-
M.recordlength平均行长度。对于具有固定长度行的表,这是确切的行长度,因为所有行长度相同。
-
压缩MySQL 从字符串末尾删除空格。
压缩值指示通过执行此操作实现的节省百分比。 -
已使用记录空间数据文件中已使用的百分比。
-
空间数据文件中未使用的百分比。
-
块/记录每行的平均块数(即,一个碎片化行由多少个链接组成)。对于固定格式表,这总是 1.0。此值应尽可能接近 1.0。如果值过大,您可以重新组织表。参见第 9.6.4 节,“MyISAM 表优化”。
-
记录块使用了多少块(链接)。对于固定格式表,这与行数相同。
-
删除块已删除(未使用)的块(链接)数。
-
记录数据数据文件中已使用的字节数。
-
已删除数据数据文件中已删除(未使用)的字节数。
-
丢失空间如果将行更新为较短长度,则会丢失一些空间。这是所有此类损���的总和,以字节为单位。
-
链接数据当使用动态表格式时,行片段通过指针(每个 4 到 7 个字节)连接。
Linkdata是所有这些指针使用的存储量的总和。
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*指定)。以下公式给出所需空间的量:(*largest_key* + *row_pointer_length*) * *number_of_rows* * 2你可以使用**myisamchk -dv
tbl_name**来检查键的长度和row_pointer_length(参见第 6.6.4 节,“使用 myisamchk 获取表信息”)。*row_pointer_length和number_of_rows的值分别是表描述中的Datafile pointer和Data records值。要确定largest_key*的值,请检查表描述中的Key行。Len列指示每个键部分的字节数。对于多列索引,键大小是所有键部分的Len值之和。
如果在修复过程中遇到磁盘空间问题,你可以尝试使用--safe-recover代替--recover。
6.6.5 myisamlog — 显示 MyISAM 日志文件内容
myisamlog 处理 MyISAM 日志文件的内容。要创建这样一个文件,请使用 --log-isam=log_file`` 选项启动服务器。
像这样调用 myisamlog:
myisamlog [*options*] [*file_name* [*tbl_name*] ...]
默认操作是更新 (-u)。如果执行恢复操作 (-r),则会执行所有写入操作,可能还包括更新和删除操作,并且只计算错误。如果没有给出 log_file 参数,则默认日志文件名为 myisam.log。如果在命令行上命名了表,则只更新这些表。
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显示版本信息。
6.6.6 myisampack — 生成压缩的只读 MyISAM 表
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
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=mypathmysql客户端从其他选项文件中读取
[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=mypathremove命令允许在命令名称后面使用以下选项:-
--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 | 显示帮助信息并退出 | ||
| --host | MySQL 服务器所在的主机 | ||
| --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 — 用于处理二进制日志文件的实用程序
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.17 | 8.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 | 在注释中显示日志的十六进制转储 | ||
| --host | MySQL 服务器所在的主机 | ||
| --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]类型 布尔值 默认值 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-#-#。