zoukankan      html  css  js  c++  java
  • MySQL日志管理

    MySQL日志管理

    错误日志

    配置方法:

    vim /etc/my.cnf
    [mysqld]
    log-error=/tmp/mysql.log

    查看配置方式:

    show variables like '%log%error%';

    作用:

    记录mysql数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志。

    一般查询日志

    配置方法:

    vim /etc/my.cnf
    [mysqld]
    general_log=on
    general_log_file=/data/mysql/server2.log

    查看配置方式:

    show variables like '%gen%';

    作用:

    记录mysql所有执行成功的SQL语句信息,可以做审计用,但是我们很少开启;
    可以作为审计功能,一般情况下这个日志不会开,除非有特殊要求 例如:ELK

    二进制日志

    建议刚部署mysql数据库的时候就开启二进制日志

    二进制日志不依赖于存储引擎的,依赖于sql层,记录和sql语句有关的信息

    • 在sql层已经执行完成的语句,如果是事务,应当是已经完成的事务
    • 功能作用:备份和时间点恢复、主从

    二进制日志记录了什么?

    已提交的数据记录,以事件的形式记录到二进制文件中

    二进制记录格式

    一定要配置好二进制日志

    • row(行模式):表中行数据的变化过程,记录数据详细,但对IO要求比较高,记录数据在任何情况下都是准确的。生产中一般是这种模式,此模式在5.7以后为默认的模式
    • statement:语句模式,将SQL语句进行记录。记录信息简洁,记录的是sql语句本身,但是在语句中出现函数操作的话,有可能记录的数据不准确(5.6中默认的模式,在生产环境慎用)
    • mixed:以上两者的混合模式。经过判断,选择row+statement混合的一种记录模式。一般不用

    开启二进制日志

    配置文件开启:
      vim /etc/my.cnf   log-bin=/data/mysql-bin ---- 在全局打开,二进制日志的“总闸” 命令行开启:   set sql_log_bin=1/0;    ---- 在会话级别临时生效 二进制日志的“分开关”,只有总闸开启才有意义(默认打开),有时候会临时关闭掉,只影响当前会话

    作用:

    1、是否开启  

    2、二进制日志路径/data 

    3、二进制日志文件名前缀mysql-bin 

    4、文件名名以“前缀”.000001~N

    设置二进制日志记录格式(建议是ROW)

    配置文件中修改:

    vim /etc/my.cnf
    binlog-format=row
    改完之后重启

    命令行修改:

    mysql> SET GLOBAL binlog_format = 'STATEMENT';
    mysql> SET GLOBAL binlog_format = 'ROW';
    mysql> SET GLOBAL binlog_format = 'MIXED';

    查看binlog设置

    show variables like '%binlog%';

    binlog日志的查看方式

    查看binlog原始信息

    mysqlbin mysql-bin.000002

    在row模式下,翻译成语句

    mysqlbinlog --base64-output='decode-rows' -v mysql-bin.000002

    查看binlog事件

    show binary logs;     所有在使用的binlog信息,查看所有存在的二进制日志文件
    show binlog events in '';  查看文件内容
    show master status;   查看当前正在使用的二进制日志文件

    二进制日志管理

    默认情况下,不会删除旧的日志文件。

    删除二进制日志

    根据存在时间删除日志:

    SET GLOBAL expire_logs_days = 7;
    或者PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
    reset master;  将所有binlog日志删除,并重新生成,从000001开始

    根据文件名删除日志:

    PURGE BINARY LOGS TO 'mysql-bin.000010';

    刷新二进制日志

    flush logs

    截取二进制日志

    mysqlbinlog --start-position=XX --stop-position=XX >a.sql

    如何截取binlog信息内容,按需求恢复(常规思路)

    (1)、使用show binary logs;   show master status;  查看当前正在使用的文件

    (2)、show binlog events in '';  从后往前看,找到误操作的事务,判断事务开启position和结束position

    (3)、把误操作的剔除掉,留下正常操作到两个脚本中 :mysqlbinlog --start-position=XX --stop-position=XX 二进制日志文件 >/tmp/in.sql

    (4)、先测试库操作,把误操作的数据导出,然后生产库恢复       ### 使用:source 恢复,恢复的时候,在当前窗口临时关闭二进制日志记录

    遇到的问题:

    1、时间长

    2、对生产数据有一定影响,有可能会出现冗余数据

    好的解决方案:

    1、flashback(闪回功能)

    2、通过备份,延时从库

    慢日志slow log

    是将mysql服务器中影响数据库性能的相关SQL语句记录到日志文件

    通过对这些特殊的SQL语句分析,改进以达到提高数据库性能的目的。

    调优过程中的工具日志,统计收集执行慢的语句

    慢日志设置

    配置方法:

    vim /etc/my.cnf
    slow_query_log=NO
    slow_query_log_file=/tmp/slow.log
    • long_query_time :设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s,现有版本可以指定零点几秒
    • slow_query_log: 指定是否开启慢查询日志
    • slow_query_log_file: 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
    • min_examined_row_limit:查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
    • log_queries_not_using_indexes:不使用索引的慢查询日志是否记录到索引
  • 相关阅读:
    SQL server 数据库的版本为661,无法打开,此服务器只支持655版及更低版本。不支持降级路径
    SQL Server 2005 企业版没有 Microsoft SQL Server Management
    Tomcat 中 jsp 中文乱码显示处理解决方案
    ASP.NET后台输出js
    未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
    socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
    C# Socket连接 无法访问已释放的对象
    未找到导入的项目,请确认 <Import> 声明中的路径正确
    轻量级容器Docker+微服务+RESTful API
    Foundation和UIKit框架组织图
  • 原文地址:https://www.cnblogs.com/lyq863987322/p/8490407.html
Copyright © 2011-2022 走看看