MySQL 日志查询日志

举报
Ustinian_2022 发表于 2022/07/27 17:51:39 2022/07/27
【摘要】 28.1 查询日志MySQL中的查询日志保存在文本文件中,能够记录MySQL中的所有数据操作。本节简单介绍如何开启、查看和删除MySQL中的查询日志。28.1.1 开启查询日志MySQL默认情况下没有开启查询日志,如果需要开启查询日志,则需要在my.cnf文件或者my.ini文件的[mysqld]选项下进行配置。例如,配置开启MySQL的查询日志:[mysqld]general_log = ...

28.1 查询日志

MySQL中的查询日志保存在文本文件中,能够记录MySQL中的所有数据操作。本节简单介绍如何开启、查看和删除MySQL中的查询日志。


28.1.1 开启查询日志

MySQL默认情况下没有开启查询日志,如果需要开启查询日志,则需要在my.cnf文件或者my.ini文件的[mysqld]选项下进行配置。例如,配置开启MySQL的查询日志:


[mysqld]
general_log = 1
general_log_file = /data/mysql/log/general_log/general_statement.log
log_output = FILE

各种配置说明如下:

·general_log:表示是否开启查询日志。此项设置为1或者不带任何值,都可以开启查询日志;设置为0或者在my.cnf文件或my.ini文件中没有配置此项,则不会开启查询日志。

·general_log_file:查询日志的文件目录,笔者这里配置的是日志的完整路径。

·log_output:表示日志的存储方式,可以有3种取值,TABLE表示将查询日志存储到数据表中;FILE表示将查询日志保存到文件中;NONE表示不保存日志信息到数据表和文件中。

注意:开启查询日志时,如果没有显示指定general_log_file选项和log_output选项的值,则MySQL会将查询日志保存到DATADIR选项指定的目录下(也就是数据库中的数据目录),默认的文件名称为host_name.log,其中,host_name为MySQL的主机名。

配置开启查询日志之前,首先查看/data/mysql/log/general_log目录下的文件信息。


[root@binghe150 ~]# 
[root@binghe150 ~]# ll /data/mysql/log/general_log/
total 0

当未配置MySQL的查询日志时,/data/mysql/log/general_log/目录下不存在任何文件。

开启查询日志配置完成后,需要重启MySQL服务才能生效。


[root@binghe150 ~]# service mysqld restart
Shutting down MySQL..... SUCCESS! 
Starting MySQL........ SUCCESS!

也可以在MySQL命令行中指定开启MySQL的查询日志。


mysql> SET GLOBAL general_log = 1;
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL general_log_file = '/data/mysql/log/general_log/general_statement.log'; 
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL log_output = 'file';
Query OK, 0 rows affected (0.00 sec)

此时,再次查看/data/mysql/log/general_log/目录下的文件。


[root@binghe150 ~]# ll /data/mysql/log/general_log/
total 4
-rw-r----- 1 mysql mysql 547 Jan 17 11:39 general_statement.log

当开启查询日志配置完成后,MySQL会自动创建general_log_file选项指定的日志文件。


28.1.2 查看查询日志

如果log_output选项配置的是将查询日志保存到文件中,则日志文件的格式为纯文本格式,可以直接查看日志文件中的内容。

例如,向goods数据库下的t_goods_category数据表中插入一条数据,然后查询t_goods_category数据表中的数据,并查看查询日志中的内容。

(1)向数据表插入数据。


mysql> USE goods;
Database changed
mysql> INSERT INTO t_goods_category
    -> (id, t_category)
    -> VALUES
    -> (6, '食品');
Query OK, 1 row affected (0.01 sec)

(2)查看数据表数据。


mysql> SELECT * FROM t_goods_category;
+----+---------------------+
| id | t_category          |
+----+---------------------+
|  1 | 女装/女士精品       |
|  2 | 户外运动            |
|  3 | 男装                |
|  4 | 童装                |
|  5 | 运动                |
|  6 | 食品                |
+----+---------------------+
6 rows in set (0.01 sec)

(3)查看查询日志中的内容。


[root@binghe150 ~]# cat /data/mysql/log/general_log/general_statement.log
/usr/local/mysql/bin/mysqld, Version: 8.0.18 (binghe edition). started with:
Tcp port: 3306  Unix socket: /data/mysql/run/mysql.sock
Time                 Id Command    Argument
2020-01-17T03:39:34.706121Z         8 Query     SET GLOBAL general_log_file = '/data/mysql/log/
general_log/general_statement.log'
/usr/local/mysql/bin/mysqld, Version: 8.0.18 (binghe edition). started with:
Tcp port: 3306  Unix socket: /data/mysql/run/mysql.sock
Time                 Id Command    Argument
2020-01-17T03:39:49.435725Z         8 Query     SET GLOBAL log_output = 'file'
2020-01-17T03:53:06.278557Z         8 Query     SELECT DATABASE()
2020-01-17T03:53:06.278867Z         8 Init DB   goods
2020-01-17T03:53:49.479114Z         8 Query     INSERT INTO t_goods_category
(id, t_category)
VALUES
(6, '食品')
2020-01-17T03:54:04.014541Z         8 Query     SELECT * FROM t_goods_category

查询日志中记录了所有的SQL语句的信息。


28.1.3 删除查询日志

查询日志以纯文本文件的格式保存在服务器磁盘上。可以直接删除查询日志。如果需要重新建立查询日志,则需要在MySQL命令行中执行FLUSH LOGS命令或者在服务器命令行中执行mysqladmin flush-logs命令。

(1)删除查询日志。


rm -rf /data/mysql/log/general_log/general_statement.log

此时,查看/data/mysql/log/general_log目录下的文件。


[root@binghe150 ~]# ll /data/mysql/log/general_log
total 0

结果显示,查询日志文件已经被删除。

(2)刷新查询日志。

可以在MySQL命令行中执行如下命令刷新日志。


mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.02 sec)

也可以在服务器命令行中执行如下命令刷新日志。


[root@binghe150 ~]# mysqladmin -uroot -p flush-logs
Enter password:

日志刷新成功,再次查看/data/mysql/log/general_log目录下的文件。


[root@binghe150 ~]# ll /data/mysql/log/general_log 
total 4
-rw-r----- 1 mysql mysql 519 Jan 17 12:33 general_statement.log

可以看到,已经重新创建了查询日志文件。


28.1.4 关闭查询日志

关闭查询日志就比较简单了,只需要在my.cnf文件或者my.ini文件的[mysqld]选项下,将general_log选项配置为0,或者删除general_log选项。


[mysqld]
general_log = 0

配置完成后,重启MySQL才能生效。

也可以在MySQL命令行中执行如下命令关闭查询日志。


mysql> SET GLOBAL general_log = 0;
Query OK, 0 rows affected (0.00 sec)

当关闭查询日志后删除查询日志,再执行刷新日志的操作,MySQL将不再重新创建查询日志文件。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。