起因是一个客户的MySQL数据的data目录下会生成一个 名为ubuntu.log的日志且文件占用空间极大,平均每2周500G,所以才产生了处理该问题的想法。后来查询了相关资料其实就是一般日志开启了,但是又未指定其路径及名称所以就会一头雾水。
MySQL的general日志是MySQL提供的一种记录所有SQL语句执行的日志文件。该日志文件可以用于调试和分析应用程序的性能问题,但在生产环境中应谨慎使用,因为会记录敏感信息,且生成的日志文件占用磁盘空间极大。
以下是MySQL的general日志配置详解:
打开MySQL配置文件my.cnf或my.ini。
在[mysqld]部分中添加以下行:
general_log=1
general_log_file=/path/to/general.log
其中,general_log参数指定是否启用general日志,1表示启用,0表示禁用;general_log_file参数指定日志文件的路径和名称。如果没有指定路径,则日志文件将保存在MySQL数据目录下。
重新启动MySQL服务器,以使更改生效。
问题解决!!!
访问MySQL服务器,并执行一些SQL查询。
使用命令tail或cat查看日志文件,以确保日志文件正在记录SQL查询。
如果不再需要日志文件,请将general_log参数设置为0,并重新启动MySQL服务器。
请注意,启用general日志会影响MySQL服务器的性能,因为每个SQL查询都会写入日志文件。因此,在生产环境中,应仅在需要时启用日志,并及时禁用它。
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
这是将日志放在mysql.general_log表中可以查询
SET GLOBAL general_log_file = '/var/lib/mysql/mysql-general.log'; -- 设置日志的位置
如果配置后文件中没有生效的话就配置为
SET GLOBAL log_output = 'TABLE,FILE';
SHOW VARIABLES LIKE 'general_log%'; -- 查看配置
SELECT DATE_FORMAT(event_time, '%Y-%m-%d %H:%i:%s') AS time,
user_host,
thread_id,
server_id,
command_type,
CAST(argument AS CHAR) AS query
FROM mysql.general_log; --查看日志
以下再推荐几种设置方式
第一种方法是通过修改MySQL配置文件来关闭日志。首先,使用vi等编辑器打开MySQL的配置文件my.cnf,找到以下两行代码:
log_error=/var/log/mysql/error.log
general_log_file=/var/log/mysql/mysql.log
将这两行代码前面加上#符号使其注释掉即可关闭日志。如果需要重新开启日志,只需将#符号去掉即可。
第二种方法是通过MySQL命令行关闭日志。打开MySQL命令行,输入以下命令:
SET global general_log=0;
SET global slow_query_log=0;
这样就可以将MySQL的普通日志和慢查询日志关闭。如果需要重新开启,只需将0改为1即可。