使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。
跳转到 information_schema 表
-- 跳转到 information_schema 数据库
USE information_schema;
-- 显示进程列表
SHOW PROCESSLIST;
或者:
SELECT * FROM information_schema.`PROCESSLIST` WHERE info IS NOT NULL;
-- log_output=’FILE’ 表示将日志存入文件,默认值是FILE
-- log_output=’TABLE’表示将日志存入数据库,这样日志信息就会被写入到 mysql.slow_log 表中.
-- 将日志写入表中
SET GLOBAL log_output = 'TABLE';
-- 开启日志
SET GLOBAL general_log = 'ON';
-- SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF'; //日志关闭
注意:查询或刷新 mysql.general_log 表都会生成日志,查询时人为过滤一下。
SELECT * FROM mysql.general_log ORDER BY event_time DESC;
mysql.general_log 表不允许使用 DELETE 进行清空操作,否则出现以下报错,所以只能使用 TRUNCATE
DELETE FROM mysql.general_log;
------------------------------------------------------------
[SQL] DELETE FROM mysql.general_log;
[Err] 1556 - You can't use locks with log tables.
-- 截断的表的名称或要删除其全部行的表的名称。
TRUNCATE TABLE mysql.general_log;
注意:在查询到所需要的记录之后,应尽快关闭日志模式,占用磁盘空间比较大
-- 将日志写入表中
SET GLOBAL log_output = 'TABLE';
-- 关闭日志
SET GLOBAL general_log = 'OFF';
相关参数一共有3:general_log、log_output、general_log_file
-- 查看日志是否开启
SHOW VARIABLES LIKE 'general_log';
-- 开启日志功能
SET GLOBAL general_log='ON';
-- 关闭日志功能
SET GLOBAL general_log='OFF';
-- 看看日志文件保存位置
SHOW VARIABLES LIKE 'general_log_file';
-- 设置日志文件保存位置 C:\ProgramData\MySQL\MySQL Server 5.5\Data\DESKTOP-NUR8UC7.log
SET GLOBAL general_log_file='C:\\tmp.log';
-- 看看日志输出类型 TABLE 或 FILE
SHOW VARIABLES LIKE 'log_output';
-- 设置输出类型为 TABLE
SET GLOBAL log_output='TABLE';
-- 设置输出类型为FILE
SET GLOBAL log_output='FILE';
当开启 mysql.general_log 后,mysql中的所有操作将会记录下来,这样 mysql.general_log 文件就会产生很大的文件,此时需要清空此文件来释放磁盘空间
网上有人建议直接删除该文件,不重启系统也会自动生成,但是通过测试,系统不会自动生产该文件
如果删除掉,重启mysql以后,general_log出现异常。
清空该表,具体操作如下:
-- 关闭日志
SET GLOBAL general_log = 'OFF';
-- 将表 general_log 名称修改为表 general_log2
RENAME TABLE mysql.general_log TO mysql.general_log2;
-- 清空 general_log2中的数据
DELETE FROM mysql.general_log2;
注意:当DELETE FROM mysql.general_log2执行删除表数据时,发现操作系统的数据文件还是存在的,需要手动删除该数据文件,再继续下面数据操作步骤
-- 优化 general_log2 表,重新利用未使用的空间,并整理数据文件的碎片
OPTIMIZE TABLE general_log2;
-- 将 general_log2 的名称改回 general_log
RENAME TABLE mysql.general_log2 TO mysql.general_log;
-- 开启日志
SET GLOBAL general_log = 'ON';