当前位置: 首页 > article >正文

【Mysql进阶知识】

一、mysqlshow -显示数据库、表和列信息

1.1 作用

mysqlshow 客户端可用于快速查看存在哪些数据库、数据库中的表以及表中的列或索引

1.2 注意事项

mysqlshow 为⼀些 SHOW 语句提供了⼀个命令行接口。关于SHOW的使用参见官方文件“SHOW语句”。直接使用这些SQL语句也可以获得相同的信息。

1.3 使用方法
mysqlshow [options] [db_name [tbl_name [col_name]]]
  • db_name tbl_name col_name 可以使用通配符*、?、%或_ 。
  • 如果没有指定数据库,则显示所有数据库名称列表。

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

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

  • 输出仅显示当前权限可以访问的数据库、表或列的名称。

#查看数据库的所有表
zyq@iZm5egpp4a85g2tfliaeikZ:~$ mysqlshow test_db -uroot -p
Enter password: 
Database: test_db
+---------+
| Tables  |
+---------+
| classes |
| course  |
| score   |
| student |
+---------+

//查看数据库中的某一个表
zyq@iZm5egpp4a85g2tfliaeikZ:~$ mysqlshow test_db student -uroot -p
Enter password: 
Database: test_db  Table: student
+-------+-------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+
| Field | Type        | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment  |
+-------+-------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+
| id    | int         |                    | NO   | PRI |         | auto_increment | select,insert,update,references |          |
| sn    | int         |                    | NO   |     |         |                | select,insert,update,references | 学号   |
| name  | varchar(20) | utf8mb4_general_ci | NO   |     |         |                | select,insert,update,references | 姓名   |
| mail  | varchar(20) | utf8mb4_general_ci | YES  |     |         |                | select,insert,update,references | QQ邮箱 |
+-------+-------------+--------------------+------+-----+---------+----------------+---------------------------------+----------+

//查看数据库中的某一个表的某一列
zyq@iZm5egpp4a85g2tfliaeikZ:~$ mysqlshow test_db student id -uroot -p
Enter password: 
Database: test_db  Table: student  Wildcard: id
+-------+------+-----------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+------+-----------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int  |           | NO   | PRI |         | auto_increment | select,insert,update,references |         |
+-------+------+-----------+------+-----+---------+----------------+---------------------------------+---------+

mysqlshow 的常用选项参考公共选项部分,可以在命令行中指定,也可以在选项文件中通过 [mysqlshow] 和 [client] 组进行指定,具体选项参考公共选项列表。

二、mysqldumpslow - 总结慢查询日志文件

2.1 作用

在平时使用MySQL数据库时,经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来称为慢查询日志。

mysqldumpslow可以解析慢查询日志文件并汇总其内容,有关慢查询日志的内容我们在MySQL服务器配置与管理专题进行讲解。

2.2 注意事项

通常情况下,mysqldumpslow 会将相似的查询分组并显示摘要输出,⼀般会把数字和字符串用 N 和 "S" 代替,要想显示真实的值可以使用 -a 和 -n 选项

2.3 使用方法
mysqldumpslow [options] [log_file ...]

 在Linux下 慢查询日志文件通常在/var/lib/mysql 目录下

在没有给出任何选项的输出如下:

Reading mysql slow query log from /usr/local/mysql/data/mysqld80-slow.log
Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 # 执⾏的SQL 
Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 limit N # 执⾏的SQL 
Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
 insert into t1 select * from t1 # 执⾏的SQL 
  • count:执行的次数
  • Time:单次耗时
  • Lock:加锁与解锁的耗时
  • Rows:获取数据的时间
2.4 常用选项
选项说明
-a不用N和'S'代替numbers和String
-n N在名称中包含N个以上的数字用N代替
-g pattern仅考虑与指定模式匹配的慢查询
--help显示帮助信息并退出
-h host_name与*-slow.log文件名对应的MySQL服务器主机名。可以包含通配符。默认值是*(匹配所有)
-i name服务器实例的名称
-l不要从总时间中减去锁占用的时间
-r倒序排列
-s sort_type如何对输出进行排序
-t N显示输出中的前N个查询
--verbose, -v打印有关程序功能的更多信息

