MySQL数据库中常见的日志文件有错误日志(Error Log)、二进制日志(Binary Log)、慢查询日志(Slow Query Log)、全查询日志(General Query Log)、中继日志(Relay Log)和事务日志。

 可知日志文件是MySQL最后一层文件系统中的一部分。下面从运维角度看看这些文件:

  一、错误日志文件

    1、日志记录内容:

      错误日志记录了MySQL的启动、运行和关闭过程中的重要信息。具体来说,错误日志记录的内容包括:

      1)服务器启动、关闭过程中的信息。

      2)服务器运行过程中的错误信息。

      3)事件调试器运行一个事件产生的信息。

      4)在从服务器上启动服务器进程时产生的信息。

    2、日志作用:

      当数据库出现问题时,第一时间应该查看的就是这个错误日志文件。该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,默认情况下以err结尾。

    3、日志查看:

“show variables like ‘log_error‘’”命令查看错误日志路径,通过任何打开文本的工具或命令查看。也可以使用Perror命令查询错误代码的含义,比如:perror

    4、日志相关参数设置:

      1)日志路径log-error

my.cnf里进行设置,比如:

          log-error=/usr/local/mysql/mysqld.err

      2)警告信息是否记录至错误日志log_warnings

        默认设置为1,表示启动,可以将其设置为0以禁用;当其值大于1时表示将新大气连接时产生的“失败连接”和“拒绝访问”类的错误信息也记录至错误日志。

    5、日志清理

flush logs”命令清理错误日志。

  二、全日志查询(通用查询日志、查询日志)

    1、日志记录内容:

datadir下,默认文件名为hostname.log。在默认情况下其是不开启的。

    2、日志作用:

      当需要进行采样分析师,需要开启全日制查询。

    3、日志查看:

“show variables like ‘datadir’”命令查看日志路径,通过任何打开文本的工具或命令查看。

    4、日志相关参数设置:

      1)general_log={on|off}

        设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了这个选项。手工使用命令“set general_log=1;”开启。联动的参数是输出位置的确定--log_output

      2)log_output={table|file|none}

        如启动了全查询日志,其输出位置就由该参数确定。如果选项是none,即使使用了查询日志其也不会记录任何日志信息。

        这个变量的作用范围是全局的,可用于配置文件也可以通过set修改,属于动态变量。

      3)sql_log_off={on|off}

        用于控制是否禁止将一般查询日志类信息记录仅查询日志文件,默认为off表示不禁止记录。

        用户可以在会话基本修改此变量的值,但是必须具备相应权限。它的作用范围全局和会话通用,属于动态变量。

      4)general_log_file=file_name查询日志的日志文件名称,默认为“hostname.log”,默认在数据目录。其作用范围为全局,可用于配置文件,属于动态变量。

    5、日志清理

“flush logs”命令清理日志。

  三、慢查询日志

    1、日志记录内容:

      用来记录在MySQL中响应事件超过预先设定的阈值的语句,具体指运行事件超过long_query_time值的SQL会被记录到慢查询日志中;默认情况下不开启,需要手工设置参数。

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

    2、日志作用:

      如果不是调优需要,一般不建议启动该参数;具体应用可参考

    3、日志查看:

      可以通过"SHOW VARIABLES LIKE 'slow_query_log%';命令查看日志路径,通过任何打开文本的工具或命令查看;也可以通过命令mysqldumpslow查看。

      此外,mysqlsla/percona-toolkit等工具也可以用来查看分析慢查询日志。

    4、日志相关参数设置:

      1)slow_query_log={on|off}

        设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了这个选项。手工使用命令“set global slow_query_log=1;”开启。联动的参数是输出位置的确定--log_output。

        该参数属于动态变量,作用范围为全局级别,可用于选项文件。开启仅支持当期数据库系统,如果数据库重启则会失效;如果要永久生效,就必须通过修改配置文件my.cnf。

      2)log_output={FILE|TABLE|NONE}

        日志存储方式。‘FILE’表示将日志存入文件;‘TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。如果其值为NONE则同全日志查询一样。

        MySQL数据库支持同时两种日志存储方式,配置时以逗号隔开即可,如“log_output=FILE,TABLE;”。

        日志记录到系统的专用日志表比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,有需要能够获得更高的系统性能时首选文件存储方式。

      3)slow_query_log_file=/PATH/TO/SOMEFILE

        文件存储位置。默认存放位置为数据库文件所在目录下,名称为hostname-slow.log。通过该选项可修改慢查询资质保存路径及文件名,其作用范围全局级别,可用于选项文件,属于动态变量。

      4)long_query_time:慢查询阈值,当查询时间多余设定的阈值时记录日志。

      5)log_queries_not_using_indexes={on|off}

        设定是否两所有没有使用索引的查询操作记录到慢查询日志,默认为OFF。如果运行的SQL没有使用索引,那么即使超过阈值了也会记录在慢查询日志里面的。

        其作用范围为全局级别,可用于配置文件,属于动态变量。

 

      6)min_examined_row_limit=1000:记录那些由于查找了多余1000次而引发的慢查询。

      7)log_slow_admin_statements:记录那些慢的optimize table/analyze table/alter table语句。

      8)log_slow_slave_statements:记录由slave所产生的慢查询。

    5、日志清理

      在OS级别可以直接删除日志,也可以在MySQL提示符下使用“flush logs”命令清理日志。

  四、二进制日志

    1、日志记录内容:

      记录了对数据库进行变更的所有操作,但是不包括select和show操作,因为这类操作没有对数据库本身进行修改。另外,二进制日志还包含了执行数据库更改操作的时间等信息。

      通过命令“set sql_log_bin=1;”来开启二进制日志。具体使用可参考

    2、日志作用:

      1)恢复:某些数据的恢复需要二进制日志,在全库文件恢复后,可以在此基础上通过二进制日志进行point-to-time的恢复。

      2)复制:其原理和恢复类似,通过复制和执行二进制日志是的一台远程的Slave数据库与Master数据库进行实时同步。

    3、日志查看:

    

