• (转)MySQL日志管理


    MySQL 服务器上一共有六种日志:错误日志,查询日志,慢查询日志,二进制日志,事务日志,中继日志。

    原文:https://segmentfault.com/a/1190000003072237

    一 错误日志

    错误日志不仅仅记录错误信息,它记录的事件有:
    - 服务器启动和关闭过程中的信息
    - 服务器运行过程中的错误信息
    - 事件调度器运行一个事件时产生的信息
    - (如果被配置为从服务器)启动从服务器进程时产生的信息

    查看错误日志文件的路径

    在mysql数据库中,错误日志功能是默认开启的。

    mysql> SHOW VARIABLES LIKE 'log_error%';
    +---------------+-----------------------------------------------+
    | Variable_name | Value                                         |
    +---------------+-----------------------------------------------+
    | log_error     | /opt/lampstack-5.4.22-0/mysql/data/mysqld.log |
    +---------------+-----------------------------------------------+
    

    配置错误日志

    编辑 my.cnf(一般在mysql目录下),修改 log-error 参数,如果没有就新增:
    错误日志文件配置

    # Error Logging.
    log-error="filename.log"
    
    • 相关配置变量说明
      log_error={1 | 0 | /PATH/TO/ERROR_LOG_FILENAME}
      定义错误日志文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。
      log_warnings = {1|0}
      决定是否将警告信息记录入错误日志。

    二 查询日志

    其中查询日志记录查询操作,默认情况下查询日志是关闭的。开启查询日志会增加很多磁盘 I/O, 所以如非出于调试目的,不建议开启查询日志

    查看查询日志是否启用及查询日志的路径

    mysql> SHOW VARIABLES LIKE 'general_log%';
    +------------------+--------------------------------------------------+
    | Variable_name    | Value                                            |
    +------------------+--------------------------------------------------+
    | general_log      | OFF                                              |
    | general_log_file | /opt/lampstack-5.4.22-0/mysql/data/localhost.log |
    +------------------+--------------------------------------------------+
    

    配置查询日志

    编辑 my.cnf,修改 general-log 参数为 1,同时设定 log-output 参数(日志输出类型)和 general_log_file 参数(查询日志路径):

    # General logging.:
    log-output=FILE
    general-log=1
    general_log_file="filename.log"
    

    保存 my.cnf 更改,重启 MySQL 服务。

    三 慢查询日志

    慢查询是指执行时长(包括等待CPU/IO的时间)超过 long_query_time 这个变量定义的时长的查询。慢查询日志开销比较小,可以用于定位性能问题,建议开启。

    查看慢查询日志是否启用及慢查询日志的路径

    mysql> SHOW VARIABLES LIKE 'slow_query_log%';
    +---------------------+--------------------------------------------------+
    | Variable_name       | Value                                            |
    +---------------------+--------------------------------------------------+
    | slow_query_log      | OFF                                              |
    | slow_query_log_file | /usr/local/var/mysql/upstreamdeMac-mini-slow.log |
    +---------------------+--------------------------------------------------+
    

    配置慢查询日志

    编辑 my.cnf ,设置 log_slow_queries 参数为 1,同时设定 log-output 参数(日志输出类型)、slow-query-log_file 参数(慢查询日志路径)和 long_query_time 参数:

    # Slow logging.
    log-output=FILE
    log_slow_queries=1    //MySQL 5.6将此参数修改为了slow_query_log
    slow_query_log_file="filename.log"
    long_query_time=10    //慢查的时长单位为秒,可以精确到小数点后6位(微秒)
    

    保存 my.cnf 更改,重启 MySQL 服务。

    关闭慢查询日志

    设置 log_slow_queries 参数为 0:

    # Slow logging.
    log-output=NONE
    log_slow_queries=0   //MySQL 5.6将此参数修改为了slow_query_log
    slow_query_log_file="filename.log"
    long_query_time=10
    

    保存 my.cnf 更改,重启 MySQL 服务。

    四 二进制日志

    二进制日志记录 MySQL 数据库中所有与更新相关的操作,即二进制日志记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。常用于恢复数据库和主从复制。

    查看 log_bin 状态

    mysql> SHOW VARIABLES LIKE 'log_bin%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin                         | OFF   |
    | log_bin_basename                |       |
    | log_bin_index                   |       |
    | log_bin_trust_function_creators | OFF   |
    | log_bin_use_v1_row_events       | OFF   |
    +---------------------------------+-------+
    

    启用二进制日志功能

    编辑 my.cnf ,在 [mysqld] 下添加

    # Binary Logging.
    log-bin="filename-bin"
    

    保存 my.cnf 更改,重启 MySQL 服务。

    其他相关配置:

    max_binlog_size={4096 .. 1073741824} ;
    设定二进制日志文件上限,单位为字节,最小值为4K,最大值为1G,默认为1G。某事务所产生的日志信息只能写入一个二进制日志文件,因此,实际上的二进制日志文件可能大于这个指定的上限。作用范围为全局级别,可用于配置文件,属动态变量。

    查看日志文件

    在data目录下有一个mysql-bin.index便是索引文件,以mysql-bin开头并以数字结尾的文件为二进制日志文件。
    查看所有的二进制文件:

    mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |    276665 |
    +------------------+-----------+
    1 row in set (0.03 sec)
    

    查看当前正在使用的二进制文件:

    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 |      107 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    

    二进制日志滚动

    当 MySQL 服务进程启动、当前二进制日志文件的大小已经超过上限时、执行 FLUSH LOG 时,MySQL 会创建一个新的二进制日志文件。新的编号大1的日志用于记录最新的日志,而原日志名字不会被改变。

    手动滚动命令:flush logs;

    查看日志详细

    查看binlog日志有几种方式:
    1. 使用show binlog events方式可以获取当前以及指定binlog的日志,
    2. 使用mysqlbinlog命令行。

    1. show binlog events方式

    • 只查看第一个binlog文件的内容(show binlog events)
    mysql> show binlog events; #默认会返回mysql-bin.000001的日志
    #太多,我就不截屏了
    
    • 查看指定binlog文件的内容(show binlog events in 'binname.xxxxx')
    mysql> show binlog events in 'mysql-bin.000002';
    

    • 获取指定位置binlog的内容(show binlog events from xxx)
    mysql> show binlog events in 'mysql-bin.000002'  from 107;
    

    2. mysqlbinlog命令行

    mysqlbinlog在mysql/bin目录

    I 查看binlog日志

    • 查看指定的binlog日志
    [root@localhost bin]# ./mysqlbinlog ../data/mysql-bin.000003
    
    • 按时间查看二进制日志
      mysqlbinlog ../data/mysql-bin.000003 --start-datetime="2015-3-11 17:00:00"
      mysqlbinlog ../data/mysql-bin.000003 --stop-datetime="2015-3-12 17:30:00"
      mysqlbinlog ../data/mysql-bin.000003 --start-datetime="2015-3-11 17:00:00" --stop-datetime="2015-3-12 17:30:00"

    • 按字节数查看二进制日志
      mysqlbinlog ../data/mysql-bin.000003 --start-position=20
      mysqlbinlog ../data/mysql-bin.000003 --stop-position=200
      mysqlbinlog ../data/mysql-bin.000003 --start-position=20 --stop-position=200

    • 过滤insert、update操作
      mysqlbinlog ../data/mysql-bin.000003 | grep insert

    II 查看binlog日志并输出

    下面参考:使用mysqlbinlog提取二进制日志

    c、提取指定position位置的binlog日志并输出到压缩文件  
    # mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 |gzip >extra_01.sql.gz  
    
    d、提取指定position位置的binlog日志导入数据库  
    # mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 | mysql -uroot -p  
    
    e、提取指定开始时间的binlog并输出到日志文件  
    # mysqlbinlog --start-datetime="2014-12-15 20:15:23" /opt/data/APP01bin.000002 --result-file=extra02.sql  
    

     

  • 相关阅读:
    Mysql数据库常用的命令 数据备份 恢复 远程
    A Tour of Go Images
    A Tour of Go Exercise: HTTP Handlers
    A Tour of Go Web servers
    A Tour of Go Exercise: Errors
    A Tour of Go Errors
    A Tour of Go Interfaces are satisfied implicitly
    A Tour of Go Interfaces
    A Tour of Go Methods with pointer receivers
    A Tour of Go Methods continued
  • 原文地址:https://www.cnblogs.com/liujiacai/p/7601939.html
Copyright © 2020-2023  润新知