1. 什么是通用查询日志
通用查询日志(General Query Log)是用来记录用户的所有操作,包括启动和关闭mysql服务、所有用户的连接开始时间和截止时间、发给mysql数据库服务器的所有SQL指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确的定位问题。
2. 查看当前状态
1 | mysql> SHOW VARIABLES LIKE '%general%'; |
从general_log
可以查看通用查询日志处于关闭状态,从general_log_file
可以查看日志的目录以及文件名称
3. 启动日志
方式一
修改my.cnf
或者my.ini
配置文件来设置,在[mysqld]
组下加入log选项,并重启mysql服务。格式如下:
1 | [mysqld] |
如果不指定目录和文件名,通用查询日志将默认存储在mysql数据目录中的hostname.log
文件中,hostname表示主机名。
方式二
通过命令执行:
1 | SET GLOBAL general_log=on; -- 开启通用查询日志 |
4. 常用操作
4.1 查看日志
通用查询日志时以文本文件的形式存储在文件系统中的,可以使用文本编辑器直接打开日志文件。每台mysql服务器的通用查询日志内容是不同的。
可以看出,该日志非常清晰的记录了客户端所有的行为
4.2 停止日志
修改my.cnf
或者my.ini
配置文件来设置,在[mysqld]
组下的general_log值设置为OFF或者把general_log一项注释掉。修改保存后,再重启MySQL服务,即可生效
1 | [mysqld] |
或者使用命令:
1 | SET GLOBAL general_log=off; |
4.3 删除/刷新日志
如果数据的使用非常频繁,那么通用查询日志会占用服务器非常大的磁盘空间。数据管理员可以删除很长时间之前的查询日志,以保证mysql服务器上的硬盘空间。
在Mysql中可以使用mysqladmin
命令来开启新的通用查询日志,新的查询日志会直接覆盖旧的查询日志,不需要手动删除。语法如下:
1 | mysqladmin -uroot -p flush-logs |
需要注意的是,如果希望备份旧的通用查询日志,必须先将旧的日志文件拷贝出来或者改名。然后,再执行 mysqladmin
命令。
除了上述方法之外,还可以手工删除通用查询日志。删除之后需要重新启动 MySQL
服务。重启之后就会生成新的通用查询日志。如果希望备份旧的日志文件,可以将旧的日志文件改名,然后重启 MySQL 服务。