1.错误日志
记录 MySQL 服务器在启动、运行和停止过程中发生的错误和警告信息,对于排查和诊断问题非常有用。
可以通过此命令获取当前MySQL配置的错误日志路径:
SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE '%log_error%'; ---更多地展示相关的变量及对应的值
例子:
修改了MySQL中的auto.cnf文件中的UUID,报错日志为:
2023-09-12T09:52:09.009009Z 0 [ERROR] The server_uuid stored in auto.cnf file is not a valid UUID.
2023-09-12T09:52:09.009026Z 0 [ERROR] Initialization of the server's UUID failed because it could not be read from the auto.cnf file. If this is a new server, the initialization failed because it was not possible to generate a new UUID.
可以看到日志中给我们指明了错误所在的文件,和具体错误的信息
2.二进制日志
binlog记录所有对数据库进行更改的操作,包括数据修改和结构变更。它可以用于数据恢复、复制和故障恢复。 记录所有DDL(数据定义语言)语句和DML(数据操纵语言)语句,不包括数据查询(SELECT、SHOW)语句。
通过此命令获取二进制日志相关信息及存放路径:
show variables like '%log_bin%';
作用:1.灾难时数据恢复
2.MySQL主从复制
格式:
- Statement:记录 SQL 语句的原始文本,对数据进行修改的sql都会记录在日志文件中
- Row:记录对行的更改,记录每一行的数据变更
- Mixed:结合了 Statement 和 Row 两种格式,默认为Statement ,根据情况选择合适的记录方式,,某些特殊情况下会自动切换为row进行记录
mysql>show variables like 'binlog_format'; 查看日志格式为ROW
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
修改/etc/my.cnf,添加binlog_format=STATEMENT,可以把日志格式改为STATEMENT
清除二进制日志的方式:
reset master 删除全部的binlog日志,删除之后日志编号从000001开始
purge master logs to ‘binlog.000002'; 删除binlog.000002日志之前的所有日志
purge master logs before ‘yyyy-mm-dd hh24:mi:ss’ 删除日志为yyy-mm-dd hh24:mi:ss之前产生的所有日志
也可以设置二进制日志过期自动删除:
在/etc/my.cnf中设置
binlog_expire_logs_seconds=2592000 ---以秒为单位,默认30天
3.查询日志
查询日志默认关闭
show variables like '%general%';
+------------------+--------------------+
| Variable_name | Value |
+------------------+--------------------+
| general_log | OFF |
| general_log_file | /data/mysql/lb.log |
+------------------+--------------------+
2 rows in set (0.01 sec)
修改my.cnf,增加:
general_log=1
general_log_file=/data/mysql/query.log
重启mysqld:
service mysqld restart
查看查询日志:
tail -f /data/mysql/query.log
/usr/local/mysql/bin/mysqld, Version: 5.7.43-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /data/mysql/mysql.sock
Time Id Command Argument
2023-09-13T03:24:01.321877Z 2 Connect root@localhost on yunwei using Socket
2023-09-13T03:24:01.323028Z 2 Query show databases
2023-09-13T03:24:01.323361Z 2 Query show tables
2023-09-13T03:24:01.323613Z 2 Field List lq
2023-09-13T03:24:01.327137Z 2 Query show tables
4.慢查询日志
慢查询日志(Slow Query Log)是 MySQL 数据库中一种记录执行时间超过一定阈值的查询语句的功能。它记录了执行时间超过预设阈值(通常以秒为单位)的查询语句,以帮助开发人员和数据库管理员识别和优化性能较差的查询。
记录了所有执行时间超过参数long_query_time设置值并且扫描记录数不小于min_examined_row_limit的所有sql语句的日志,默认不开启。
long_query_time默认值为10秒,最小为0,精确可以到微秒。
slow_query_log=1 ---开启慢查询日志
long_query_time=2 ---设置参数为2秒,超过2秒则为慢sql
默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以使用log_slow_admin_statements和 log_queries_not_using_indexes
如果需要开启,可以在my.cnf添加配置如下:
log_slow_admin_statements=1 ---记录执行较慢的管理语句
log_queries_not_using_indexes = 1 记录执行较慢的未使用索引的语句