• MySQL日志


    日志文件对于任何应用程序都是非常重要的,许多操作都需要记录到日志,然后可以利用日志文件查错纠错等。

    mysql中当然也有日志,mysql的日志大概分为五种,即错误日志、查询日志、慢查询日志、二进制日志和事务日志。

    查看日志相关的全局变量。

    -- 查询日志相关全局变量
    show global variables like '%log%';

    一、错误日志

    在mysql数据库中,错误日志功能是默认开启的,并且,错误日志无法被禁止。

    mysql的日志主要记录服务器启动和关闭过程的信息、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息等。

    -- 查看错误日志文件的地址
    show global variables like 'log_error';
    
    -- 查看警告信息是否也写入到错误日志中,默认值为2。如果要启用,将其值设置为1;如果要禁用,将其值设置为0。
    show global variables like 'log_warnings';

    mysqladmin命令重新创建一个新的错误日志文件。

    -- mysqladmin命令重新创建一个新的错误日志文件,原错误日志文件加上后缀old
    mysqladmin -u root -p flush-logs

    sql语句重新创建一个新的错误日志文件。

    -- 重新创建一个新的错误日志文件,原错误日志文件加上后缀old
    flush logs;

    二、查询日志

    由于查询日志会记录用户所有的操作,在使用量比较大时服务器的I/O操作较多,会大大降低服务器的性能,所以默认为关闭的,并且不建议开启。

    -- 查看查询日志是否开启
    show global variables like 'general_log';
    
    -- 查看查询日志的文件地址
    show global variables like 'general_log_file';
    
    -- 是否开启日志,设置为开启时,表示开启所有的日志功能
    show global variables like 'log';
    
    -- 查看日志输出的格式,可以是表(table)或文件(file)。如果设置为table,则日志在mysql.general_log表中;如果设置为none,则不启用日志
    show global variables like 'log_output';

    三、慢查询日志

    慢查询日志是用来记录执行时间超过指定超时时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。

    一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行时间超时的查询语句。

    -- 查看超时时间,单位为秒(s)
    show global variables like 'long_query_time';
    
    -- 查看是否开启慢查询日志
    show global variables like 'log-slow-queries';
    
    -- 查看慢查询日志是否开启,如果设置为开启,则执行时间超过超时时间,即为慢查询
    show global variables like 'slow_query_log';
    
    -- 查看慢查询日志的文件地址
    show global variables like 'slow_query_log_file';

    四、二进制日志

    二进制日志即binlog日志,它记录数据定义语言(DDL)和数据控制语言(DML),但不会记录select、show等不修改数据的语句。

     打开二进制日志会消耗一些系统系能,但是对于复制和系统恢复,所带来的好处可能大于减少的性能。

    -- 查看是否开启二进制日志,可以设置为on|off,也可以直接设置为文件的地址,如果不设置地址,则默认在数据目录下
    show global variables like 'log_bin';
    
    -- 查看会话级别的二进制日志功能是否开启
    show global variables like 'sql_log_bin';
    
    -- 设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正整数值都表示对二进制日志每多少次写操作之后同步一次
    -- 当autocommit=1时,每条语句的执行都会进行二进制日志的同步;当autocommit=0时,每个事务的提交都会进行二进制日志的同步
    show global variables like 'sync_binlog';
    
    -- 指定二进制日志的格式,默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。
    -- statement:表示二进制日志文件记录的是日志的逻辑式SQL语句
    -- row:二进制日志记录的不再是简单的SQL语句了,而是记录表的行更改情况,此时可以将InnoDB的事务隔离基本设为read committed,以获得更好的并发性
    -- mixed:mysql默认采用的statement格式进行二进制日志文件的记录,但是在一些情况下会使用row格式
    show global variables like 'binlog-format';
    
    -- 设置binlog缓存数据的内存区域的大小,默认值为32768。
    show global variables like 'binlog_cache_size';
    
    -- 设置binlog临时缓存数据的内存区域的大小,默认值为32768。
    show global variables like 'binlog_stmt_cache_size';
    
    -- 设置binlog缓存空间的最大值,默认值为18446744073709547520。
    show global variables like 'max_binlog_cache_size';
    
    -- 设置binlog临时缓存空间的最大值,默认值为18446744073709547520。
    show global variables like 'max_binlog_stmt_cache_size';
    
    -- 设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在mysql启动时或flush日志时。
    show global variables like 'expire_log_days';
    
    -- 每次重启mysql服务或运行该命令时,都会生成一个新的二进制日志文件
    flush logs;

    查看二进制日志文件。

    -- 查看当前服务器使用的二进制日志文件及大小
    show binary logs;
    
    -- 查看主服务器使用的二进制日志文件及大小
    show master logs;
    
    -- 查看当前二进制日志文件的状态及所处位置
    show master status;
    
    -- 查看所有的二进制日志文件的信息
    show binlog events;
    
    -- 查看指定的二进制日志文件的信息
    show binlog events in 'mysql-bin.000001';
    
    -- 查看指定的二进制日志文件的信息,并从指定的事件位置开始
    show binlog events in 'mysql-bin.000001' from 170;
    
    -- 查看指定的二进制日志文件的信息,并从指定的事件位置开始以及事件的偏移量
    show binlog events in 'mysql-bin.000001' from 170 limit 3;

    删除二进制日志文件。

    -- 删除所有的二进制日志文件,删除所有的二进制日志后,mysql将会重新创建新的二进制日志,新的二进制日志的编号从000001开始。
    reset master;
    
    -- 删除指定二进制日志文件之前的所有二进制日志文件,这里表示删除文件mysql-bin.000010之前的所有文件
    purge binary logs to 'mysql-bin.000010';
    purge master logs to 'mysql-bin.000010';
    
    -- 删除指定时间之前的所有二进制日志文件,这里表示删除18-06-06 12:00:00之前的所有文件
    purge binary logs to '18-06-06 12:00:00';
    purge master logs to '18-06-06 12:00:00';

    五、事务日志

    事务日志(InnoDB存储引擎所特有的日志)可以帮助提高事务的效率。

    使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。

    -- 查看在事务提交时InnoDB是否同步日志从缓冲到文件中
    -- 如果为0,表示每隔一秒同步一次,并进行一次磁盘访问将日志刷新到磁盘,会造成大量的磁盘I/O,性能很差
    -- 如果为1,表示只有在事务提交时才会同步,并进行一次磁盘访问将日志刷新到磁盘
    -- 如果为2,表示只有在事务提交时才会同步,但不进行磁盘访问,可能会丢失整个事务
    show global variables like 'innodb_flush_log_at_trx_commit';
    
    -- 查看InnoDB事务日志组的文件个数
    show global variables like 'innodb_log_files_in_group';
    
    -- 查看InnoDB事务日志组的地址
    show global variables like 'innodb_log_group_home_dir';
    
    -- 查看是否对事务日志做镜像
    show global variables like 'innodb_mirrored_log_groups';

    以上所涉及到的全局变量和未涉及到的全局变量都可以通过set命令进行修改,但这种方式在mysql服务器重启之后就失效了,需要再次修改。

    如果需要永久的改变,则可以通过修改在mysql安装目录下的my.ini(Windows OS)或my.cnf(Linux OS)的配置文件。

  • 相关阅读:
    SSM项目搭建(提供源码)
    U盘启动安装linux时卡在“starting dracut initqueue hook”
    nginx 中只能访问根目录,无法访问路由(404)
    在多GPU情况下TensorFlow如何指定在哪些GPU上运行程序
    TensorFlow只训练部分参数
    python中的随机数函数
    Python中读取、显示和保存图片的方法
    神经网络中参数数量的计算
    排序算法
    window Linux 双系统安装
  • 原文地址:https://www.cnblogs.com/Brambling/p/9296338.html
Copyright © 2020-2023  润新知