文章目录
错误日志
定义与作用
错误日志是 MySQL 中最重要的日志之一,记录内容包括:
- mysqld 启动和停止时的信息
- 服务器运行过程中发生严重错误时的相关信息
- 应用场景:数据库因故障无法正常使用时,建议优先查看此日志
日志配置
开启状态:默认开启
存放目录:默认 /var/log/
日志文件名:默认 mysqld.log
查看日志位置的 SQL 语句:
show variables like '%log_error%'
二进制日志
介绍
二进制日志(BINLOG)记录了所有的 **DDL(数据定义语言)语句和 DML(数据操纵语言)**语句,但不包括数据查询(SELECT、SHOW)语句。
作用:
①. 灾难时的数据恢复;
②. MySQL 的主从复制。
在 MySQL 8 版本中,默认二进制日志是开启着的,涉及到的参数如下:
show variables like '%log_bin%'
日志格式
MySQL 服务器提供多种二进制日志记录格式,具体如下:
日志格式 | 含义 |
---|---|
STATEMENT | 基于 SQL 语句的日志记录,记录对数据修改的 SQL 语句到日志文件中 |
ROW | 基于行的日志记录,记录每一行的数据变更(默认格式 ) |
MIXED | 混合 STATEMENT 和 ROW 两种格式,默认用 STATEMENT,特殊情况自动切换为 ROW 记录 |
show variables like '%binlog_format%';
日志查看
因二进制日志以二进制存储,无法直接读取,需用 mysqlbinlog
工具查看,语法:
mysqlbinlog [参数选项] logfilename
参数选项说明
参数 | 含义 |
---|---|
-d | 指定数据库名,仅列出该数据库相关操作 |
-o | 忽略日志前 n 行命令 |
-v | 将行事件(数据变更)重构为 SQL 语句 |
-vv | 将行事件(数据变更)重构为 SQL 语句,且输出注释信息 |
日志删除
针对业务系统 binlog 数据量大、占用磁盘空间的问题,提供 3 种清理方式:
指令 | 含义 |
---|---|
reset binary logs |
删除全部 binlog 日志,日志编号从 binlog.000001 重新开始 |
purge binary logs to ‘binlog.xxxxxx’ | 删除指定编号(xxxxxx )之前的所有 binlog 日志 |
purge binary logs before 'yyyy-mm-dd hh24:mi:ss' |
删除指定时间(yyyy-mm-dd hh24:mi:ss )之前产生的所有 binlog 日志 |
也可以在MySQL的配置文件中配置二进制的过期时间,设置之后,二进制文件会自动删除
show variables like '%binlog_expire_logs_seconds%';
查询日志
查询日志中记录了客户端的所有操作语句,而二进制日志中不包含查询数据的SQL语句。默认情况下,查询日志是未开启的。如果需要开启查询日志,可设置以下配置:
show variables like '%general%'
vim /etc/mysql/my.cnf
#更改配置
[mysqld]
general_log = 1
general_log_file = mysql_query.log
#重启MySQL
sudo systemctl restart mysql
慢查询日志
慢查询日志记录满足以下条件的 SQL 语句:
- 执行时间超过
long_query_time
设置值 - 扫描记录数不小于
min_examined_row_limit
默认未开启,long_query_time
默认 10 秒(最小可设为 0,精度支持微秒 )
# 慢查询日志
slow_query_log=1
# 执行时间参数(单位:秒,示例设为 2 秒)
long_query_time=2
慢查询日志默认行为与扩展配置
默认情况下,慢查询日志存在以下限制:
- 不记录管理语句(如
ALTER
、CREATE
等操作) - 不记录未使用索引的查询语句
扩展配置项(修改 MySQL 配置文件生效)
通过以下参数可调整默认行为:
配置项 | 作用说明 |
---|---|
log_slow_admin_statements |
开启后,记录执行较慢的管理语句 |
log_queries_not_using_indexes |
开启后,记录执行较慢的未使用索引的查询语句 |
# 记录执行较慢的管理语句(1 开启,0 关闭)
log_slow_admin_statements = 1
# 记录执行较慢的未使用索引的语句(1 开启,0 关闭)
log_queries_not_using_indexes = 1