my sql 有类似Sql Server Profiler的工具吗?

jvhmr 2016-04-25 02:24:15
我用.net 项目调用my sql 实现事务操作,但回滚无效,

我想看看真实执行了些什么sql语句。
...全文
234 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-04-26
  • 打赏
  • 举报
回复
引用 5 楼 gikod 的回复:
[quote=引用 4 楼 yupeigu 的回复:] [quote=引用 2 楼 jvhmr 的回复:] [quote=引用 1 楼 gikod 的回复:] 如果server是开发自己用的,可以考虑general_log记录所有sql。

set global general_log = on;
执行你的程序
set global general_log = off;
相应的sql会记录在 select @@global.general_log_file 指定的文件里
这个是记录所有连接到这个my sql 的所有程序的sql命令, 还是只记录规定范围的sql 命令?[/quote] 所有的 不过你可以把这些数据插入到表里,然后直接从表里查询[/quote] 如果你的server同时会有别人用,这样筛选出你自己的sql。

MariaDB [mysql]> set log_output = 'table';
ERROR 1229 (HY000): Variable 'log_output' is a GLOBAL variable and should be set with SET GLOBAL
MariaDB [mysql]> set global log_output = 'table';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select 'a';
+---+
| a |
+---+
| a |
+---+
1 row in set (0.00 sec)

MariaDB [mysql]> set global general_log=on;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select 'a';
+---+
| a |
+---+
| a |
+---+
1 row in set (0.01 sec)

MariaDB [mysql]> set global general_log=off;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> set global log_output='file';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select * from mysql.general_log;
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| event_time          | user_host                    | thread_id | server_id | command_type | argument                   |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| 2016-04-25 19:02:15 | root[root] @ localhost [::1] |         3 |         1 | Query        | select 'a'                 |
| 2016-04-25 19:02:24 | root[root] @ localhost [::1] |         3 |         1 | Query        | set global general_log=off |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
2 rows in set (0.00 sec)

MariaDB [mysql]> show columns from mysql.general_log;
+--------------+---------------------+------+-----+-------------------+-----------------------------+
| Field        | Type                | Null | Key | Default           | Extra                       |
+--------------+---------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp           | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext          | NO   |     | NULL              |                             |
| thread_id    | bigint(21) unsigned | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned    | NO   |     | NULL              |                             |
| command_type | varchar(64)         | NO   |     | NULL              |                             |
| argument     | mediumtext          | NO   |     | NULL              |                             |
+--------------+---------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)

MariaDB [mysql]> select * from mysql.general_log where user_host = 'root[root] @ localhost [::1]' and thread_id = 3;
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| event_time          | user_host                    | thread_id | server_id | command_type | argument                   |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| 2016-04-25 19:02:15 | root[root] @ localhost [::1] |         3 |         1 | Query        | select 'a'                 |
| 2016-04-25 19:02:24 | root[root] @ localhost [::1] |         3 |         1 | Query        | set global general_log=off |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
2 rows in set (0.04 sec)
注意不要在生产环境上用,会有附加的开销。[/quote]
gikod 2016-04-25
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
[quote=引用 2 楼 jvhmr 的回复:] [quote=引用 1 楼 gikod 的回复:] 如果server是开发自己用的,可以考虑general_log记录所有sql。

set global general_log = on;
执行你的程序
set global general_log = off;
相应的sql会记录在 select @@global.general_log_file 指定的文件里
这个是记录所有连接到这个my sql 的所有程序的sql命令, 还是只记录规定范围的sql 命令?[/quote] 所有的 不过你可以把这些数据插入到表里,然后直接从表里查询[/quote] 如果你的server同时会有别人用,这样筛选出你自己的sql。

MariaDB [mysql]> set log_output = 'table';
ERROR 1229 (HY000): Variable 'log_output' is a GLOBAL variable and should be set with SET GLOBAL
MariaDB [mysql]> set global log_output = 'table';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select 'a';
+---+
| a |
+---+
| a |
+---+
1 row in set (0.00 sec)

MariaDB [mysql]> set global general_log=on;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select 'a';
+---+
| a |
+---+
| a |
+---+
1 row in set (0.01 sec)

MariaDB [mysql]> set global general_log=off;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> set global log_output='file';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> select * from mysql.general_log;
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| event_time          | user_host                    | thread_id | server_id | command_type | argument                   |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| 2016-04-25 19:02:15 | root[root] @ localhost [::1] |         3 |         1 | Query        | select 'a'                 |
| 2016-04-25 19:02:24 | root[root] @ localhost [::1] |         3 |         1 | Query        | set global general_log=off |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
2 rows in set (0.00 sec)

MariaDB [mysql]> show columns from mysql.general_log;
+--------------+---------------------+------+-----+-------------------+-----------------------------+
| Field        | Type                | Null | Key | Default           | Extra                       |
+--------------+---------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp           | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext          | NO   |     | NULL              |                             |
| thread_id    | bigint(21) unsigned | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned    | NO   |     | NULL              |                             |
| command_type | varchar(64)         | NO   |     | NULL              |                             |
| argument     | mediumtext          | NO   |     | NULL              |                             |
+--------------+---------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)

MariaDB [mysql]> select * from mysql.general_log where user_host = 'root[root] @ localhost [::1]' and thread_id = 3;
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| event_time          | user_host                    | thread_id | server_id | command_type | argument                   |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
| 2016-04-25 19:02:15 | root[root] @ localhost [::1] |         3 |         1 | Query        | select 'a'                 |
| 2016-04-25 19:02:24 | root[root] @ localhost [::1] |         3 |         1 | Query        | set global general_log=off |
+---------------------+------------------------------+-----------+-----------+--------------+----------------------------+
2 rows in set (0.04 sec)
注意不要在生产环境上用,会有附加的开销。
LongRui888 2016-04-25
  • 打赏
  • 举报
回复
引用 2 楼 jvhmr 的回复:
[quote=引用 1 楼 gikod 的回复:] 如果server是开发自己用的,可以考虑general_log记录所有sql。

set global general_log = on;
执行你的程序
set global general_log = off;
相应的sql会记录在 select @@global.general_log_file 指定的文件里
这个是记录所有连接到这个my sql 的所有程序的sql命令, 还是只记录规定范围的sql 命令?[/quote] 所有的 不过你可以把这些数据插入到表里,然后直接从表里查询
ACMAIN_CHM 2016-04-25
  • 打赏
  • 举报
回复
记录所有操作。
jvhmr 2016-04-25
  • 打赏
  • 举报
回复
引用 1 楼 gikod 的回复:
如果server是开发自己用的,可以考虑general_log记录所有sql。

set global general_log = on;
执行你的程序
set global general_log = off;
相应的sql会记录在 select @@global.general_log_file 指定的文件里
这个是记录所有连接到这个my sql 的所有程序的sql命令, 还是只记录规定范围的sql 命令?
gikod 2016-04-25
  • 打赏
  • 举报
回复
如果server是开发自己用的,可以考虑general_log记录所有sql。

set global general_log = on;
执行你的程序
set global general_log = off;
相应的sql会记录在 select @@global.general_log_file 指定的文件里

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