宝塔查看MySQL 数据库占用大小 以及 碎片整理

用一条命令看MySQL真实情况(最靠谱)

1.在 SSH 里执行:

复制代码
mysql -uroot -p -e "
SELECT 
  ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS '总库大小(GB)',
  ROUND(SUM(data_free) / 1024 / 1024 / 1024, 2) AS '碎片空间(GB)'
FROM information_schema.tables 
WHERE table_schema NOT IN ('information_schema','mysql','performance_schema','sys');
"

输入上面的命令后 回车 然后点击数据库 点开输入root密码 复制即可

2.****然后看 InnoDB buffer pool 实际命中率(MySQL 正常启动后执行)

复制代码
mysql -uroot -p -e "SHOW ENGINE INNODB STATUS\G" | grep -A 3 "Buffer pool hit rate"

命中率 ≥ 99x%(比如 999/1000)就说明 buffer pool 完全够用,降了不会慢。

**3.**再查各库体积排行,Discuz! 的数据库名通常是 discuz或你自己定义的:

复制代码
mysql -uroot -p -e "
SELECT table_schema AS db,
  ROUND(SUM(data_length+index_length)/1024/1024, 1) AS size_MB
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_MB DESC;
"

输入上面的命令后 回车 然后点击数据库 点开输入root密码 复制即可

**4.**MySQL 数据库碎片整理

复制代码
mysqlcheck -uroot -p -o --all-databases

这个操作会在低峰期执行,可能会短暂锁表,建议在夜间进行。

**5.**最终检查:确认 buffer pool 命中率

重启 MySQL 后,运行:

复制代码
mysql -uroot -p -e "SHOW ENGINE INNODB STATUS\G" | grep -A 3 "Buffer pool hit rate"

如果看到类似 Buffer pool hit rate 1000 / 1000999 / 1000,说明你的 buffer pool 完全够用,速度不会有任何下