设为首页收藏本站 JeeStudy企业开发官网①

JEE Study|JAVA EE|企业级开发学习网

 找回密码
 立即加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1651|回复: 0
打印 上一主题 下一主题

MySQL8.0大师之路:第10章:MySQL程序详解-10.4 管理和工具程序

[复制链接]

219

主题

221

帖子

1418

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1418

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

跳转到指定楼层
楼主
发表于 2020-4-6 20:37:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.ibd2sdi — InnoDB表空间SDI提取实用程序  (就是用来查看数据库表 xxx.ibd 的底层(元数据)信息)
ibd2sdi是一个用于从InnoDB表空间文件中提取 序列化字典信息(serialized dictionary information,SDI)的实用程序。所有持久性InnoDB表空间文件中都存在SDI数据。
ibd2sdi可以在 file-per-table 表空间文件(* .ibd文件),常规表空间(general tablespace)文件(* .ibd文件),系统表空(system tablespace)间文件(ibdata *文件)和数据字典表空间(data dictionary tablespace)(mysql.ibd)上运行。不支持将其与临时表空间或撤消表空间一起使用。
ibd2sdi可以在运行时或服务器脱机时使用。在与SDI相关的DDL操作,ROLLBACK操作和撤消日志清除操作期间,ibd2sdi无法读取存储在表空间中的SDI数据的时间间隔可能很短。
ibd2sdi从指定的表空间执行未提交的SDI读取。无法访问重做日志和撤消日志。
像这样调用ibd2sdi实用程序:

shell> ibd2sdi [options] file_name1 [file_name2 file_name3 ...]

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

shell> ibd2sdi ibdata1 ibdata2

多文件表空间的文件必须按照升序页码的顺序指定。如果两个连续的文件具有相同的空间ID,则后一个文件必须以前一个文件的最后页号+ 1开头。
ibd2sdi以JSON格式输出SDI(包含id,type和data字段)。

2.innochecksum —脱机InnoDB文件校验和实用程序 (这个程序必须脱机使用)
    innochecksum打印InnoDB文件的校验和。该工具读取InnoDB表空间文件,计算每个页面的校验和,将计算出的校验和与存储的校验和进行比较,并报告不匹配项,以指示损坏的页面。它最初是为加速断电后验证表空间文件的完整性而开发的,但也可以在文件复制后使用。因为校验和不匹配会导致InnoDB故意关闭正在运行的服务器,所以最好使用此工具,而不是等待生产中的服务器遇到损坏的页面。
    innochecksum不能用于服务器已打开的表空间文件。对于此类文件,应使用CHECK TABLE来检查表空间中的表。尝试在服务器已打开的表空间上运行innochecksum,将导致“无法锁定文件”错误。
    如果发现校验和不匹配,通常可以从备份中还原表空间或启动服务器,然后尝试使用mysqldump对表空间中的表进行备份。
像这样调用innochecksum:

shell> innochecksum [options] file_name

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

3.myisam_ftdump —显示全文索引信息
myisam_ftdump在MyISAM表中显示有关FULLTEXT索引的信息。它直接读取MyISAM索引文件,因此它必须在表所在的服务器主机上运行。在使用myisam_ftdump之前,如果服务器正在运行,请确保首先发出FLUSH TABLES语句。 myisam_ftdump扫描并转储整个索引,这并不是特别快。另一方面,单词的分布很少变化,因此不必经常运行。
像这样调用myisam_ftdump:
shell> myisam_ftdump [options] tbl_name index_num
tbl_name参数应该是MyISAM表的名称。您还可以通过命名表的索引文件(后缀为.MYI的文件)来指定表。如果您没有在表文件所在的目录中调用myisam_ftdump,则表或索引文件名必须以表数据库目录的路径名开头。索引号以0开头。
示例:假设测试数据库包含一个名为mytexttable的表,该表具有以下定义:

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

id上的索引是索引0,而txt上的FULLTEXT索引是索引1。如果您的工作目录是测试数据库目录,请按如下所示调用myisam_ftdump:
shell> myisam_ftdump mytexttable 1

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

