Mysql占用服务器CPU过高

通过命令行 top 查询,可以明显看到mysql占用过高
2023-07-19T06:28:11.png
命令行进入mysql 使用以下命令查看具体

SHOW FULL PROCESSLIST\G

2023-07-19T06:39:38.png

具体命令细节介绍

查询中Group问题

mysql由5.6.50升级至5.7.23
查询语句中曾包含group的,出现报错。经查询是由于 MySQL 的 ONLY_FULL_GROUP_BY 模式引起的。该模式要求在使用 GROUP BY 语句时,所有选择的非聚合列必须出现在 GROUP BY 子句中,或者使用聚合函数。
这就出现一个很尴尬的问题,需要在group语句中,所有字段都增加concat,而无法满足我们的需求。
解决方法:

$this->db->query("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");

暂时禁用 ONLY_FULL_GROUP_BY

Mysql修复

老版本的mysql数据表类型为MyISAM
新版本为InnoDB

phpcms中数据表类型为MyISAM
而项目在生产环境中偶尔会遇见如服务器存储满,内存不足等问题。导致mysql中对应的表损坏丢失,在navicat中无法查看该表。

修复方法:

  1. 命令行修复

在navicat中查询语句输入 repair table '表名' 进行修复
如:

repair table v9_log
  1. phpcms后台中修复

    进入后台->进入扩展->进入数据库工具->选择对应数据库->找到对应表单点击修复

2023-02-03T06:30:14.png