-s sort_type sort_type可选的值如下所示:

  • t, at: 按查询时间或平均查询时间排序,默认排序

  • l, al: 按锁占用时间或平均锁占用时间排序

  • r, ar: 按发送的行数或平均发送的行数排序

  • c: 按计数排序

三、mysqlbinlog - 处理⼆进制日志文件

3.1 作用

什么是二进制日志文件:

我们平时对数据库的修改,包括对数据的增删改,都会被描述成一个"事件",每个"事件"都会以二进制的形式记录在一个文件里,这个文件就是服务器的二进制日志文件,称为Binary Log或binlog。

mysqlbinlog 能够以文本格式显示⼆进制日志⽂件中的内容。

3.2 注意事项
  • binlog的默认保存路径是数据目录:

Linux下默认目录:/var/lib/mysql

Windows下默认目录:C:\ProgramData\MySQL\MySQL Server 8.0\Data

  • binlog是以 .00000n 结尾命名的文件,n不断递增
root@iZm5egpp4a85g2tfliaeikZ:/var/lib/mysql# ll binlog*
-rw-r----- 1 mysql mysql   180 Jan 10 15:13 binlog.000001
-rw-r----- 1 mysql mysql   404 Jan 10 15:13 binlog.000002
-rw-r----- 1 mysql mysql   180 Jan 10 15:21 binlog.000003
-rw-r----- 1 mysql mysql   529 Jan 10 15:29 binlog.000004
-rw-r----- 1 mysql mysql   599 Jan 12 00:00 binlog.000005
-rw-r----- 1 mysql mysql   201 Jan 13 00:00 binlog.000006
-rw-r----- 1 mysql mysql   201 Jan 14 00:00 binlog.000007
-rw-r----- 1 mysql mysql   201 Jan 15 00:00 binlog.000008
-rw-r----- 1 mysql mysql   201 Jan 16 00:00 binlog.000009
-rw-r----- 1 mysql mysql 26683 Jan 16 15:16 binlog.000010
-rw-r----- 1 mysql mysql   160 Jan 16 00:00 binlog.index
3.3 使用方法
mysqlbinlog [options] log_file ...

例如要显示名为 binlog.000010 ⼆进制日志文件的内容,可以使用以下命令:

root@iZm5egpp4a85g2tfliaeikZ:/var/lib/mysql# mysqlbinlog binlog.000010
# ... 略
# at 37380
#230906 15:30:33 server id 1 end_log_pos 37442 CRC32 0x6d3de7e6 
Write_rows: table id 119 flags: STMT_END_F
BINLOG '
mSr4ZBMBAAAAQgAAAASSAAAAAHcAAAAAAAEAB3Rlc3RfZGIAB3N0dWRlbnQABAMDDw8EUABQAA8B
AQACAS1oGW+U
mSr4ZB4BAAAAPgAAAEKSAAAAAHcAAAAAAAMAAgAE/wAFAAAAVcMAAAbpkrHkuIMKcXFAYml0LmNv
bebnPW0=
'/*!*/;
# ... 略

binlog.000010 的输出内容中包含各种事件,事件信息包括 SQL 语句、执行语句的服务器 ID、语 句执行时的时间戳、花费的时间等等。

3.4 常用选项

mysqlbinlog 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过 [mysqlbinlog] 和 [client] 组进行指定

