• MySQL中常见的日志文件


    日志文件记录了影响MySQL数据库的各种类型活动。MySQL中常见的日志文件有:

    • 错误日志(error log)
    • 二进制日志(binlog)
    • 慢查询日志(slow query log)
    • 查询日志(log)
    日志名称概况
    错误日志(error log)错误日志文件对MySQL的启动、运行、关闭过程进行了记录。该文件不仅记录了所有的错误信息,也记录一些警告信息或正确的信息。
    查看命令:SHOW VARIABLES LIKE 'log_error'运行后可查看错误文件的路径和文件名。
    当数据库不能正常启动时,第一个必须查找的文件就是错误日志文件,该文件记录了错误信息,能很好的指导用户发现问题。
    慢查询日志(slow query log)慢查询日志可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。
    在默认情况下,MySQL数据库并不启动慢查询日志,用户需要手工将这个参数设为ON:SET GLOBAL slow_query_log=on;
    查看超时阈值:SHOW VARIABLES LIKE 'long_query_time';
    查看慢查询是否开启:SHOW VARIABLES LIKE 'log_slow_queries';
    首先设置long_query_time这个阈值后,MySQLh数据库会记录运行时间超过该阈值的所有SQL语句,但运行时间正好等于阈值的情况并不会被记录下来。
    另一个和慢查询日志有关的参数是log_queries_not_using_indexs,查看其状态:SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
    参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log中从而导致slow log文件的大小不断增加,故DBA可通过该参数进行配置。
    MySQL提供mysqldumpslow命令帮助DBA解决日志越来越多的日志文件直观问题。
    参数作用
    -vverbose
    -d调试
    -s ORDER按照(al,at,ar,c,l,r,t)排序,默认值为at
    参数含义
    alaverage lock time
    araverage rows sent
    ataverage query time
    ccount
    llock time
    rrows sent
    tquery time
    -r反转排序
    -t NUM仅查看前n行结果
    -a不将所有的数字抽象为N,字符抽象为'S'
    -n NUM数字至少抽象为n位
    -g PATTERN相当于grep,只选取匹配后的字符
    -h HOSTNAME数据库服务器名
    -i NAME实例服务名
    -l不从总时间中扣除锁定时间
    参数log_output指定了慢查询输出的格式,默认为FILE,可以将其改为TABLE,然后就可以查询mysql架构下的slow_log表了: mysql> SHOW VARIABLES LIKE 'log_output';
    mysql> SET GLOBAL log_output='TABLE';
    用户可以通过额外的参数long_query_io将超过指定逻辑IO次数的SQL语句记录到slow log中,该值默认位100。参数slow_query_type用来表示slow log的方式,可选值为:
    含义
    0表示不将SQL语句记录到slow log
    1表示根据运行时间将SQL语句记录到slow log
    2表示根据逻辑IO次数将SQL语句记录到slow log
    3表示根据运行时间及逻辑IO次数将SQL语句记录到slow log
    查询日志(log)查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行
    查询日志在mysql的general_log表中,基本方法与slow_log一致
    二进制日志(binary log)二进制日志记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。
    查看二进制日志:SHOW BINLOG EVENT
    二进制日志主要有以下几种作用:
    恢复(recovery)某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复
    复制(replication)其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步
    审计(audit)用户可以通过二进制日志中的信息进行审计,判断是否有对数据库进行注入的攻击
    通过配置参数log-bin[=name]可以启动二进制日志,如果不指定name,则默认二进制文件名为主机名,后缀名为二进制日志的序列号。
    以下配置文件的参数影响着二进制日志记录信息和行为:
    参数作用
    max_binlog_size指定了单个二进制日志文件的最大值,如果超过该值,则产生新的二进制日志文件,后缀名+1,并记录到.index文件
    binlog_cache_size当使用事务的表存储引擎时,所有未提交的二进制日志会被记录到一个缓存中去,该事务提交时直接将缓冲中的二进制日志写入二进制文件,该缓冲的大小由binlog_cache_size决定,默认大小为32k。此外binlog_cache_size是基于会话的,当一个线程开始一个事务时,MySQL会自动分配一个大小为binlog_cache_size的缓存。可通过SHOW GLOBAL STATUS查看binlog_cache_use、binlog_cache_disk_use的状态以判断当前binlog_cache_size是否合适。binlog_cache_use记录了使用缓冲写二进制日志的次数,binlog_cache_disk_use记录了使用临时文件写二进制日志的次数。
    sync_binlogsync_binlog=[N]表示每写缓冲多少次就同步到磁盘。如果N设定为1,表示次啊用同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统的缓冲来写二进制日志。sync_binlog的默认值为0.
    binlog-do-db表示需要写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志
    binlog-ignore-db表示忽略写入哪些库的日志。默认为空,表示需要同步所有库的日志到二进制日志
    log-slave-update如果当前数据库是复制中的slave角色,则它不会从master取得并执行的二进制日志写入到自己的二进制文件中去。如果需要写入,则设置log-slave-update。若须搭建master->slave>slave架构的复制,则必须设置该参数
    binlog_format它影响记录二进制日志的格式。
    作用
    STATEMENT二进制日志文件记录的是日志的逻辑SQL语句
    ROW二进制日志记录的不再是简单的SQL语句,而是记录表的行更改情况。
    MIXEDMySQL默认采用STATEMENT格式进行二进制日志文件的记录但在一些情况下会使用ROW格式,可能的情况有:(1)表的存储引擎为NDB (2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数(3)使用了INSERT DELAY语句(4)使用了用户定义函数(UDF)(5)使用了临时表
  • 相关阅读:
    传统订货方式和网上企业APP订货方式的差别|网站搭建|小程序开发
    读书笔记:《债券投资完全指南》
    Rabbitmq 简单介绍
    【学习笔记】模拟
    SPARK中的wholeStageCodegen全代码生成--以aggregate代码生成为例说起(2)
    算法之冒泡排序
    面经-并发-线程池核心参数
    AUTOSAR知识点 之 Dem (三):基于ETAS工具ISOLAR-AB配置实现DEM分析
    学习vue-unit.md单元测试
    自学(黑客)技术方法 必看 ——网络安全
  • 原文地址:https://blog.csdn.net/weixin_41489136/article/details/127727791