详解grep获取MySQL错误日志信息的方法

为方便维护MySQL,写了个脚本用以提供收集错误信息的接口。这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径。

以下是全部相关代码:

#!/usr/bin/env python2.7
#-*- encoding: utf-8 -*-

"""
该模块用于提取每天mysql日志中的异常或错误信息
author: xiaomo
email: moxiaomomo@gmail.com
"""

import os
import sys
import string
from datetime import *

# 預設字符解碼器為utf-8
reload(sys)
sys.setdefaultencoding('utf-8') 

COMMON_FLAGS = ["error", "exception", "fail", "crash", "repair"]

def _contain_flag(cur_str):
  for flag in COMMON_FLAGS:
    if flag in string.lower(cur_str):
      return True
  return False

"""
获取当前mysql实例的error_log文件路径
"""
def _get_mysql_error_log_path():
  log_path = ''
  grep_infos = os.popen('ps aux | grep mysql | grep "log-error"').read()
  if len(grep_infos) > 1:
    grep_infos = grep_infos.split("log-error=")
  if len(grep_infos) > 1:
    grep_infos = grep_infos[1].split(' ')
  if len(grep_infos) > 1:
    log_path = grep_infos[0]
  return log_path

"""
读取mysql错误日志中包含异常或错误信息的行
"""
def _get_error_info(error_log, begin_date):
  error_infos = []
  f = open(error_log, 'r')
  lines = f.readlines()
  for line in lines:
    data_array = line.split(' ')
    if len(data_array) > 0 and len(data_array[0]) == 10:
      dt_strs = data_array[0].split('-')
      cur_date = date(int(dt_strs[0]), int(dt_strs[1]), int(dt_strs[2]))
      if cur_date >= begin_date and _contain_flag(line):
        error_infos.append(line)
  f.close()
  return error_infos

"""
组装并返回mysql错误日志信息
"""
def get_mysql_errors(begin_date=date.today()-timedelta(1)):
  try:
    err_log_path = _get_mysql_error_log_path()
    if len(err_log_path) > 1:
      return _get_error_info(err_log_path, begin_date)
  except Exception,e:
    print "[get_mysql_errors]%s"%e
  return []

有兴趣的朋友们参考学习下,感谢大家对我们的支持。

(0)

相关推荐

  • 查看MySQL的错误日志的方法

    MySQL的错误信息是在data目录下的,且文件名为<hostname>.err(<hostname>指的是主机名),但由于每个人安装的环境不一样,或你忘记了data目录的所在位置,你可以通过下面方法查找. #hostname //获得主机名 <hostname> #find / -name <hostname>.err ..... #cd ... #vi <hostname>.err

  • Ubuntu下启动、停止、重启MySQL,查看错误日志命令大全

    1)启动: sudo /etc/init.d/mysql start 2)停止: sudo /etc/init.d/mysql stop 3)重启: sudo /etc/init.d/mysql restart 4)查看日志: cat /var/log/mysql.err cat /var/log/mysql/error.log 5)不支持中文 修改 /etc/mysql/my.cnf 在 [client] 下面增加: default-character-set=utf8 或 character

  • 详解grep获取MySQL错误日志信息的方法

    为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. 以下是全部相关代码: #!/usr/bin/env python2.7 #-*- encoding: utf-8 -*- """ 该模块用于提取每天mysql日志中的异常或错误信息 author: xiaomo email: moxiaomomo@gmail.com """ import

  • 详解BeautifulSoup获取特定标签下内容的方法

    以下是个人在学习beautifulSoup过程中的一些总结,目前我在使用爬虫数据时使用的方法的是:先用find_all()找出需要内容所在的标签,如果所需内容一个find_all()不能满足,那就用两个或者多个.接下来遍历find_all的结果,用get_txt().get('href').得到文本或者链接,然后放入各自的列表中.这样做有一个缺点就是txt的数据是一个单独的列表,链接的数据也是一个单独的列表,一方面不能体现这些数据之间的结构性,另一方面当想要获得更多的内容时,就要创建更多的空列表

  • 详解linux下查看系统版本号信息的方法(总结)

    有时候需要查看自己系统的CentOs的版本,有一些命令可以查看,分别介绍如下:查看Linux内核版本命令(两种方法)和Linux系统版本的命令(3种方法) 一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@localhost ~]# cat /proc/version Linux version 2.6.18-194.8.1.el5.centos.plus (mockbuild@builder17.centos.org) (gcc version

  • 详解PHP显示MySQL数据的三种方法

    昨天的程序是这样的: <?php  $link=mysql_connect("localhost","root","之前的管理员密码");  if(!$link) echo "没有连接成功!";  else echo "连接成功!";  mysql_select_db("infosystem", $link);  $q = "SELECT * FROM info"

  • 详解监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的一款开源项目,利用Java开发.主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL. GitHub地址:https://github.com/alibaba/canal 在介绍Canal内部原理之前,首先来了解一下MySQL Master/Slave同步原理: MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过sho

  • 详解如何获取C#类中发生数据变化的属性信息

    一.前言# 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字段的值的话就很困难了.因此,趁着这个假期,就来解决这个一直遗留的小问题,本篇文章记录了我目前实现的方法,如果你有不同于文中所列出的方案的话,欢迎指出. 代码仓储地址:https://github.com/Lanesra712/ingos-common/tree/master/sample/csha

  • Java 详解如何获取网络接口信息

    前言 查看本机的网络接口信息,本文有详细的介绍哦. 代码 不废话,上代码. package com.hy.csdn.tools; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; /** * @Program: hy-utils @ClassName: StuNetworkInterface @A

  • MySQL错误日志与通用查询日志图文详析

    目录 MySQL日志文件系统的组成 启动错误日志 查看错误日志 删除错误日志 通用查询日志 删除通用查询日志 通用查询日志的备份 总结 MySQL日志文件系统的组成 a.错误日志:记录启动.运行或停止mysqld时出现的问题. b.通用日志:记录建立的客户端连接和执行的语句. c.更新日志:记录更改数据的语句.该日志在MySQL 5.1中已不再使用. d.二进制日志:记录所有更改数据的语句.还用于复制. e.慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的

  • 详解Go语言的错误处理和资源管理

    目录 一.defer 二.错误处理 三.统一错误处理的逻辑 四.panic 五.recover 六.error vs panic 七.错误处理综合示例 一.defer 1. defer保证在函数结束时发生. 2. defer列表为先进后出 3. 参数在defer语句时计算. 下面来看一个例子: 写入文件 package main import ( "aaa/functional/fbi" "bufio" "fmt" "os"

  • 详解Redis的慢查询日志

    Redis慢查询日志帮助开发和运维人员定位系统存在的慢操作.慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息)记录下来. Redis客户端一条命令分为如下四部分执行: 需要注意的是,慢查询日志只是统计步骤3)执行命令的时间,所以慢查询并不代表客户端没有超时问题.需要注意的是,慢查询日志只是统计步骤3)执行命令的时间,所以慢查询并不代表客户端没有超时问题. 一.慢查询的配置参数: 慢查询的预设阀值 slow

随机推荐