MySQL日志

MySQL日志

前言:

很多时候 当一个服务报错 我们第一反应是去查看日志 虽然对于大多数的服务来说 他们的日志文件的大差不差 但我们还是要是说一下的

MySQL日志

MySQL 日志是记录数据库记录数据库操作和运行状态的重要文件,主要用于故障排查、数据恢复、性能分析等场景。MySQL 提供了多种类型的日志,每种日志有其特定的用途。

一、错误日志(Error Log)

  • 作用:记录 MySQL 服务器启动、运行、关闭过程中发生的错误信息,以及严重警告信息。

  • 内容:包括服务器启动失败、崩溃、权限问题、配置错误等关键信息,是排查服务器无法启动或运行异常的首要参考。

  • 默认位置

    • Linux 系统:通常在/var/log/mysqld.log(可在my.cnf中通过log_error配置路径)。
    • Windows 系统:通常在 MySQL 安装目录的data文件夹中,文件名为hostname.err
    • ubuntu系统:通常在 /var/log/mysql/error.log
  • 配置方式 :在配置文件my.cnf(或my.ini)中设置:

    ini

    ini 复制代码
    [mysqld]
    log_error = /var/log/mysql/error.log  # 指定日志路径
    log_warnings = 2  # 记录更多警告信息(可选)

1. 启动失败相关
  • Can't start server: Bind on TCP/IP port: Address already in use

    • 含义:MySQL 默认端口(3306)被其他进程占用。

    • 解决:

      • 查看占用进程:netstat -tulpn | grep 3306lsof -i:3306
      • 终止占用进程:kill -9 进程ID
      • 或修改 MySQL 端口:在my.cnf中设置port=3307后重启。
  • InnoDB: The innodb_system data file 'ibdata1' must be writable

    • 含义:MySQL 数据目录(如/var/lib/mysql/)权限不足,mysql用户无法写入。

    • 解决:

      • 调整目录权限:chown -R mysql:mysql /var/lib/mysql/
      • 检查 SELinux 或防火墙是否限制了写入权限。
  • Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

    • 含义:系统数据库mysql的表缺失(可能是初始化失败或文件损坏)。

    • 解决:

      • 重新初始化数据库:mysqld --initialize --user=mysql
      • 若使用 rpm 包安装,可尝试rpm --force --reinstall mysql-server修复。
2. 运行中错误
  • InnoDB: Unable to lock ./ibdata1, error: 11

    • 含义:InnoDB 数据文件被锁定(可能是 MySQL 进程未正常关闭,残留进程占用)。

    • 解决:

      • 查找并终止残留进程:ps aux | grep mysql,然后kill -9 进程ID
      • 删除锁文件:rm -f /var/lib/mysql/ibdata1.lock
  • Too many connections

    • 含义:数据库连接数超过max_connections配置上限。

    • 解决:

      • 临时调整:SET GLOBAL max_connections = 1000;(重启后失效)
      • 永久调整:在my.cnf中设置max_connections=1000,重启服务
      • 检查应用是否存在连接泄露(未及时释放连接)。
  • Tablespace is missing for table ...

    • 含义:表空间文件(如.ibd)丢失或损坏,通常是手动删除了数据文件导致。

    • 解决:

      • 从备份恢复表空间文件
      • 若表不重要,可尝试删除表:DROP TABLE 表名;(需先在information_schema中确认表状态)

