非调试模式下查看MySQL过程代码
添加MySQL过程时间长了,难免会有需要查看过程代码的情况。比如Kaijia有一个过程自动清理数据库中大于指定时间的分区,这次Kaijia把这个指定的时间忘了,于是想通过查看过程的代码找回这个设定的时间。
根据MySQL文档,可以使用“SHOW PROCEDURE CODE”语法查看过程和自定义函数的代码,但Kaijia在执行此语法时却遇到了以下错误:
mysql> SHOW PROCEDURE CODE
Kaijia的过程
;
ERROR 1289 (HY000): The ‘SHOW PROCEDURE|FUNCTION CODE’ feature is disabled; you need MySQL built with ‘–with-debug’ to have it working
阅读此语法的文档Kaijia找到了相关提示:此扩展仅在编译时开启了调试模式的服务器中可用(This statement is a MySQL extension that is available only for servers that have been built with debugging support.)。而考虑到除了MySQL开发外,一般情况下使用的由软件包管理器(YUM和APT-GET)提供的MySQL预编译版均没有开启编译模式,这条命令对广大开发者和系统管理员来说基本上是没法用的……
既然官方提供的方案在非调试模式下不可用,那么肯定还有一种全局通用的方法。Kaijia搜索了一下发现在MySQL系统中,所有的过程储存在MySQL的proc表中,而且过程的代码也直接以明文形式储存在此表里,因此可以直接使用以下SQL语句查看过程的代码:
1 |
SELECT * FROM `mysql`.`proc` WHERE name='过程名称'; |
如果过程的代码过长,此语句显示的结果长的比较丑,但并不会影响阅读。
此外值得一提的是,如果需要修改MySQL过程的代码,可以系统提供的使用“ALTER PROCEDURE”语法。
评论