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:不使用索引的慢查询日志是否记录到索引

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LNMP架构之搭建wordpress博客网站

    系统环境版本 [root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@...

    863987322
  • Tomcat启动慢解决方法(本人CentOS7.4系统)

    首先查看日志信息,查看因为什么而启动慢   在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随...

    863987322
  • Virtualbox/Vagrant安装

    使用Oracle的开源VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。

    863987322
  • 程序员,你必须知道的四种日志

    日志记录是软件开发中的一个重要主题,特别是当您需要分析生产环境中的bug和其他意外事件时。实现日志记录通常很简单。但正如你可能经历过的,日志要比看起来复杂得多。...

    三哥
  • MySQL日志管理

    一、日志类型: MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情: 日志文件记入文件中的信息类型错误日志记录启动、运行或停止时出现的问题...

    小小科
  • Awstats性能问题及其他工具的对比分析

    在之前的一篇文章中,我通过资料的查阅分析了一些比较流行的日志分析工具,最后选用了 Awstats + Jawstats 的组合,既能够对现有的日志进行分析,也能...

    大江小浪
  • ELK 系统在中小企业从0到1的落地实践

    ELK 是一般被称作日志分析系统,是三款开源软件的简称。通常在业务服务上线后我们会部署一套 ELK 系统,方便我们通过图形化界面直接查找日志,快速找到问题源并帮...

    CSDN技术头条
  • Springboot 整合 log4j2 日志详解

    在项目推进中,如果说第一件事是搭 Spring 框架的话,那么第二件事情就是在 Sring 基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是...

    一个优秀的废人
  • 解读Raft(三 安全性)

    最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理。

    林一
  • Web攻击日志初探

    前段时间偶然间在一朋友处获得了多个系统的web日志,并被被要求针对这些日志进行分析。一时兴起,随便打开了一个,打开后发现日志数量极大,接着又打开了好几个,发现每...

    FB客服

扫码关注云+社区

领取腾讯云代金券