选项说明
--base64-output把BINLOG中的事件用base-64进行编码,value的取值在之后有特殊说明
--binlog-row-event-max-size=N指定基于行的二进制日志事件的最大值(以字节为单位),取值应为256的倍数,默认4GB
--force-if-open,-F读取二进制日志文件,即使它们已打开或未正确关闭
--force-read,-f如果使用这个选项,当mysqlbinlog读取一个不能识别的binlog,会打印一个警告并忽略该事件,然后继续。如果没有这个选项,mysqlbinlog在读取这样的事件时会停止
--hexdump, -H显示日志的十六进制转储
--offset, -o--offset=N,-o N 跳过日志中的前N条记录
--rawmysqlbinlog以原始二进制格式写入事件,默认是文本格式
--read-from-remote-server, -R--read-from-remote-server=file_name, -R 读取远程MySQL服务器的二进制日志,而不是读取本地,要求远程服务器正在运行
--require-row-format基于行格式的二进制日志记录格式
--result-file, -r--result-file=name, -r name 输出的目标文件
--server-id仅显示指定服务器ID创建的事件
--server-id-bits=N使用server_id的前N位来标识服务器
--start-datetime=datetime从等于或晚于datetime的第一个事件开始读取日志,支持DATETIME和TIMESTAMP类型
--start-position=N, -j N开始读取日志的位置,position等于或大于N之后的任何事件
--stop-datetime=datetime在等于或晚于datetime的第一个事件结束,支持DATETIME和TIMESTAMP类型
--stop-never保持与服务器的连接
--stop-position=N在日志位置N处停止解码
--verbose, -v重新构建行事件并将其显示为已注释的SQL语句,并在适用的情况下显示表分区信息
  • --base64-output=value,value允许的值:(默认AUTO)
  • AUTO ("automatic")或UNSPEC ("unspecified")在必要时自动显示BINLOG语句。如果使用mysqlbinlog重新执行二进制日志文件内容,那么使用AUTO选项是唯一安全的行为,其他选项值仅用于调试或测试,如果--base64-output没有指定,那么默认值是AUTO。

  • NEVER不显示BINLOG语句。

  • DECODE-ROWS不显示加密内容,可以配合mysqlbinlog的-verbose选项以注释的形式只显示事件的SQL语句。

四、mysqlslap-负载仿真客户端

4.1 作用

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

4.2 使用方法
mysqlslap [options]
4.3 注意事项
  • 可以通过--create或--query选项,指定包含SQL语句的字符串或包含SQL语句的文件。
  • 如果指定一个包含SQL语句的文件,默认情况下每行必须包含一条语句(也就是说,隐式语句分隔符是换行符)。
  • 如果要把一条语句分为多行书写,可以使用--delimiter选项指定不同的分隔符。
  • 不能在文件中包含注释,因为mysqlslap不能解析注释。 mysqlslap运行分为三个阶段:

a. 创建测试数据阶段:创建用于测试的库、表或数据,这个阶段使用单个客户端连接

b. 运行负载测试阶段,这个阶段可以使用许多客户端连接

c. 清理阶段:执行删除表,断开连接等操作,这个阶段使用单个客户端连接

4.4 常用选项

mysqlslap 有如下常用选项,可以在命令行中指定,也可以在选项文件中通过 [mysqlslap] 和 [client] 组进行指定

