欢迎光临
我们一直在努力

mysql-事实跟踪sql执行记录的方法

我们在对mysql优化或对项目排错的时候,经常需要用到跟踪mysql都执行了那些语句,今天在群里看到有朋友问怎么才能事实跟踪mysql都执行了那些语句呢!其实跟踪mysql非常的简单,今天咱们就介绍一下跟踪mysql执行语句的简单方法。

我们可以利用监控日志的方式来监控mysql都执行了那些语句,对于mysql集群中的机器,我们都开启了一个二进制日志的,不过这个二进制日志是给集群中的另外的mysql机器看的,我们可以开启另一个日志功能,general_log日志可以用来查看和监控mysql都执行了那些语句,例如mysql的增删改查等。下面我详细的介绍下开启的方法;

  • 首先要登录mysql控制台
[root@huawei ~]# /usr/local/mysql/bin/mysql -u root -h 127.0.0.1 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3683
Server version: 8.0.15 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  • 查看是否开启general_log日志记录
mysql> show variables like '%general_log%';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| general_log      | OFF                    |
| general_log_file | /data/mysql/huawei.log |
+------------------+------------------------+
2 rows in set (0.00 sec)

上面general_log日志状态为OFF,是关闭状态,我们下面需要打开他,下面的general_log_file是日志的路径,开启日志后,我们可以用命令查看这个日志文件,我们下面先开启日志。

  • general_log_file日志开启
mysql> set GLOBAL general_log=ON;
Query OK, 0 rows affected (0.02 sec)
  • 查看general_log_file日志是否成功启动
mysql> show variables like '%general_log%';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| general_log      | ON                     |
| general_log_file | /data/mysql/huawei.log |
+------------------+------------------------+
2 rows in set (0.00 sec)

上面的general_log状态为ON了,说明日志启动了,下面我们退出mysql,然后用tailf命令来监控事实的mysql语句执行动态,当然你也可以用其他的命令,如tail,cat等等。

[root@huawei ~]# tailf /data/mysql/huawei.log
2019-03-30T02:53:12.037842Z	 5873 Query	SELECT  t.*, tt.*, tr.object_id FROM wp_terms AS t  INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') AND tr.object_id IN (2817, 3056, 3250, 3572, 6274, 7093, 7227, 7306, 7360, 7415, 132356, 161089) ORDER BY t.name ASC
2019-03-30T02:53:12.039515Z	 5873 Query	SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (2817,3056,3250,3572,6274,7093,7227,7306,7360,7415,132356,161089) ORDER BY meta_id ASC

general_log日志记录了所有的sql执行语句,所以你要是一直打开着,这个文件会飞速的增长,那样就会占用非常大的空间,所以平时建议大家把这个日志关闭。

  • general_log关闭方法,登录mysql控制台,执行下面的语句
mysql> set GLOBAL general_log=OFF;
Query OK, 0 rows affected (0.03 sec)

赞(1) 打赏
原创文章转载请注明出处:爱编程 » mysql-事实跟踪sql执行记录的方法
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

爱编程、一个运维兼程序员的博客!

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