【数据库-MySql】mysql查看执行sql语句的记录日志

1、正在执行的sql语句

使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。

跳转到 information_schema 表

-- 跳转到 information_schema 数据库
USE information_schema;
-- 显示进程列表
SHOW PROCESSLIST;

或者:

SELECT * FROM information_schema.`PROCESSLIST` WHERE info IS NOT NULL;

2、开启日志模式

2.1、设置日志输出位置以及开启日志

-- 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'; //日志关闭

2.2、查询

注意:查询或刷新 mysql.general_log 表都会生成日志,查询时人为过滤一下。

SELECT * FROM mysql.general_log ORDER BY event_time DESC;

2.3、清空表

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;

2.4、关闭日志

注意:在查询到所需要的记录之后,应尽快关闭日志模式,占用磁盘空间比较大

-- 将日志写入表中
SET GLOBAL log_output = 'TABLE';
-- 关闭日志
SET GLOBAL general_log = 'OFF'; 

2.5、查看与操作 mysql.general_log 相关参数

相关参数一共有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';

 

2.6、mysql.general_log 文件处理

当开启 mysql.general_log 后,mysql中的所有操作将会记录下来,这样 mysql.general_log 文件就会产生很大的文件,此时需要清空此文件来释放磁盘空间

2.6.1、错误操作

网上有人建议直接删除该文件,不重启系统也会自动生成,但是通过测试,系统不会自动生产该文件

如果删除掉,重启mysql以后,general_log出现异常。

26.2、正确的操作

清空该表,具体操作如下:

-- 关闭日志
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';

 

你可能感兴趣的:(数据库-MySql)