show binary logs;
      show master logs;
      show binlog events;
      show binlog events in 'xxxx';

      查看二进制日志的内容:mysqlbinlog binarylog_name。

    4、日志相关参数设置:

      1)log_bin={off|no}

        是否开启二进制日志。如果为mysqld设定了--log_bin选项,那么其值为ON,否则为OFF。该值仅用于显示是否启用了二进制日志,并不反映log_bin的设定值——即不放映二进制日志文件存放的具体位置(在my.cnf中定义)。

        其作用范围为全局级别,属于静态变量。

      2)binlog_cache_size=32768

        启动服务器时二进制日志的缓存大小。可以通过show global status查看binlog_cache_use/binlog_cache_disk_use的状态,根据情况判断当期该变量设置是否合适。

      3)binlog_format={row|statement|mixed}

        指定二进制日志的类型。该变量作用范围全局或会话,可用于配置文件,属于动态变量。三个值的具体含义分别如下:

        statement:表示二进制日志文件记录的事日志逻辑SQL语句。

        row:表示记录的不再是简单的SQL语句了,而是行更改情况。此时可以将InnoDB的事务隔离级别设为read committed以获得更好的并发性能。

        mixed:数据库默认采用statement,但是在一些情况会使用用row格式。

      4)binlog_stmt_cache_size=32768:基于statement格式的缓存大小。

      5)expire_logs_days={0.99}

        设定二进制日期的过期天数,超长此天数的二进制日志文件将被自动删除。默认为0,表示不起用过期自动删除功能。如果启用此功能,那么自动删除工作通常发生在MySQL启动时或FLUSH日志时。

        其作用范围为全局,可用于配置文件,属于动态变量。

      6)max_binlog_cache_size={4096…}

        设置单个二进制日志文件的最大值,单位为字节。最小值为4KB,最大值为1GB,默认为1GB。

        其作用范围为全局级别,可用于配置文件,属于动态变量。

      7)max_binlog_stmt_cache_size=18......:基于statement格式的二进制日志文件的最大缓存大小。

      8)sql_log_bin={on|off}

        用于控制二进制日志信息是否记录仅日志文件。默认为ON,表示启用记录功能。

        用户可以在会话级别修改此变量的值,但其必须具有超级权限。其作用范围为全局和会话级别,属于动态变量。

      9)--binlog-do-db和--binlog-ignore-db:指定二进制日志文件记录哪些数据库操作。默认值为空,则表示将所有库的日志同步到二进制日志。

      10)sync_binlog=N

        每个N秒将缓存中的二进制日志记录写会硬件。默认为0,表示不同步。任何正数值都表示对二进制没多少次写操作之后同步一次。

      11)log_slave_updates:该参数在搭建master=>slave=>slave的架构时,需要配置。

    5、日志清理

      通过变量expire_logs_days或者使用“flush logs”命令清理日志。