首页 > 数据库 >MySQL维护之日志文件

MySQL维护之日志文件

时间:2022-09-20 14:36:30浏览次数:112  
标签:log 记录 二进制 查询 MySQL 日志 维护

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

  阅读MySQL架构原理之体系架构 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)可知日志文件是MySQL最后一层文件系统中的一部分。下面从运维角度看看这些文件:

  一、错误日志文件

    1、日志记录内容:

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

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

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

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

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

    2、日志作用:

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

    3、日志查看:

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

    4、日志相关参数设置:

      1)日志路径log-error

        默认情况下,错误日志存放在数据目录中,名称为“hostname.err”,当然也可以用户自定义路径。在配置文件my.cnf里进行设置,比如:

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

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

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

    5、日志清理

      在OS级别可以直接删除错误日志,也可以在MySQL提示符下使用“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、日志清理

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

  三、慢查询日志

    1、日志记录内容:

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

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

    2、日志作用:

      如果不是调优需要,一般不建议启动该参数;具体应用可参考MySQL索引原理之慢查询等优化 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)

    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;”来开启二进制日志。具体使用可参考MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)

    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”命令清理日志。

标签:log,记录,二进制,查询,MySQL,日志,维护
From: https://www.cnblogs.com/ilovebath/p/16707609.html

相关文章

  • Docker安装部署Mysql8(以作数据持久化)
    1.创建容器并进行持久化处理#拉取镜像dockerpullmysql:8.0.20#启动镜像,用于拷贝配置文件到宿主机dockerrun-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD=12......
  • 【MySQL】MySQL导出用户权限信息
    $vimMyDatabaseUSers.sql#!/bin/bashGRANT_CMDS=/tmp/ShowGrantsToExport.sqlGRANT_FILE=MyDatabaseUSers.sqlMYSQL_USER=rootMYSQL_PASS=rootMYSQL_CONN="-u${MY......
  • mysql创建分区表(转载)
    一、   mysql分区简介数据库分区数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以......
  • ELK搭建自己的日志系统
    在开发过程中,日志会直接在控制台打印方便查看,而生产环境下应该保存为文件,以便以后查阅。随着项目规模越来越大,导致日志数据累计巨大,想要快速从文件中找到几乎是不可能......
  • Mysql系列---【使用慢日志查询分析sql语句】
    1.查看慢日志是否开启mysql>showvariableslike'slow_query%';+---------------------------+----------------------------------+|Variable_name|......
  • k8s部署MySQL主从数据库
    参考:https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/我的测试集群root@master:~/mysql#kubectlgetnodes-owideNA......
  • delete语句嵌套-mysql
    需求:我需要从tableA之中找到name字段的Filter的记录,得到此记录的id,然后根据id删除tableA中的该条记录;--但是我使用如下xql语句的时候deletefromtableAwhereidin(s......
  • Java学习-第一部分-第三阶段-第三节:MySQL基础
    零基础学MySQL笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)一个问题淘宝网,京东、微信,抖音都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什......
  • MySQL实现备份案例(2)
    案例1:MySQL8.0实现数据库冷备份和还原10.0.0.10--MySQL8.0#停止数据库[[email protected]]#systemctlstopmysqld.service#备份数据[root@CentOS8~]#scp-......
  • mysql忘记密码找回
     Windows下如果MySQL密码忘记了root密码导致无法登录,如下图所示,   这个时候怎么办,只能重置root密码了。1.打开任务管理器查看MySql服务是否启动,如果已启动则先......