phpMyAdmin浏览数据页面卡死

我们使用phpMyAdmin经常是一进去就直接展开数据库,点击表名查看数据,这样可以清楚的了解表的结构方便写 SQL。默认情况下是显示 25 条数据,即使有几亿行也很快。

但最近我换了一个 read 账号登录,点击表名的时候直接卡死了

应该是查询卡住了,命令行连上数据库,show full processlist发现有个查询确实卡住了:

一开始只关注到状态是`Creating Sort Index`,再结合使用 write 账号登录打开却很快的现象,认为是 read 账号没有 create 权限,导致卡着了(没有权限的话应该是直接报错的)。但是查了下 read 账号其实给的就是全部权限,一度陷入了僵局。

调整心态,回到原点,还是从「使用 write 账号登录打开却很快」的现象出发,查看日志,发现 write 账号进入的话点击表名浏览数据使用的 SQL 没有`ORDER BY`,那就是自动加的,查了下,phpMyAdmin 会自动保存上一次对字段排序的操作,再次操作字段能取消排序,但问题是我现在已经无法进入浏览页面了。

那考虑是不是能在哪里设置,关闭这个。页面上有个浏览模式设置,但这个试了下好像没啥用。

还是看下官方文档吧,找到了设置项,需要把`$cfg['Servers'][$i]['table_uiprefs']`和`$cfg['RememberSorting']`设置为false。这个功能还是好的,但在多人使用同一账号,数据量又比较大的情况下,还是关闭比较好,关闭也不影响排序功能,只是排序的操作不会保存下来。

Since release 3.5.0 phpMyAdmin can be configured to remember several things (sorted column $cfg['RememberSorting'], column order, and column visibility from a database table) for browsing tables. Without configuring the storage, these features still can be used, but the values will disappear after you logout.

然后还得把已经保存的设置项清除掉,位置在数据库:phpmyadmin(默认)表:pma__table_uiprefs,把这个表清空即可又回到之前丝滑的感觉了。

参考资料

https://stackoverflow.com/questions/33809816/phpmyadmin-automatically-adding-order-by-to-browse

https://docs.phpmyadmin.net/en/latest/config.html#cfg_Servers_table_uiprefs