共计 1783 个字符,预计需要花费 5 分钟才能阅读完成。
问题描述:
由于公司线上服务器和线上是完全分离的,但是有时候线上环境的测试或排错还需要查看线上的数据库,故这里给他们搭建了一个 phpMyAdmin 的跳板机,通过该平台可以连接线上的只读库;但是最近收到同事的反馈,查看表记录的库时候,发现操作很卡,特别是浏览库下的表的时候,而此时线上只读库有一个在 select count(*) from tbname 的会话,主机 IP 就是 phpMyAdmin 服务器,到这里就明白了,查看库下的表的时候,phpMyAdmin 会显示表行数,此操作严重拖累了 phpMyAdmin 的响应,也问了百度和 google,但是对于表数据量过多造成的 phpMyAdmin 响应慢都没有太好的解决方案,所以自己摸索了一下,尝试修改一下 phpMyAdmin 的源码,故我这里的解决方案就是修改 phpMyAdmin 的源码,将 ’select count(*) from tbname’ 的 SQL 改写。
上面已概述了问题,现在直奔主题,说说如何修改 phpMyAdmin 源码解决这个问题的。
基础环境:
操作系统:CentOS 6.5 x64 位
phpmyadmin 版本:ver 4.4.15.8
MySQL 版本: 均为 5.6.33
第一步: 既然我们知道是由于表行数统计造成,那么打开 Table.class.php(phpmyadmin/libraries/Table.class.php) 文件:
查找文件中的函数 ’static public function countRecords’,修改内容大概在 581 行前后
原 SQL 如下:
‘SELECT COUNT(*) FROM ‘ . PMA_Util::backquote($db) . ‘.’
. PMA_Util::backquote($table)
由于查询 information_schema 表的字段都是 varchar 类型,需要给字段 value 添加单引号,所以修改后的 SQL 如下:
‘SELECT TABLE_ROWS FROM information_schema.TABLES where TABLE_SCHEMA = \” . PMA_Util::backquote($db) .
‘\’ and TABLE_NAME = \” . PMA_Util::backquote($table) . ‘\”
第二步: 保存退出,然后重启你的 web 服务 apache 或者 nginx。
第三步: 登录 phpmyadmin,浏览库下的表,直接秒开,完全无卡顿的现象了。
附注: 不过这时在库下看到的表的纪录数,除了多于 50W 行的表示显示行数的,其余表行数都是 0,这时由于 libraries/config.default.php 中的 $cfg[‘MaxExactCount’] = 500000 参数设置导致,如果一定要显示正确的表行数,可以把该参数设置为 50000 或者更低即可。
LAMP 架构协同应用的实例——phpMyAdmin http://www.linuxidc.com/Linux/2013-07/87645.htm
LAMP 应用之 phpMyAdmin、Wordpress http://www.linuxidc.com/Linux/2013-04/82757.htm
phpMyAdmin 老出现登陆超时解决方法 http://www.linuxidc.com/Linux/2012-09/70715.htm
Ubuntu 16.04 安装 phpMyAdmin 数据库管理工具 http://www.linuxidc.com/Linux/2016-11/137483.htm
Ubuntu 安装 phpMyAdmin 与 Adminer http://www.linuxidc.com/Linux/2012-08/69419.htm
在 LAMP 基础上实现 SSL 功能并安装 phpMyAdmin http://www.linuxidc.com/Linux/2012-07/66905.htm
Ubuntu 14.04 配置 LAMP+phpMyAdmin PHP(5.5.9) 开发环境 http://www.linuxidc.com/Linux/2014-10/107924.htm
phpMyAdmin 的详细介绍 :请点这里
phpMyAdmin 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-04/142760.htm