MySQL数据库中,如何记录SQL执行语句
今天有个同事让我帮忙看一张报表, 这张报表是一个开源的系统产生出来的,后台数据库用的是MySQL.问题是一张报表的数据是错误的,当时另外一张报表是对的,所以希望能够找出后台逻辑,这样可以对报表进行修改。 这是我第一次接触MySQL,所以说需要时间研究一
今天有个同事让我帮忙看一张报表, 这张报表是一个开源的系统产生出来的,后台数据库用的是MySQL.问题是一张报表的数据是错误的,当时另外一张报表是对的,所以希望能够找出后台逻辑,这样可以对报表进行修改。
这是我第一次接触MySQL,所以说需要时间研究一下。当时的想法是像SQL Server或者Oracle抓Trace看到运行的SQL语句。
开始连接到MySQL,看了一下Help然后用Root超级用户登录,一直提示错误无法连接到Localhost,再查看到有个参数是P指定端口,然后把端口加进去就可以连接上了。
登录以后运行SHOW PROCESSLIST,但是只能看到存在的一些SPID,没有详细的SQL语句。
之后就想着找一个GUI的工具抓Trace,看到其实MySQL提供了一些Log是可以记录执行的SQL以及允许缓慢的SQL。命令如下:
-- 打开sql执行记录功能
set global log_output='TABLE'; -- 输出到表
set global log=ON; -- 打开所有命令执行记录功能general_log, 所有语句: 成功和未成功的.
set global log_slow_queries=ON; -- 打开慢查询sql记录slow_log, 执行成功的: 慢查询语句和未使用索引的语句
set global long_query_time=0.1; -- 慢查询时间限制(秒)
set global log_queries_not_using_indexes=ON; -- 记录未使用索引的sql语句
-- 查询sql执行记录
select * from mysql.slow_log order by 1; -- 执行成功的:慢查询语句,和未使用索引的语句
select * from mysql.general_log order by 1; -- 所有语句: 成功和未成功的.
-- 关闭sql执行记录
set global log=OFF;
set global log_slow_queries=OFF;
但是我运行的时候直接报错,说“unknown system variable logoutput”。
用show variables查看当前可配置选项,没有看到global log_output对应的配置项。 而且在服务器上夜找不到MYSQL的配置文档。
再看Help文档是5.1版本的,是不是因为版本问题?带着这个疑问,查询了一下@@Version,我们的是4.1的版本,再查4.1的帮助文件,就没有上面的那些配置项了。
虽然没有抓到Trace,但是由于知道需要查询的列,所以还是找到了对应的信息,然后将错误数据做了更改Report就正确了。看来有时间也要稍微了解一下MYSQL了,毕竟很多开源的软件都是用这个数据库作为后台的。
推荐阅读
-
在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
-
如何将sql执行的错误消息记录到本地文件中实现过程
-
Shell脚本中执行sql语句操作mysql的5种方法
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
用SQL语句查询数据库中某一字段下相同值的记录方法
-
MySQL中通过EXPLAIN如何分析SQL的执行计划详解
-
关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句的深入理解
-
探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句
-
mysql实战45讲读书笔记(一) 一条SQL查询语句是如何执行的
-
随机提取Access/SqlServer数据库中的10条记录的SQL语句