前言
服务器爆满,清理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.errmysqlFLUSHLOGS;
服务器将关闭并重新打开日志文件
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.logmysqlflushgenerallogs;
##如果你的日志是写到表里的,则通过以下方法
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;