您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# MySQL错误日志与通用查询实例分析
## 引言
MySQL作为最流行的开源关系型数据库之一,其日志系统是数据库管理员(DBA)进行故障排查、性能优化的重要工具。本文将深入分析MySQL错误日志(error log)与通用查询日志(general query log)的功能定位、配置方法,并通过典型实例演示如何利用这两种日志解决实际问题。
---
## 一、MySQL错误日志详解
### 1.1 错误日志的作用
错误日志记录了MySQL服务器运行过程中发生的所有严重事件,包括:
- 服务器启动/关闭信息
- 运行时的严重错误(如表损坏)
- 事件调度器执行信息
- 主从复制相关的错误
### 1.2 配置参数
```sql
-- 查看当前错误日志配置
SHOW VARIABLES LIKE 'log_error';
-- 动态设置错误日志路径(需MySQL 5.7+)
SET GLOBAL log_error = '/var/log/mysql/mysql-error.log';
典型my.cnf配置示例:
[mysqld]
log_error = /var/log/mysql/mysql-error.log
log_error_verbosity = 3 # 1=ERROR, 2=ERROR+WARNING, 3=ERROR+WARNING+NOTE
建议使用Linux的logrotate工具:
/var/log/mysql/mysql-error.log {
daily
rotate 30
missingok
compress
delaycompress
notifempty
create 640 mysql mysql
postrotate
mysqladmin flush-logs
endscript
}
-- 临时开启通用日志(生产环境慎用)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/mysql-query.log';
-- 长期配置建议写入my.cnf
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log
log_output = FILE # 可选TABLE/FILE/BOTH
max_length_for_sort_data
调整日志记录长度错误日志片段:
2023-08-20T03:45:12.935234Z 0 [ERROR] [MY-010268] [Server] Failed to initialize DD Storage Engine
2023-10-20T03:45:12.935567Z 0 [ERROR] [MY-010119] [Server] Aborting
解决方案:
1. 检查datadir
权限
2. 执行mysql_upgrade -u root -p
3. 验证InnoDB表空间完整性
错误日志:
[ERROR] [MY-000061] [Server] Too many connections (1040)
处理步骤:
-- 临时增加连接数
SET GLOBAL max_connections = 500;
-- 长期方案需优化连接池配置
show status like 'Threads_connected';
通过通用日志发现可疑查询:
# Time: 2023-08-20T04:45:12.123456Z
# User@Host: webapp[webapp] @ [192.168.1.100]
SELECT * FROM orders WHERE status='pending' ORDER BY create_time DESC;
优化方案:
-- 添加复合索引
ALTER TABLE orders ADD INDEX idx_status_createtime (status, create_time);
-- 改写查询只获取必要字段
SELECT order_id, customer_name FROM orders WHERE status='pending' ORDER BY create_time DESC;
日志记录:
SELECT COUNT(*) FROM products WHERE price BETWEEN 100 AND 200;
执行计划分析:
EXPLN SELECT COUNT(*) FROM products WHERE price BETWEEN 100 AND 200;
可能的优化: - 为price字段添加索引 - 考虑使用覆盖索引
使用grep进行高效分析:
# 查找特定时间段的错误
grep -A 3 -B 3 "2023-08-20T14" /var/log/mysql/mysql-error.log
# 统计错误类型出现频率
awk '/ERROR/{print $5}' mysql-error.log | sort | uniq -c | sort -nr
-- 查看最近失败的SQL
SELECT * FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_ERRORS > 0 ORDER BY SUM_TIMER_WT DESC LIMIT 5;
pt-query-digest
/var/lib/mysql
目录通过系统化的日志分析,可以解决约70%的MySQL运维问题。建议建立日常巡检机制,将日志监控纳入DevOps流程。
注:本文所有示例基于MySQL 8.0版本,部分参数在5.7及以下版本可能有所不同。 “`
这篇文章共计约1680字,采用Markdown格式编写,包含: 1. 层级分明的章节结构 2. 实际配置代码片段 3. 典型错误案例分析 4. 命令行操作示例 5. 可视化表格建议 6. 版本兼容性说明
可根据需要调整具体案例细节或补充特定场景的分析方法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。