今日箴言
逃避的事情都会回来找你 。
1. MySQL 安装
1.1MySQL 8.0.18安装
本次安装的是MySQL 8.0.18版本。
下载地址:https://downloads.mysql.com/archives/installer/
一路下一步下一步就可完成安装.<赞 Winddows Installer, 很方便安装>
1.2 配置全局路径
将MySQL bin目录配置到环境变量Path中。
1.3 测试全局配置是否正常
测试MySQL bin目录配置到全局中是否生效。
win+R 打开运行-->输入cmd。进入dos窗。
可以查看到在任意目录下可以正常登录。
2. MySQL 导入测试数据
2.1 导入test_db.sql
Github 测试数据地址:https://github.com/datacharmer/test_db GitHub 速度如果慢,建议使用百度云盘 链接: https://pan.baidu.com/s/1usdX-RhTtlpow2-C0vS9nw 提取码: i568
下载github上的内容到本地, 将employee.sql导入到MySQL。
mysql -uroot -p123456 < employees.sql
验证导入数据是否正常
mysql -uroot -p123456 -t < test_employees_md5.sql
3. 慢查询日志
慢查询日志是MySQL内置的一项功能,可以记录执行超过指定时间的SQL语句。
发现慢SQL的工具
Skywalking、VisualVM 、JavaMeloddy
3.1相关参数与默认值
参数 作用 默认值 log_output 日志输出到哪儿,默认File,表示文件;设置成TABLE,则将日志记录到mysql.slow_log中。也可以设置多种格式,比如 FILE、TABLE
.FILE long_query_time 执行时间超过这么久才记录到慢日志,单位秒,可使用小数表示小于秒的时间 10 log_queries_not_using_indexs 是否要将未使用索引的SQL记录到慢查询日志中,此配置会无视long_query_time的配置。生产环境建议关闭;开发环境建议开启 OFF log_throttle_queries_not_using_indexs 和log_queries_not_using_indexs配合使用,如果log_queries_not_using_indexs打开,则该参数将限制每分钟写入的、未使用索引的SQL数量 0 min_examined_row_limit 扫描行数至少达到这么多才记录到慢查询日志 0 log_slow_admin_statements 是否要记录管理语句,默认关闭。管理语句包括Alter Table,Analyze table,check table,create index,drop index,optimize table and repair table OFF slow_query_log_file 指定慢查询日志文件路径 /var路径 log_slow_slave_statements 该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL。如果binlog格式是row,则该参数无效 OFF log_slow_extra 当log_output=FILE时,是否要记录额外信息(MySQL 8.0.14开始提供),对log_output=TABLE的结果无影响 OFF 3.2 使用方式
- 方式一,修改配置文件my.cnf
在[mysqlId]段落中加入下面的参数即可
[mysqld] # ... log_output=`FILE、TABLE`; slow_query_log=ON long_query_time=0.001
然后重启MySQL,例如:
service mysqld restart
- 方式二,通过全局变量查看
这种方式无需重启即可生效,但一旦重启,配置又会丢失
例如:
set global log_output = 'FILE,TABLE'; set global slow_query_log = 'ON'; set global long_query_time = 0.001;
这样设置之后,就会将慢查询日志同时记录到文件以及myusql.slow_log表中
4. 分析慢查询日志
4.1 查看慢查询日志位置
当log_output=table时,可直接使用如下语句分析:
select * from `mysql.slow_log`
当log_output=file时,可以使用如下命令查看slow_log记录的文件位置
show VARIABLES like '%slow_query_log_file%';
4.2 分析慢查询日志文件
使用mysqldumpslow
当log_output=file时,可以使用mysqldumpslow分析
➜ ~ mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default
al: average lock time
ar: average rows sent
at: average query time
c: count
l: lock time
r: rows sent
t: query time
-r reverse the sort order (largest last instead of first)
-t NUM just show the top n queries
-a don't abstract all numbers to N and strings to 'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is '*', i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don't subtract lock time from total time
示例:
# 得到返回记录集最多的10条SQL
mysqldumpslow -s r -t 10 /usr/local/mysql/data/zhangshaodeMacBook-Pro-slow.log
# 得到按照查询时间排序,并且带有left join的10条SQL
mysqldumpslow -s t -t 10 -g "left join" /usr/local/mysql/data/zhangshaodeMacBook-Pro-slow.log
pt-query-digest
除了MySQL自带的mysqldumpslow外,也可以使用pt_query_digest分析慢查询日志文件。