在MySQL中,有四种日志,分别是错误日志,二进制日志,查询日志,慢查询日志。他们分别记录着MySQL不同方面的数据或着踪迹,在数据库的维护和调优工作中,日志有着重要的作用。

一、错误日志

错误日志中记录着MySQL服务在启动、运行、停止过程当中,发生错误时的相关信息。所以在MySQL服务发生故障时,我们应该首先查看该错误日志,了解故障的原因。

错误日志的存储路径由log-error参数来指定,若不指定,将保存在datadir下,并以host_name.err命名。

二、二进制日志(binlog日志)

二进制日志记录了所有的DDL(数据定义语句)语句和DML(数据操纵语句)语句,,但不包括数据查询语句,二进制日志在数据的恢复工作中起着极其重要的作用

存储路径用log-bin参数指定,若没有指定,用host_name-bin命名,并默认保存在datadir

二进制日志有三种格式:statement、row、mixed,用binlog_format参数指定

1、statement(语句)

在MySQL 5.1的版本之前都采用这种格式。它记录的是对数据造成修改的语句。

优点:记录清晰易读,日志量少,对IO影响较小

缺点:当进行主从复制时,从库复制过去的日志会出错,导致从库执行完日志后,数据与主库的有差别

2、row(行)

它记录的是每一行数据的变更记录,而不是一条语句。

举个栗子:update emp set department=”sales”;

这条语句更新了emp表中的部门字段,每一行都发生了变化。对于statement格式的binlog,它只记录这一条语句,对于row格式的binlog,记录的是该表中每一行数据的更新记录,假如这张表中有100行主数据,那row格式日志就有100条记录,而statement格式只有一条。

优点:记录了每一行的更新细节,复制时不会出现错误

缺点:日志量大,对IO的影响较大。

3、mixed(混合)

这是目前MySQL默认的格式,它混合了statement和row两种格式,结合了他们的各自的优点,在不同情况下用不同的格式来存储,避开了前两种格式单一使用的缺点。

查看二进制日志

用mysqlbinlog工具查看

mysqlbinlog /data/mysql-bin.000007

删除二进制日志,下面介绍四种方法

(1)、mysql> reset master ;

(2)、mysql>purge master logs to 'mysql-bin-00005';

(3)、mysql>purge master logs before '2019-03-03 23:23:23';

(4)、在【mysqld】中定义参数expire_logs_days,指定日志的有效期,过了这个天数自动删除

三、查询日志

记录了客户端所有语句,而二进制日志binlog只记录DDL和DML,不包含查询的语句

开启查询日志:general_log=1    默认不启用

指定日志路径:general_log_file=

在查询日志和慢查询日志中,都可以通过参数:log-output=table/file/none   指定日志保存在表、文件(默认)、不保存

这里的表指的是,mysql库中的general_log表,慢查询日志是mysql.slow_log

注意:如果开启了查询日志,但没有指定general_log_file和log-output,日志将默认保存在datadir下,并以host_name.log命名

此日志按照一般文本查询即可,比如more,less,tail等

在查询日志,也就是log日志中,记录了数据库所有的操作,对于访问频繁的系统来说,该日志对系统的性能影响较大,一般情况下建议关闭

四、慢查询日志

记录了所有执行时间超过参数long_query_time的值(单位:秒,默认10s),并且扫描记录大等于min_examined_row_limit的所有语句

在默认情况下,慢查询日志不会记录两类语句:管理语句和不使用索引索引查询的语句

管理语句包括:alter tabel , analyze table , check table , create index , drop index , optimize table, repair table

开启慢日志:slow_query_log=0/1   默认开启

指定存储路径:slow_query_log_file=     

跟查询日志一样,慢查询日志也通过log-output参数来指定将日志保存到表或文件中,需要注意的是,记录到表中的慢查询日志的时间只能精确到秒,而保存在文件中,时间可以精确到微秒。

查看慢日志:按照查看文本的方法查看即可

如果慢查询日志中的记录过多,可以通过mysqldumpslow工具进行汇总,他会将语句中变量不同的语句汇总到一起,变量用N来代替。

慢查询日志对于我们提高SQL语句的性能方面有很大的帮助,建议开启经常进行分析查看。比如我们可以通过分析慢查询日志,找到最消耗时间的SQL语句,进一步优化。

 

如有错误,敬请指正~~