本篇主要介绍MySQL常见的客户端程序
目录
一、mysqlcheck
mysqlcheck是MySQL的表维护程序,其功能主要包含以下四个方面:
- 分析:查看表中关键字的分布,是否执行正确的sql计划
- 检查:检查表的完整性以及数据库表和索引是否有损坏
- 优化:优化表,包括回收不再使用的空间,减少空间碎片,提高IO性能
- 修复:对可能已经损坏的表进行修复(InnoDB中不支持)
下面我们来了解一下如何使用mysqlcheck,使用mysqlcheck的命令语法如下:
mysqcheck [选项] 数据库名 [表名]
这里如果不指定表名,则会操作该数据中的所有表
mysqlcheck的常用选项如下:
下面我来使用一下mysqlcheck:
表分析:
根据分析的结果可以发现,库中的表都是没有问题的
表检查:
表优化:
由于当前表不支持优化,,所以这里用表分析的结果代替了。
表修复:
因为当前表的存储引擎为InnoDB,因此不支持表修复,如果需要进行表修复的话可以先将表的存储引擎改为其它支持表修复的引擎,修复完成后再设置回来。
使用mysqlcheck时需要注意以下几点:
- 只有在mysql运行时才能使用mysqlcheck
- 使用mysqlcheck时操作的表会被锁住,其它操作会阻塞
- 在进行表修复之前需要先对表备份,不然可能会导致表数据丢失
二、mysqldump
mysqldump是MySQL数据备份程序,它能对数据库进行逻辑备份,生成一组SQL,其中包含数据库和表的创建语句以及表中的数据。mysqldump可以生产sql、xml、csv三种格式的备份文件。
下面我们来看一下如何使用mysqldump。
mysqldump的命令语法如下:
mysqldump [options] 数据库名[表名] [备份文件的地址]
mysqldump常用选项如下:
下面我们通过mysqldump来将一个test_db表进行一下备份:
首先我们需要创建一个文件,用来保存备份的数据,这里,我创建了一个test.sql
然后 我们再使用mysqldump进行转储备份
然后我们再来查看一下test.sql文件
可以发现文件中包含该库相关的所有SQL语句。
三、mysqladmin
mysqladmin是MySQL的管理程序,能够查看MySQl的状态信息和配置信息,同时还能进行数据库的创建操作。
下面我们来了解一下mysqladmin的使用。
mysqladmin的使用语法如下:
mysqladmin [选项] 命令[命令参数]
mysqladmin的使用的专属选项较少,使用的专属命令则比较多,常用的命令如下:
- version:查看mysql的版本信息
- create db_name 创建⼀个数据库名为db_name 。
- drop db_name 删除名为 db_name 的数据库及其所有表。
- extended-status显⽰服务器状态变量的值。
- flush-hosts 刷新主机缓存中的所有信息。
- flush-logs [log_type ...] 刷新所有⽇志。 log_type 中可以提供以下⼀种或多种⽇志类型binary,engine,error,general,relay,slow,多个类型之间⽤空格分隔。
- flush-privileges 重新加载授权表
- flush-status 清除状态变量。
- flush-tables 刷新所有表。
- flush-threads 刷新线程缓存。
- password new_password 设置新密码。
下面我们通过mysqladmin来查看一下当前MySQL的版本信息和状态:
查看版本
查看状态
其中Uptime为mysql服务当前已运行的秒数,Threads为当前活动线程的数量,Questions为客户端查询操作的次数,slow queries为慢查询SQL的执行次数,opens为 服务器打开的表的数量,flush tables为服务器执行flush、reload、refresh等操作的次数,open tables为当前会话打开的表的数量。
四、mysqldumpslow
mysqldumpslow是MySQL中的慢查询日志总结程序,它能够对慢查询日志文件进行解析并汇总。
下面让我们来具体了解一下mysqldumpslow的使用。
mysqldumpslow的使用语法如下:
mysqldumpslow [options] [慢查询日志文件]
mysqldumpslow的常用选项如下:
其中-s选项的sort_type有如下几种:
- t : 按查询时间或平均查询时间进行排序
- l : 按锁占用时间或平均占用时间排序
- r : 按发送给客户端的数据的行数或平均行数进行排序
- c :按该类查询语句的计数进行排序
下面我们来尝试一下解析一个慢查询日志;
(test-slow.log是一个慢查询日志文件)
解析结果如下:
我们主要来看一下图中框起来的部分,其中记录了慢查询的一些参数信息,其中count为该类sql的执行次数,,time为单次执行的耗时,lock为申请与释放锁的时间,row为获取数据所消耗的时间。后面的部分为哪个用户在哪台机器上执行的该慢查询。再往后就是具体执行的慢SQL
最后要注意的是,mysqldumpslow会将相似的sql进行分组并摘要输出,具体为用N代替数字,用S代替字符串,例如“select* from table where age = 1”、“select* from table where age = 2”都会用“select* from table where age = N”代替,该功能也可以通过前面介绍的选项来关闭
五、mysqlbinlog
mysqlbinlog是MySQL中用来将二进制日志文件解析成文本文件并显示的程序(MySQL中的二进制日志文件指的是用来保存我们对数据库进行的修改的二进制文件)
下面我们来看一下mysqlbinlog的使用:
其使用语法如下:
mysqlbinlog [options] [二进制日志文件]
常用选项如下:
其中base64-output的value可以有如下取值:
- AUTO(默认):自动显示binlog语句,在重新执行二进制日志文件中的sql时,使用AUTO是唯一安全的选项,其它选项只用来调试和测试
- NEVER :不显示binlog语句
- DECODES-ROWS:不显示加密的内容,可以搭配mysqlbinlog的version选项以注释的形式只显示事件的sql语句。
下面我们具体来用mysqlbinlog查看一个二进制日志文件:
查到的内容中其中一个事件的内容如下:
其中,at表示该事件在整个日志文件中的起始偏位置,end_log_pos为事件在日志中结束的偏移位置。有关二进制日志的具体内容将在后面的文章中详细介绍。
六、mysqlshow
mysqlshow程序主要用来快速查看数据库,表,以及表中的列和索引的相关信息。
mysqlshow的使用语法如下:
mysqlshow [options] [数据库名[表名[字段名]]]
- 数据库名和表名等内容可以用 * 、? 、_等通配符表示
- 如果没有指定数据库,则显示索引数据库名称
- 如果没有指定表名,则显示数据库中所有的表名称
- 如果没有指定列,则显示表中所有的列名及其类型
- 只会输出当前有权限可以访问的数据库,表、列
mysqlshow功能较简单,没有特殊的选项。
下面我们来演示一下mysqlshow的使用
查看所有数据库:
显示其中test_db中所有的表
显示表中的所有列名及其类型:
显示列的具体信息
七、mysqlslap
mysqlslap是一个诊断程序,用来模拟多个用户来操作数据库,并记录每个阶段消耗时间以及负载情况。主要用来测试mysql服务的性能。
下面我们来看一下如何使用mysqlslap:
mysqlslap的使用语法如下:
mysqlslap [options]
常用选项如下:
下面我们来具体演示一下mysqlslap的使用:
我们通过--concurrency选项来模拟五个用户,然后再通过--iterations来设置每个用户执行五次操作,然后再通过--auto-generate-sql选项来自动生成sql语句,然后我们通过--number-int-cols和--number-char-cols来指定生成的sql查询语句中包含三个int字段和三个varchar字段
mysqlslap --concurrency=5 --iterations=5 --auto-generate-sql --number-int-cols=3 --number-char-cols=3
运行该指令,mysqlslap就会自动模拟5个用户来执行自动生成的sql,每条sql执行5次。
执行结果如下:
下面我们来看一下mysqlslap使用时的注意事项:
- 可以通过 -- create或者--query选项来指定包含sql的字符串或者文件
- 如果指定了一个包含sql的文件,文件中必须每一行对应一条sql,也就是说sql语句的默认分隔符为换行符,可以通过--delimiter选项设置
- 包含sql的文件中不能包含注释,mysqlslap无法解析注释
- mysqlslap的执行包含以下三个阶段 :1 创建测试数据,包括测试时的数据库,表,具体数据等内容,这个阶段只使用单个客户端与服务器进行连接 2 运行负载测试阶段 ,该阶段具体来执行模拟的sql,并会创建多个客户端与服务器连接,以模拟多个用户的情况 3 清理阶段,该阶段会删除相关数据,例如阶段1创建的库表等内容,并执行断开连接操作,该阶段单个客户端与服务器连接