在 WordPress 升级后,MySQL 占用 CPU 特别高,通常是因为升级过程中或之后数据库操作增加、SQL 查询效率下降、插件兼容性问题等引起的。以下是排查和解决这个问题的详细步骤:
? 一、排查原因
1. 查看 MySQL 的负载来源
可以通过以下命令查看当前 MySQL 正在执行的查询:
mysql -u root -p
SHOW PROCESSLIST;
观察是否有大量 Sending data、Copying to tmp table、Locked 等状态的 SQL。
2. 使用慢查询日志(Slow Query Log)
开启慢查询日志,找出耗时较长的 SQL:
修改 MySQL 配置文件(如 /etc/my.cnf 或 /etc/mysql/my.cnf):
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 0
重启 MySQL 生效配置:
sudo systemctl restart mysql
然后使用 mysqldumpslow 分析慢查询日志:
mysqldumpslow /var/log/mysql/mysql-slow.log
3. 检查 WordPress 插件和主题
升级后某些插件或主题可能不兼容新版本 WordPress,导致频繁查询或低效查询。
解决方法:
- 切换为默认主题(如 Twenty Twenty-Four),看是否缓解。
- 停用所有插件,逐个启用排查。
4. 检查数据库表是否损坏或需要优化
升级后可能出现表损坏或索引失效的问题。
进入 WordPress 数据库,运行:
CHECK TABLE wp_posts, wp_options, wp_postmeta, wp_comments;
OPTIMIZE TABLE wp_posts, wp_options, wp_postmeta, wp_comments;
也可以使用插件如 WP-Optimize 自动优化数据库。
⚙️ 二、优化建议
1. 添加缓存机制
- 安装缓存插件:如 W3 Total Cache、WP Super Cache、Redis Object Cache。
- 启用 OPcache 和 Redis 缓存减少数据库请求。
2. 调整 MySQL 配置
根据服务器资源适当调优:
[mysqld]
innodb_buffer_pool_size = 512M # 根据内存大小设置,通常是物理内存的 50%~70%
query_cache_type = 1 # 启用查询缓存(注意:MySQL 8.0 已移除 QC)
query_cache_size = 64M
tmp_table_size = 64M
max_allowed_packet = 64M
thread_cache_size = 8
table_open_cache = 2000
innodb_flush_log_at_trx_commit = 2
注意:MySQL 8.0 起不再支持
query_cache_type,可以考虑改用 Redis 或 Memcached。
3. 定期清理无用数据
- 删除垃圾评论、自动保存草稿、修订版本。
- 使用插件如 WP-Sweep 或 Better Delete Revision。
4. 使用性能分析插件
安装如 Query Monitor 插件,可以实时查看页面加载中的 SQL 查询数量和耗时。
✅ 三、总结解决方案流程图
1. 查看 MySQL 当前进程 (SHOW PROCESSLIST)
2. 开启慢查询日志并分析
3. 检查插件/主题是否引起问题
4. 优化数据库表结构和索引
5. 添加缓存插件和 Redis 缓存
6. 调整 MySQL 配置参数
7. 清理无用数据
如果你能提供具体的服务器配置、WordPress 版本、MySQL 版本、以及你看到的负载情况(如 top、htop 输出),我可以进一步帮你定位问题。
是否需要我帮你写一个脚本自动分析慢查询日志?
CDNK博客