一、需求说明
由于服务器的数据库莫名奇妙自动删除,为此急需开启mysql日志,进行记录,从而找到为啥会自动删除的原因。在开启之后,又因为日志里记录的时间格式是UTC,对于定位原因不便,为此将日志的格式调整为SYSTEM。
二、开启mysql日志
2.1 general log
在默认的情况下,MySQL是不会启动打开general_log机制的,log文件记录着MySQL的SQL语句,含:SELECT语句、DML语句、DDL语句、DCL语句、连接和断开MySQL数据库语句。
MySQL会把它收到的所有SQL语句按照接收的顺序依次记录在general_log文件中。因此,我们需要注意的是,接收的SQL语句的顺序,并不等于SQL语句就是按照这个接受的顺序来执行,因为有的时候,一些SQL可能需要等待其他锁被释放后才会被真正的执行,SQL语句的执行顺序是和binlog中的顺序是相匹配的。
假如我们执行一个select查询语句,在binlog中不会记录这样的SQL语句,但是在general log中就会记录这个select查询语句。
General log默认不开启的原因有两个:
日志存储非常大,因为所有的操作都会被记录下来,所以对磁盘来说是一个很大的压力。
对MySQL数据的性能也有一定的影响。所以,我们一般不会开启这个general log记录的功能,只有在排查某些错误的时候,才会临时打开一下,等到debug完成之后,再把它关闭。
2.2 类型特点总结
由于mysql日志general_log分为临时型、永久型。
临时型:通过进入mysql中通过sql语句进行配置,mysql重启就会失效。
永久型:通过进入服务器找到my.cnf进行添加配置语句。mysql重启不会失效。
2.3 临时型
mysql> show variables like 'general_log';--查看general_log开启情况,on 开启、off未开启
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | ON |
+---------------+-------+
1 row in set (0.01 sec)
如果未开启的情况下:通过以下sql语句设置。
mysql> set global general_log=on; -- 对全局开启general log
Query OK, 0 rows affected (0.03 sec)
查看日志文件存储位置:
mysql> show variables like 'general_log_file';
+------------------+--------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------+
| general_log_file | /var/log/mysql/mysql_general_log.log |
+------------------+--------------------------------------+
1 row in set (0.00 sec)
查看日志输出类型table/file
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
1 row in set (0.00 sec)
设置成功之后,不用重启mysql,否则会失效的。
2.4 永久型
需要到服务器中找到my.cnf,一般在etc/my.cnf,要是找不到,可以通过linux语句查找:
find / -name "my.cnf"
根据查询出来的,进行定位即可。
修改配置文件my.cnf:本人的配置如下,general_log_file这是日志文件存储路径,可自己自定义,注意一下文件权限即可以及注意一下代码位置必须是:[mysqld]以下。
[mysqld]
general_log=1
general_log_file=/www/server/data/iZwz993i8ccoxpwbvosvz7Z.log
log_output=FILE
配置好,重启mysql服务,重启mysql服务能正常启动,即说明配置成功了一半,然后随便进行数据库查询一次,然后去日志里看一下是否有记录,要是没有记录,通过临时型语句查询配置是否成功:
show variables like 'log_timestamps';
show variables like 'general_log';
show variables like 'general_log_file'; /www/server/data/iZwz993i8ccoxpwbvosvz7Z.log
show variables like 'log_output';//FILE
2.5 日志时间格式
由于默认的general_log日志的时间格式为:UTC,不方便通过时间定位日志信息。
为此,我们需要将日志格式改为:SYSTEM
2.5.1 临时型
通过sql语句调整:
查看当前时间格式类型:
mysql> show variables like 'log_timestamps';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| log_timestamps | SYSTEM |
+----------------+--------+
1 row in set (0.00 sec)
如果时间格式不是SYSTEM,可以通过一下语句进行修改:
SET GLOBAL log_timestamps= 'SYSTEM';
2.5.2 永久型
同样是在my.cnf配置文件中,在[mysqld]下,添加以下代码即可:
[mysqld]
log_timestamps=SYSTEM
然后启动mysql服务即可。
效果如下:
三、总结
希望大家多多关注与评论,本文章能给大家有点帮助,就是本人最大的荣幸!