MySQL日志之General Query Log(通用查询日志)

1. 什么是通用查询日志

通用查询日志(General Query Log)是用来记录用户的所有操作,包括启动和关闭mysql服务、所有用户的连接开始时间和截止时间、发给mysql数据库服务器的所有SQL指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确的定位问题。

2. 查看当前状态

1
2
3
4
5
6
7
8
mysql> SHOW VARIABLES LIKE '%general%';
+------------------+--------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------+
| general_log | OFF |
| general_log_file | /usr/local/mysql/data/xiaoyuge-2.log |
+------------------+--------------------------------------+
2 rows in set (0.00 sec)

general_log可以查看通用查询日志处于关闭状态,从general_log_file可以查看日志的目录以及文件名称

3. 启动日志

方式一

修改my.cnf或者my.ini配置文件来设置,在[mysqld]组下加入log选项,并重启mysql服务。格式如下:

1
2
3
[mysqld]
general_log=ON
general_log_file=/usr/local/mysql/data/xiaoyuge-2.log #日志文件所在目录路径以及日志文件名

如果不指定目录和文件名,通用查询日志将默认存储在mysql数据目录中的hostname.log文件中,hostname表示主机名。

方式二

通过命令执行:

1
2
SET GLOBAL general_log=on;  -- 开启通用查询日志
SET GLOBAL general_log_file='/usr/local/mysql/data/xiaoyuge-2.log'; -- 设置日志文件保存位置

4. 常用操作

4.1 查看日志

通用查询日志时以文本文件的形式存储在文件系统中的,可以使用文本编辑器直接打开日志文件。每台mysql服务器的通用查询日志内容是不同的。

可以看出,该日志非常清晰的记录了客户端所有的行为

4.2 停止日志

修改my.cnf或者my.ini配置文件来设置,在[mysqld]组下的general_log值设置为OFF或者把general_log一项注释掉。修改保存后,再重启MySQL服务,即可生效

1
2
[mysqld]
general_log=OFF

或者使用命令:

1
SET GLOBAL general_log=off;

4.3 删除/刷新日志

如果数据的使用非常频繁,那么通用查询日志会占用服务器非常大的磁盘空间。数据管理员可以删除很长时间之前的查询日志,以保证mysql服务器上的硬盘空间。

在Mysql中可以使用mysqladmin命令来开启新的通用查询日志,新的查询日志会直接覆盖旧的查询日志,不需要手动删除。语法如下:

1
mysqladmin -uroot -p flush-logs

需要注意的是,如果希望备份旧的通用查询日志,必须先将旧的日志文件拷贝出来或者改名。然后,再执行 mysqladmin 命令。

除了上述方法之外,还可以手工删除通用查询日志。删除之后需要重新启动 MySQL 服务。重启之后就会生成新的通用查询日志。如果希望备份旧的日志文件,可以将旧的日志文件改名,然后重启 MySQL 服务。