二、二进制日志(Binary Log,binlog)

  • 作用 :记录所有对数据库数据的修改操作(如INSERTUPDATEDELETECREATE等),不记录查询操作(如SELECT)。主要用于数据恢复主从复制

  • 特点

    • 以二进制格式存储,需用mysqlbinlog工具查看内容。
    • 日志文件按大小或时间自动轮转(如mysql-bin.000001mysql-bin.000002)。
  • 配置方式 :在my.cnf中启用并配置:

    ini 复制代码
    [mysqld]
    server-id = 1  # 主从复制必须设置,唯一标识服务器
    log_bin = /var/log/mysql/mysql-bin.log  # 日志路径及前缀
    max_binlog_size = 100M  # 单个日志文件最大大小(默认1G)
    binlog_format = row  # 日志格式(row/statement/mixed,推荐row)
    #statement 会显示输入的命令
    expire_logs_days = 7  # 日志自动过期时间(天)
    
    # 注意事项
    # 日志格式影响可读性
    # 若 binlog_format=statement:直接记录原始 SQL 语句,可读性高。
    # 若 binlog_format=row:记录数据行的变化(而非原始 SQL),需加 --base64-output=DECODE-ROWS -v 参数才能看到具体修改:
    
    mysqlbinlog --base64-output=DECODE-ROWS -v /var/log/mysql/mysql-bin.000002

  • 常用操作

    • 查看二进制日志列表:SHOW BINARY LOGS;
    • 查看当前使用的日志:SHOW MASTER STATUS;
    • 刷新日志(生成新文件):FLUSH LOGS;
    • 查看日志内容:mysqlbinlog /var/log/mysql/mysql-bin.000001
3. 示例:解析结果片段

plaintext

plaintext 复制代码
# at 302
#240804 10:30:15 server id 1  end_log_pos 456 	Query	thread_id=5	exec_time=0	error_code=0
use testdb;
SET TIMESTAMP=1722733815;
UPDATE user SET age=20 WHERE id=1;

上述内容表示:

2024 年 8 月 4 日 10:30:15,在 testdb 库中执行了 UPDATE user SET age=20 WHERE id=1; 命令。

三、慢查询日志(Slow Query Log)

  • 作用 :记录执行时间超过指定阈值的 SQL 语句,用于性能优化,定位低效查询。

  • 配置方式 :在my.cnf中设置:

    ini

    ini 复制代码
    [mysqld]
    slow_query_log = 1  # 启用慢查询日志(1为开启,0为关闭)
    slow_query_log_file = /var/log/mysql/slow.log  # 日志路径
    long_query_time = 2  # 慢查询阈值(秒),超过此时间的查询会被记录
    log_queries_not_using_indexes = 1  # 记录未使用索引的查询(可选)

  • 查看方式 :直接打开日志文件(文本格式),或使用mysqldumpslow工具分析:

    bash

    bash 复制代码
    mysqldumpslow -s t /var/log/mysql/slow.log  # 按执行时间排序显示

四、通用查询日志(General Query Log)

  • 作用 :记录 MySQL 服务器所有的连接信息和执行的 SQL 语句(包括SELECTINSERT等所有操作),适合跟踪用户行为或调试特定问题。

  • 注意 :会产生大量日志,可能影响性能,不建议在生产环境长期开启

  • 配置方式 :在my.cnf中设置:

    ini

    ini 复制代码
    [mysqld]
    general_log = 1  # 启用通用查询日志
    general_log_file = /var/log/mysql/general.log  # 日志路径

总结:

以上就是关于MySQL的日志相关的东西 反正也蛮简单的

好了 希望大家开心!

相关推荐
十八旬3 小时前
苍穹外卖项目实战(日记十)-记录实战教程及问题的解决方法-(day3-2)新增菜品功能完整版
java·开发语言·spring boot·mysql·idea·苍穹外卖
FeBaby4 小时前
mysql为什么使用b+树不使用红黑树
数据库·b树·mysql
ZHZCE4 小时前
在 Ubuntu 20.04 上安装 MySQL 8.0
mysql
令狐少侠20114 小时前
如何使用navicat连接容器中的mysql数据库
mysql·docker
青草地溪水旁4 小时前
`mysql_query()` 数据库查询函数
数据库·mysql·c
怕浪猫5 小时前
MySQL 多表查询的应用
sql·mysql
秦jh_5 小时前
【MySQL】基本查询
linux·数据库·c++·mysql
一只叫煤球的猫16 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
遇见你的雩风17 小时前
【MySQL】CRUD基础详解
数据库·mysql
.Shu.19 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【四、事务引擎核心 - MVCC与锁机制】
数据库·mysql