shell> myisam_ftdump /usr/local/mysql/data/test/mytexttable 1
结果:
[root@CentOS8 school]# pwd
/usr/local/mysql/data/school
[root@CentOS8 school]# myisam_ftdump mytexttable 1
Total rows: 0
Total words: 0
Unique words: 0
Longest word: 0 chars ()
Median length: 0
Average global weight: -nan
Most common word: 0 times, weight: 0.000000 (

4.myisamchk — MyISAM表维护实用程序
myisamchk实用程序获取有关您的数据库表或检查,修复或优化它们的信息。 myisamchk使用MyISAM表(具有.MYD和.MYI文件用于存储数据和索引的表)。您还可以使用CHECK TABLE和REPAIR TABLE语句来检查和修复MyISAM表。

不支持将myisamchk与分区表一起使用。
提示:最好在执行表修复操作之前先备份表。在某些情况下,该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。

像这样调用myisamchk:
shell> myisamchk [options] tbl_name ...
这些选项指定您希望myisamchk要做的事情。以下各节将对它们进行描述。
您还可以通过调用myisamchk --help来获得选项列表。
如果没有选项,myisamchk只会将表作为默认操作进行检查。获得更多信息或告知myisamchk采取纠正措施,请按照以下说明指定选项讨论。
tbl_name是您要检查或修复的数据库表。
如果您在某个地方运行myisamchk除了在数据库目录中,您必须指定数据库目录的路径,因为myisamchk不知道数据库的位置。
实际上,myisamchk实际上并不在乎您正在处理的文件是否位于数据库目录中。
您可以复制将数据库表对应到其他位置并对其执行恢复操作那里。

如果愿意,可以在myisamchk命令行上命名几个表。您还可以指定一个表通过命名其索引文件(后缀为.MYI的文件)命名。这样,您就可以在目录使用* .MYI模式。
例如,如果您在数据库目录中,则可以检查所有该目录中的MyISAM表如下所示:
shell> myisamchk *.MYI
注意这里的MYI,如果报错(myisamchk: error: 140 when opening MyISAM-table 'mytexttable.MYI')可以省略

提示:在运行myisamchk时,必须确保没有其他程序在使用这些表。这样做的最有效方法是在运行myisamchk时关闭MySQL服务器,或锁定正在使用myisamchk的所有表。否则,当您运行myisamchk时,它可能会显示以下错误消息:警告:客户端正在使用或尚未正确关闭该表。这意味着您正在尝试检查已由另一个程序(例如mysqld)更新的表。服务器)尚未关闭文件或在未正确关闭文件的情况下死亡,这有时会导致一个或多个MyISAM表损坏。
如果mysqld正在运行,则必须使用FLUSH TABLES强制其刷新仍在内存中缓冲的所有表修改。然后,您应确保在运行myisamchk时没有人使用表。但是,避免此问题的最简单方法是使用CHECK TABLE而不是myisamchk来检查表

myisamchk支持以下选项,可以在命令行或选项文件的[myisamchk]组中指定这些选项。

5.myisamlog-显示MyISAM日志文件的内容
myisamlog处理MyISAM日志文件的内容。要创建这样的文件,请使用--log-isam = log_file选项启动服务器。
像这样调用myisamlog:

shell> myisamlog [options] [file_name [tbl_name] ...]

默认操作是更新(-u)。如果恢复完成(-r),则所有写操作以及可能的更新和删除操作都将完成,并且仅计算错误。如果未指定log_file参数,则默认日志文件名称为myisam.log。如果在命令行上命名表,则仅更新那些表。

6.myisampack —生成压缩的只读MyISAM表
myisampack实用程序压缩MyISAM表。 myisampack通过分别压缩表中的每一列来工作。通常,myisampack将数据文件打包40%到70%。以后使用该表时,服务器会将解压缩列所需的信息读入内存。当访问单个行时,这将导致更好的性能,因为您只需要精确地解压缩一行即可。 MySQL尽可能使用mmap()对压缩表执行内存映射。如果mmap()不起作用,则MySQL将退回到正常的读/写文件操作。
请注意以下事项:
•如果在禁用外部锁定的情况下调用mysqld服务器,则如果在打包过程中服务器可能更新了表,则最好不要调用myisampack。在服务器停止的情况下压缩表是最安全的。
•打包桌子后,它变成只读的。这通常是有意的(例如,访问CD上的打包表时)。
•myisampack不支持分区表。
像这样调用myisampack:

