简言

1. 昨天线上服务器mysql的cpu使用飙升到400%,且一直持续,修改了可能导致问题的地方,比如加索引,优化慢查询,然并卵,照旧

2. 后来网上查了下,可以打开sql语句日志,看下mysql到底卡在什么地方,才最终定位到问题

步骤如下

1. 终端上使用命令连接进mysql(笔者这里的mysql是3305端口,默认情况mysql是3306端口)

mysql打开sql语句日志_mysql

2. 查看所有变量general,可以看到general_log是关闭的

mysql打开sql语句日志_mysql_02

3. set global general_log = 1; 打开日志,再次查看这变量可以看到已经打开了

mysql打开sql语句日志_mysql_03

4. 打开上图中的日志文件,也就是/var/lib/mysql/185.log 可以看到mysql已经开始把执行的语句写入这个文件了

mysql打开sql语句日志_查看sql日志_04

5. 分析sql语句,看哪些是执行比较慢的(笔者这里就是看到那些 SELECT * FROM `api_ks_20201116` WHERE......执行后总要间隔30多毫秒,我擦,明明CPU已经爆满了,为什么还会等待呢,说明就是这种语句执行速度慢,分析应该是返回数据量比较大导致的,后来改成只select指定的字段,不再select *之后发现问题迎刃而解,哈哈)

6. 使用完后,记得关闭sql日志,因为它的数据量很大,一天随随便便几个G,而且还会拖累mysql的性能,命令如下:set global general_log = 0;  再次查看这变量可以看到已经关闭了

mysql打开sql语句日志_慢查询_05