« 上一篇

基于general_log的mysql日志追踪​

基于mysql的general_log 可以实现日志追踪,这在平时的开发调试中非常有用。

首先可以通过 

show variables like 'general_log';  -- 查看日志是否开启

来查看mysqlServer的日志状态,默认是关闭的,因为这个日志的量非常大对资源是一个比较大的开销,所以千万不要在生产环境中开启这个功能!

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

接下来通过

set global general_log=on; -- 开启日志功能

来开启日志功能,再次查询

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

general 可以将日志以文件和数据库两种形式进行记录,记录到数据表中要比记录到文件耗费更多的系统资源,所以推荐记录到文件的用法。

通过下边命令可以设置记录到文件还是数据表。

set global log_output='file/table';

通过下边命令可以查看当前的记录类型

show variables like 'log_output';  -- 看看日志输出类型  table或file
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

可以看到默认是存的file

查看日志文件的位置

show variables like 'general_log_file';  -- 看看日志文件保存位置
+------------------+------------------------------------+
| Variable_name    | Value                              |
+------------------+------------------------------------+
| general_log_file | /usr/local/mysql/var/localhost.log |
+------------------+------------------------------------+
1 row in set (0.00 sec)

重新设置日志文件位置

set global general_log_file='/data/mysql_log/general.log'; -- 设置日志文件保存位置

如果报错

ERROR 1231 (42000): Variable 'general_log_file' can't be set to the value of '/data/mysql/general.log'

检查一下目录权限,将目录的owner改为mysql,注意root目录下即使改了owner也是不行的


关闭日志功能

set global general_log=off; -- 关闭日志功能