shell> myisampack [options] file_name ...
每个文件名参数都应该是索引(.MYI)文件的名称。如果您不在数据库目录中,则应指定文件的路径名。可以省略.MYI扩展名。用myisampack压缩表后,使用myisamchk -rq重建其索引。

7.mysql_config_editor — MySQL配置实用程序
mysql_config_editor实用程序使您可以将身份验证凭据存储在名为.mylogin.cnf的模糊登录路径文件中。文件位置在Windows上是%APPDATA%\ MySQL目录,在非Windows系统上是当前用户的主目录。稍后,MySQL客户端程序可以读取该文件,以获得用于连接到MySQL Server的身份验证凭据。
.mylogin.cnf登录路径文件的清晰格式包含选项组,与其他选项文件类似。 .mylogin.cnf中的每个选项组都称为“登录路径”,该组仅允许某些选项:主机,用户,密码,端口和套接字。将登录路径选项组视为一组选项,用于指定要连接到哪个MySQL服务器以及要作为身份验证的帐户。
这是一个清晰的示例:
[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost

当您调用客户端程序以连接到服务器时,客户端将.mylogin.cnf与其他选项文件结合使用。它的优先级高于其他选项文件,但低于客户端命令行上显式指定的选项。要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。 mysql_config_editor,标准MySQL客户端(mysql,mysqladmin等)以及mysql-test-run.pl测试实用程序均可识别此变量。

默认情况下,mysql客户端从其他选项文件中读取[client]和[mysql]组,因此它也从登录路径文件中读取它们。
•使用--login-path选项,客户端程序还从登录路径文件中读取命名的登录路径。从其他选项文件读取的选项组保持不变。
考虑以下命令:
shell> mysql --login-path = mypath
mysql客户端从其他选项文件读取[client]和[mysql],并从登录路径文件读取[client],[mysql]和[mypath]。
•即使使用--no-defaults选项,客户端程序也会读取登录路径文件。即使存在--no-defaults,这也允许以比在命令行上更安全的方式指定密码。

mysql_config_editor对.mylogin.cnf文件进行模糊处理,因此无法将其读取为明文,并且在客户端程序未对其进行混淆时,其内容仅在内存中使用。
这样,密码可以以非明文格式存储在文件中,并在以后使用,而无需在命令行或环境变量中公开。
mysql_config_editor提供了一个用于显示登录路径文件内容的打印命令,但是即使在这种情况下,密码值也会被屏蔽,以便永远不会以其他用户可以看到的方式出现。
mysql_config_editor所使用的混淆处理可防止密码以明文形式出现在.mylogin.cnf中,并通过防止无意中暴露密码来提供安全措施。
例如,如果您在屏幕上显示一个普通的,未混淆的my.cnf选项文件,则任何人都可以看到它包含的所有密码,这样使用.mylogin.cnf,那是不正确的。
但是使用的混淆不会阻止坚定的攻击者,因此您不应认为它是坚不可摧的。可以在您的计算机上获得系统管理特权以访问您的文件的用户,可以通过一些努力来使.mylogin.cnf文件变得模糊。登录路径文件对于当前用户必须是可读和可写的,其他用户不可访问。否则,mysql_config_editor会忽略它,并且客户端程序也不会使用它。
像这样调用mysql_config_editor:

shell> mysql_config_editor [program_options] command [command_options]

8.mysqlbinlog-处理二进制日志文件的实用程序
服务器的二进制日志由包含“事件”的文件组成,这些事件描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用mysqlbinlog实用程序。您还可以使用mysqlbinlog在复制设置中显示由从属服务器写入的中继日志文件的内容,因为中继日志的格式与二进制日志相同。
像这样调用mysqlbinlog:

shell> mysqlbinlog [options] log_file ...
例如,要显示名为binlog.000003的二进制日志文件的内容,请使用以下命令:
shell> mysqlbinlog binlog.0000003
输出包括binlog.000003中包含的事件。对于基于语句的日志记录,事件信息包括SQL语句,在其上执行该语句的服务器的ID,该语句在执行时的时间戳,所花费的时间等等。对于基于行的日志记录,该事件指示行更改,而不是SQL语句。
事件之前有提供附加信息的标题注释。
例如:
# at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query thread_id=3350 exec_time=11 error_code=0

在第一行中,后面的数字表示二进制日志文件中事件的文件偏移量或起始位置。
第二行以日期和时间开头,该日期和时间指示语句在事件起源的服务器上何时开始。为了进行复制,此时间戳会传播到从服务器。服务器ID是事件起源的服务器的server_id值。 end_log_pos指示下一个事件的开始位置(即,当前事件的结束位置+ 1)。 thread_id指示哪个线程执行了该事件。 exec_time是在主服务器上执行事件所花费的时间。在从站上,它是从站上的结束执行时间减去主站上的开始执行时间的差。差异可作为复制落后于母版多少的指标。 error_code指示执行事件的结果。零表示没有错误发生。

注意:使用事件组时,可以将事件的文件偏移量分组在一起,并且可以将事件的注释分组在一起。请勿将这些分组的事件误认为空白文件偏移量。

可以重新执行mysqlbinlog的输出(例如,将其用作mysql的输入),以重做日志中的语句。这对于服务器崩溃后的恢复操作很有用。为了执行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-fromremote-server选项从服务器读取它们。当服务器的binlog_encryption系统变量设置为ON时,二进制日志文件将被加密。 SHOW BINARY LOGS语句显示特定的二进制日志文件是加密的还是未加密的。还可以使用加密日志文件(0xFD62696E)的文件头开头的魔术数字来区分加密和未加密的二进制日志文件,该数字不同于未加密日志文件(0xFE62696E)的数字。请注意,从MySQL 8.0.14起,如果您尝试直接读取加密的二进制日志文件,则mysqlbinlog返回一个适当的错误,但是较早版本的mysqlbinlog根本无法将其识别为二进制日志文件。
对大型二进制日志运行mysqlbinlog时,请注意文件系统有足够的空间容纳生成的文件。要配置mysqlbinlog用于临时文件的目录,请使用TMPDIR环境变量。
在执行任何SQL语句之前,mysqlbinlog将pseudo_slave_mode的值设置为true。此系统变量影响XA事务的处理,original_commit_timestamp复制延迟时间戳记和original_server_version系统变量以及不支持的SQL模式。
mysqlbinlog支持以下选项,可以在命令行或选项文件的[mysqlbinlog]和[client]组中指定。

9.mysqldumpslow —汇总慢查询日志文件

MySQL慢查询日志包含有关执行时间较长的查询的信息。 mysqldumpslow解析MySQL慢查询日志文件并总结其内容。

通常,mysqldumpslow将类似于数字和字符串数据值的特定值的查询分组。显示摘要输出时,会将这些值“抽象”为N和'S'。要修改值抽象行为,请使用-a和-n选项。
像这样调用mysqldumpslow:
shell> mysqldumpslow [options] [log_file ...]

分析慢查询日志,需要开启慢查询日志,查看是否开启慢查询日志:
mysql> show variables like 'slow_query_log';

如果没有开启,可以在配置文件中开启。是否启用慢速查询日志。该值可以为0(或OFF)以禁用日志,或为1(或ON)以启用日志。日志输出的目的地由log_output系统变量控制;如果该值为NONE,则即使启用了日志,也不会写入任何日志条目。
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/logs/slow.log #如果您没有为慢速查询日志文件指定名称,则默认名称为host_name-slow.log。除非给出绝对路径名以指定其他目录,否则服务器将在数据目录中创建文件。
long_query_time = 1 #long_query_time的最小值和默认值分别为0和10

开启后,需要重新启动服务器。




















知识改变命运!

JAVA EE 学习     JAVA EE 资料
JEE Study:企业级开发学习网!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

QQ|Archiver|手机版|小黑屋|JEE Study ( 京ICP备16036936   JeeStudy企业开发官网①

GMT+8, 2024-4-29 16:00 , Processed in 0.272573 second(s), 35 queries .

Powered by JeeStudy!

© 2008-2020 JEE Study 企业级开发学习网

快速回复 返回顶部 返回列表