选项说明
--auto-generate-sql, -a当命令选项或文件中没有提供SQL语句时,自动生成SQL语句
--auto-generate-sql-add-auto-increment在自动生成的表中添加AUTO_INCREMENT列
--auto-generate-sql-execute-number=N指定要自动生成多少查询
--auto-generate-sql-guid-primary向自动生成的表添加基于GUID的主键
--auto-generate-sql-load-type=type指定测试负载类型。允许的值是read(扫描表)、write(插入表)、key(读取主键)、update(更新主键)或mixed(一半插入,一半扫描选择)。默认为mixed
--auto-generate-sql-secondary-indexes=N指定要向自动生成的表添加多少索引。默认为0
--auto-generate-sql-unique-query-number=N为自动生成的测试生成多少个不同的查询(where条件不同)。默认值是10
--auto-generate-sql-write-number=N要执行多少行插入。默认值是100
--auto-generate-sql-unique-write-number=N为--auto-generate-sql-write-number生成多少个不同的查询。默认值是10
--commit=N在提交之前要执行多少语句。默认值是0
--concurrency, -c--concurrency=N, -c N 要模拟并行客户端的数量
--create--create=value 用于创建表SQL语句或文件
--create-schema--create-schema=value 用于测试的库,测试完成后会自动删除
--csv--csv[=file_name] 以逗号分隔的格式输出到指定的文件,如果没有给出文件,则输出到控制台
--delimiter, -F--delimiter=str, -F str SQL语句的分隔符
--engine, -e--engine=engine_name, -e engine_name 创建表的存储引擎
--iterations, -i--iterations=N, -i N 每个客户端运行测试的次数
--no-drop运行完测试后不删除创建的数据库
--number-char-cols, -x--number-char-cols=N, -x N 使用--auto-generate-sql选项时VARCHAR列的数量
--number-int-cols, -y--number-int-cols=N, -y N 使用--auto-generate-sql选项时INT列的数量
--number-of-queries--number-of-queries=N 限制每个客户端最大的查询数
--pre-query--pre-query=value 测试开始前要执行SQL语句或SQL文件,不计入查询次数
--pre-system--pre-system=str 测试开始前使用system()执行的命令。不计入查询次数
--post-query--post-query=value 测试完成后要执行SQL语句或SQL文件,不计入查询次数
--post-system--post-system=str 测试完成后使用system()执行的命令。不计入查询次数
--query, -q--query=value, -q value 包含用于测试的SELECT语句的文件或SQL语句
4.5 示例

 1、提供自定义的创建和查询语句,创建50个客户端连接,每个客户端进行200次 select 查询(在⼀ 行内输入命令)

# 在⼀⾏内输⼊,为了演⽰⽅便这⾥换⾏了 
mysqlslap --delimiter=";" 
 --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);"
 --query="SELECT * FROM a;" --concurrency=50 --iterations=200

2. 让mysqlslap用包含两个 INT 列和三个 VARCHAR 列的表自动构建查询的SQL语句。使用5个客户端,每个客户端查询20次。

mysqlslap --concurrency=5 --iterations=20
 --number-int-cols=2 --number-char-cols=3
 --auto-generate-sql

3. 从指定的文件中加载创建、插入和查询SQL语句。SQL文件中的语句以 ";" 分隔。使用5个客户端,每个客户端查询5次。

mysqlslap --concurrency=5
 --iterations=5 --query=query.sql --create=create.sql
 --delimiter=";"

http://www.kler.cn/a/506063.html

相关文章:

  • 计算机网络 (45)动态主机配置协议DHCP
  • ros2笔记-6.2 使用urdf创建机器人模型
  • 神经网络常见操作(卷积)输入输出
  • vim将一行行尾倒数第三个字符替换成1
  • windows 极速安装 Linux (Ubuntu)-- 无需虚拟机
  • Mac玩Steam游戏秘籍!
  • MyBatis-Plus6--MyBatis中的分页插件
  • 物联网网关Web服务器--lighttpd服务器部署与应用测试
  • 【深度学习基础】线性神经网络 | 图像分类数据集
  • 读书笔记~管理修炼-101℃理论:在绝境中找到新的生机
  • react什么时候用箭头函数,什么时候不需要
  • Cesium生成高清截图
  • Azure 100 学生订阅下,使用 Docker 在 Ubuntu VPS 上部署 Misskey 的详细教程
  • 1161 Merging Linked Lists (25)
  • HOW - 防抖时间设置
  • [Spring] Eureka SpringCloud LoadBalance
  • 《CPython Internals》阅读笔记:p177-p220
  • 初始C#.
  • V2X工具箱 - ADAS测试日志记录工具分享
  • 以太网实战AD采集上传上位机——FPGA学习笔记27
  • 《鸿蒙Next平台:决策树面对噪声数据的鲁棒性逆袭》
  • 《WebForms 数据库连接》
  • 电梯系统的UML文档03
  • 在JavaScript中生成和处理二维码
  • 使用 Charles 调试 Flutter 应用中的 Dio 网络请求
  • 7.User-Agent(用户代理)