所在的位置: mysql >> mysql前景 >> 如何清理MySQL日志

如何清理MySQL日志

前言

服务器爆满,清理MySQL的日志可以立马释放空间,本文对常用日志清理做了详细的阐述

1.错误日志

错误日志对mysql的启动、运行、关闭过程进行了记录,

MySQLDBA在遇到问题时候,第一时间应该查看这个错误日志文件,

该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,

这个error日志文件类似于oracle的alert文件。

可以通过“showvariableslike‘log_error’;”命令查看错误日志的路径

1.1配置方法

默认是启动的,一般以err做后缀名,需要在参数文件中配置

先找到参数文件

log_error=/usr/local/mysql/data/error.err

1.2错误日志清理

[root

jeamesdata]#mvlog.errlog-old.err

mysqlFLUSHLOGS;

服务器将关闭并重新打开日志文件

C:\Users\wangdmysqladmin-uroot-p-Pflush-logs

2.慢查询日志

当查询超过一定时间没有返回结果的时候,才会记录进慢查询日志。

慢查询日志可以帮助DBA找出执行效率缓慢的SQ语句,为数据库优化工作提供帮助。

慢查询日志默认是不开启的,建议开启慢查询日志。

当需要进行采样分析时手工开启。

2.1功能

MySQL的慢查询日志是MySQL提供的一种日志记录,

它用来记录在MySQL中响应时间超过阀值的语句,

具体指运行时间超过long_query_time的值的SQL,则会被记录到慢查询日志中。

mysqlshowvariableslike‘%long_query_time%’;

long_query_time的默认值为10,意思是运行10S以上的语句。

默认情况下,Mysql数据库并不启动慢查询日志,

需要我们手动来设置这个参数,

当然,如果不是调优需要的话,一般不建议启动该参数,

因为开启慢查询日志会或多或少带来一定的性能影响。

慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

2.2慢查询日志开启

关于慢查询日志,主要涉及到下面几个参数:

slow_query_log:是否开启慢查询日志功能(必填)

slow_query_log_file:慢查询日志文件及位置

long_query_time:超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填)

也就是说,只有满足以上三个条件,“慢查询功能”才可能正确开启。

mysqlshowvariableslike‘%slow_%’;

mysqlsetglobalslow_query_log=1;

mysqlshowvariableslike‘%slow_%’;

showvariableslike‘%slow_query_log_file%’;

参数文件修改如下:

修改配置文件my.cnf,在[mysqld]下的下方加入

[mysqld]

slow_query_log=ON

slow_query_log_file=/usr/local/mysql/data/slow.log

long_query_time=1

重启MySQL服务servicemysqldrestart即可

2.3清除慢查询日志

select*fromperformance_schema.global_variableswherevariable_namein

(‘slow_query_log’,‘log_output’,‘slow_query_log_file’,‘long_query_time’)

SETGLOBALslow_query_log=‘OFF’;

mysqlflushslowlogs;

2.4慢查询写到表里

–log_output默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

mysqlshowvariableslike‘%log_output%’;

#默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

mysqlsetgloballog_output=‘FILE’;

mysqlsetgloballog_output=‘TABLE’;

无法直接删除,如果直接删除的话,

会出现“ERROR(HY):Youcan’tuselockswithlogtables.”的错误提示

SETGLOBALslow_query_log=‘OFF’;

RENAMETABLEslow_logTOslow_log_temp;

DELETEFROMslow_log_tempWHEREstart_timeDATE(NOW());

RENAMETABLEslow_log_tempTOslow_log;

SETGLOBALslow_query_log=‘ON’;

3.全查询日志

全查询日志记录了所有对数据库请求的信息,

正确的SQL才会被记录下来(错误写法的SQL语句不会记录),

包括show、查询select语句、权限不足的语句(ERROR(42):Accessdeniedforuser)。默认位置在变量datadir下,默认文件名为:主机名.log。

MySQL的通用查询日志默认情况下是不开启的,当需要进行采样分析时手工开启

mysqlshowvariableslike‘general_log’;

mysqlshowvariableslike‘%general_log_file%’;

3.1日志开启

mysqlSETGLOBALgeneral_log=1;

mysqlshowvariableslike‘general_log’;

默认名称为:变量datadir下:主机名.log

查询日志记录查询语句与启动时间,建议不是在调试环境下不要开启查询日志,

因为会不断占据你的磁盘空间,并会产生大量的IO。

3.2日志清理

##log清理

SETGLOBALgeneral_log=‘OFF’;

[root

jeamesdata]#mvjeames.logjeames_old.log

mysqlflushgenerallogs;

##如果你的日志是写到表里的,则通过以下方法

SETGLOBALgeneral_log=‘OFF’;

RENAMETABLEgeneral_logTOgeneral_log_temp;

DELETEFROMgeneral_log_tempWHEREevent_timeDATE(NOW());

RENAMETABLEgeneral_log_tempTOgeneral_log;

SETGLOBALgeneral_log=‘ON’;

4.二进制日志

Binlog是MySQL中一个很重要的日志,记录了对数据库进行变更的操作,

但是不包括select操作以及show操作,因为这类操作对数据库本身没有没有修改。

如果想记录select和show的话,那就需要开启全查询日志。

另外binlog还包括了执行数据库更改操作时间和执行时间等信息。

binlog是MySQLServer层记录的二进制日志文件,逻辑层面

4.1二进制日志配置

注:若想开启二进制日志,则必须加上server_id参数,如下

[mysqld]

log-bin

server_id=

4.2作用

(1)恢复recovery。某些数据的恢复需要二进制日志,在全库文件恢复后,

可以在此基础上通过二进制日志进行point-to-time的恢复(mysqldump全量恢复+binlog增量恢复)。

(2)复制(replication)。其原理和恢复类似,

通过复制和执行二进制日志使得一台远程的mysql数据库(slave)于一台mysql数据库(master)进行实时同步。

4.3清理二进制日志

mysqlshowvariableslike‘%binlog_expire_logs_seconds%’;

mysql8开始expire_logs_days废弃

启用binlog_expire_logs_seconds设置binlog自动清除日志时间

保存时间以秒为单位;默认259230天

小时;天;天

##自动删除

mysqlsetglobalbinlog_expire_logs_seconds=;

mysqlsetglobalbinlog_expire_logs_seconds=2592;

##手动删除

默认日志文件达到1G都会重新生成一个新的二进制日志文件

mysqlselect

max_binlog_size;

#binlog.025之前的日志都会被删除

mysqlPURGEBINARYLOGSTO‘binlog.025’;

#时间’-04-:59:59’之前的日志都会被删除

mysqlPURGEBINARYLOGSBEFORE‘-04-:59:59’;

#清空历史二进制日志,从001开始重新

mysqlRESETMASTER;

mysqlselect

binlog_format;




转载请注明:http://www.aierlanlan.com/cyrz/2339.html