非调试模式下查看MySQL过程代码

10/20/2015

添加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开发外,一般情况下使用的由软件包管理器(YUMAPT-GET)提供的MySQL预编译版均没有开启编译模式,这条命令对广大开发者和系统管理员来说基本上是没法用的……

既然官方提供的方案在非调试模式下不可用,那么肯定还有一种全局通用的方法。Kaijia搜索了一下发现在MySQL系统中,所有的过程储存在MySQL的proc表中,而且过程的代码也直接以明文形式储存在此表里,因此可以直接使用以下SQL语句查看过程的代码:

如果过程的代码过长,此语句显示的结果长的比较丑,但并不会影响阅读。

此外值得一提的是,如果需要修改MySQL过程的代码,可以系统提供的使用“ALTER PROCEDURE”语法。