MySQL数据库中,如何记录SQL执行语句

WBOY
リリース: 2016-06-07 15:52:21
オリジナル
1325 人が閲覧しました

今天有个同事让我帮忙看一张报表, 这张报表是一个开源的系统产生出来的,后台数据库用的是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了,毕竟很多开源的软件都是用这个数据库作为后台的。

 

 

 

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート