百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

MySQL的日志 - error log(mysql的日志文件)

nanshan 2024-10-11 13:32 11 浏览 0 评论

关注我『程序猿集锦』,获取更多分享。

  • 前言
  • 什么是error log
  • error log的参数
  • 修改error log日志目录
  • 归档error log
  • 总结

前言

前面我们以此介绍了MySQL中的slow query log慢查询日志、binlog二进制日志、relay log中继日志、redo log重做日志、undo log回滚日志、general log通用日志,现在我们来看下MySQL中的最后一个日志,也是最简单的一个日志:error log错误日志。

什么是error log

Error log记录中MySQL启动和关闭服务的时候详细的日志信息,包括在MySQL实例在运行过程中遇到的错误、警告等信息也会记录在error log中。需要注意的是,这里的错误和警告并不是指我们在执行某些SQL语句的时候遇到的错误信息和警告信息,而是MySQL底层进程级别的错误和警告信息。

对于error log,我们平时使用得最多的场景是这样的:在为了满足某些需求的时候,我们需要添加或修改my.cnf配置文件中参数,然后重试重启MySQL实例,如果此时MySQL启动失败,我们会经常去看下error log中的错误提示信息,然后根据错误提示去做对应的调整。最后再次尝试重启MySQL服务。此时的error log会给我们提供很大的帮助。

error log的参数

涉及到error log的参数,有如下几个,下面分别列出并给出解释。

  1. log_error:这个参数控制着错误日志到底输出到哪里。如果是输出到控制台中,则该参数的值stderr,这表示是standard error,标准错误输出,也就是会把error log写到当前的命令行控制台中。如果不是把错误日志输出到stderr,则需要配置一个具体的文件路径和名称。例如把错误日志输出到/tmp/mysql_error.log文件中。此时我们定义了路径为/tmp,错误日志的文件名称为mysql_error.log。一般情况下,在使用yum和apt-get方式安装MySQL数据库的时候,MySQL的error log一般都是默认输出到/var/log/mysql目录下。
  2. log_error_verbosity:这个参数控制着error log的输出级别。参数取值为1、2、3中的其中一个值,默认值为3。建议使用默认值3。三个参数所代表的日志级别如下:
    1. 1:只输出error级别的日志到error log中。
    2. 2:输出error和warning级别的日志到error log中。
    3. 3:输出error和warning还有note级别的日志到error log中。
  1. log_timestamps:这个参数控制着日志文件中输出的每一行日志中的时间戳是什么样的。这个参数的默认值为UTC,如果发现日志文件中时间戳和当前数据库服务器的系统时间不一致(这里说一个我经常遇到的问题,就是发现所有的日志信息,都是和服务器的时间差8个小时,就是因为log_timestamps参数的值为UTC,把它改为system之后,发现日志中时间戳就和当前系统时间一致了。),通常需要修改这个参数为SYSTEM,修改后,此时的日志总的时间戳就和服务器的系统时间一致了。这个参数不仅仅适用于error log,像前面我们介绍的slow query log慢查询日志中时间戳也是受这个参数控制。

修改error log日志目录

在我们了解了error log的一些参数之后,现在我们来修改一下这些参数来感受一下error log日志的参数功能。

首先看一下我的这个MySQL默认配置的error log输出到哪里。通过如下命令查看参数的值。

mysql> show variables like '%error%';
+---------------------+--------------+
| Variable_name       | Value        |
+---------------------+--------------+
| binlog_error_action | ABORT_SERVER |
| error_count         | 0            |
| log_error           | stderr       |/*stderr为当前的log_error的参数,日志会输出到标准输出*/
| log_error_verbosity | 3            |
| max_connect_errors  | 100          |
| max_error_count     | 64           |
| slave_skip_errors   | OFF          |
+---------------------+--------------+
7 rows in set (0.00 sec)

从上面的查询结果可以看出,当前的输出为stderr,表示我的这个MySQL日志会把日志输出到标准错误输出中。因为我的这个MySQL是使用docker容器启动的。所以这个error log默认是这么配置的。这样当我们启动这个容器的时候,如果启动失败,就可以使用docker logs 容器ID来查看具体启动MySQL服务的日志了。

现在我们修改一下erro log的存储目录。修改my.cnf配置文件,在[mysqld]下面增加如下配置:

[mysqld]
# 错误日志的配置
log_error=/tmp/mysql_error.log

配置好之后,我们重启MySQL容器后,发现在对应的日志目录下面,生成了我们配置的error log文件。

这里一定要注意:在把error log修改为其他目录的时候,一定要保证这个目录的权限,对mysql:mysql这个用户和组来说,是可以读写的。否则配置好之后,可能会因为没有权限导致启动MySQL服务失败。如果因为权限启动失败,可以尝试使用如下命令给MySQL的相关用户授权,授权后,再次尝试重启MySQL服务。

# 把'/'跟目录下面的abc目录已经其下的所有子目录的所属者,改为mysql用户。
chown -R mysql:mysql /abc

修改参数后,发现error log已经按照我们的配置生成,结果如下:

root@test:/tmp# pwd
/tmp
root@test:/tmp# ls -lstr
total 20
 4 -rw-r--r-- 1 root  root    985 Jan 13 17:21 mysql_general_log.log.bak
12 -rw-r--r-- 1 mysql mysql 11966 Jan 14 15:13 mysql_general_log.log
 4 -rw-r----- 1 mysql mysql  3652 Jan 18 11:52 mysql_error.log
root@test:/tmp#

归档error log

如果想要把error log进行归档,可以执行如下的步骤来进行归档。

第一步,把error log日志进行重命名,下面给出了一个示例:

mv mysql_error.log mysql_error.log.bak.<yyyymmdd>

第二步,在MySQL的命令行中,执行如下两个命令中任何一个,此时会在对应的error log目录下面重新生成一个新的error log日志文件,文件名称和执行mv命令之前的文件名一样。

flush logs
flush error logs

第三步,可以把我们重名后的error log日志文件移动到我们想要归档保存的地方。此时MySQL中的error log会向新生产的error log文件中写入。

mv mysql_error.log.bak.<yyyymmdd> /your_archive_log_dir

除了我们手动的去归档error log,如果你是使用yum或者apt-get的方式安装的MySQL,那么它们的error log默认是放在/var/log或者/var/log/mysql目录下面的,一般它们的名称为error.log或者mysqld.log,你可能会发现这个目录下面除了有error.log之外,还有很多error.log.1.gzerror.log.2.gz这样的文件。这些以.gz结尾的文件,也是MySQL的error log,只不过是历史的归档日志文件。而这个归档操作是服务器自己做的,不是我们自己的做的。至于什么时候要备份日志文件,是在操作系统的配置文件:/etc/logrotate.conf里面配置的。默认是每周备份一次。

对于那些以.gz结尾的日志文件,如果你想查看,可以加压后查看,也可以使用下面的命令,不解压直接查看:

zcat /var/log/mysql/error.1.gz | more

总结

MySQL的error log就介绍到这里了。这个日志是MySQL中最简单的一个日志类别。我们平时使用到它的时候,就是当我们的MySQL数据库异常宕机了去看下有没有记录对我们有用的error信息。还有就是,当我们修改了MySQL的配置参数之后,启动MySQL失败了,去看下error log提示失败的原因是什么。其他时候,我们对这个日志的使用就比较少了。

相关推荐

ssh终端xshell日志查看命令(xshell怎么看日志)

现在我们云服务器运维较多用的是SSH工具,其中常用的包括PUTTY、XSHELL等,其实大同小异界面UI稍微不同,但是都可以进入远程连接。这里有朋友提到如何查看服务器的日志文件,这个其实和是否使用XS...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

如何高效读取Linux日志文件?这些命令要熟记于心!

在Linux系统中,日志文件通常存储在/var/log目录下。比如,/var/log/syslog(或/var/log/messages,视发行版而定)记录系统整体事件,/var/log/a...

Windows服务器远程登录日志查询方法,linux查看登录日志方法

概述本文介绍Windows、Linux服务器查询系统的远程登录日志方法。根据服务器所使用的操作系统不同,有以下两种查询方法。Linux操作系统的登录日志查询通过远程连接登录Linux服务器,使用roo...

iptables防火墙如何记录日志(防火墙日志查看)

例如:记录所有ssh服务的登录的日志首先,我们需要了解如何将所有的iptables的INPUT链数据包记录到/var/log/messages中。如果你已经有一些iptables规则了,那么将记录日志...

如何安全管理SSH密钥以防止服务器被入侵

SSH密钥安全管理实施指南(2025年更新版)一、密钥生成与存储规范高强度密钥生成bashCopyCodessh-keygen-ted25519-a100#生成ED25519算法密钥(比...

在CentOS上安装nginx服务器(centos搭建代理服务器)

一、环境描述1.虚拟机配置CPU:单核内存:2GB硬盘:120GBIP:10.24.17.1082.操作系统版本:CentOS6.6x86_64安装方式:Minimal3.虚拟化环境VM...

CentOS7安全加固的一份整理规划建议

◆更新系统:及时更新CentOS7操作系统版本和安全补丁,确保系统以最新状态运行。◆关闭不必要的服务:在运行系统时,应关闭不需要的服务和端口,以减少系统暴露的攻击面。◆安装防火墙:使用iptables...

第四十七天-二叉树,centOS安装tomcat,Maven,vsftpd

学习笔记:1.Maven是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven...

Linux远程桌面连接使用教程 Widows终端远程连接Linux服务器

一、前言为什么不是远程连接Linux服务器?因为我不会,远程连接window我就用电脑自带的“远程桌面连接”。以下所述都是在CentOS操作系统下的。服务器刚换成Linux的时候很迷茫,感觉无从下手...

CentOS 安全加固操作,保护你的操作系统

系统加固是保障系统安全的重要手段,对于维护企业数据安全、用户隐私以及系统稳定运行具有重要意义。加固后的系统更加健壮和稳定,能够有效减少因安全问题导致的系统故障和停机时间,提高系统的可用性和可靠性。通过...

Dockerfile部署Java项目(docker如何部署java项目)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

CentOS7云主机部署Fail2ban阻断SSH暴力破解

关于Fail2banFail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)例如:当有人在试探你的HTTP、SSH、SMTP、FTP密...

在CentOS7上用源码编译安装PostgreSQL

1、新建postgres用户#useraddpostgres&&passwdpostgres2、安装依赖包#yum-yinstallmakegccgcc-c++readline...

pure-ftpd 使用(ftp prompt命令)

pure-ftpd是一个免费的ftp软件,其他介绍就不多说了。我们直接开始主题安装centosyuminstallepel-releaseyuminstallpure-ftpd配置备份原配置...

取消回复欢迎 发表评论: