MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是:
● 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。
● 查询日志:记录建立的客户端连接和执行的语句。
● 二进制日志:记录所有更改数据的语句,可以用于数据复制。
● 慢查询日志:记录所有执行时间超过long_query_time的所有查询或不使用索引的查询
二进制日志主要记录MySQL数据库的变化。二进制日志以一种有效的格式并且是事务安全的方式包含更新日志中可用的所有信息。二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的语句。语句以“事件”的形式保存,描述数据更改。
二进制日志的主要用途:
复制:MySQL的主从复制架构中,主服务器上的二进制日志用于将数据更改事件传输到从服务器。从服务器读取这些事件,并在本地执行,从而保持与主服务器的数据同步。
数据恢复:在某些情况下,如果数据库发生损坏,可以使用二进制日志来恢复数据。通过重放二进制日志中的事件,可以重新构建数据库的状态。
审计:二进制日志也可以用于审计目的,因为它记录了所有修改数据的操作。
默认情况下,二进制日志是开启的,可以通过修改MySQL的配置文件来启动和设置二进制日志。
在MySQL的配置文件my.ini中,可以通过以下设置来启用和配置二进制日志
[mysqld]
log_bin = mysql-bin
server_id = 1
log_bin:启用二进制日志并指定日志文件的基名。MySQL会在基名后面添加扩展名来创建不同的日志文件。
server_id:为每个MySQL服务器实例分配一个唯一的ID。这在复制操作中非常重要,因为它允许MySQL区分来自不同服务器的二进制日志事件。
查看二进制日志内容:
mysqlbinlog mysql-bin.000001
使用SHOW BINARY LOGS查看二进制日志文件个数及文件名
show binary logs;
使用RESET MASTER语句删除所有二进制日志文件
PURGE BINARY LOGS;
//执行完该语句后,所有二进制日志将被删除,MySQL会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号。
RESET MASTER;
使用PURGE MASTER LOGS语句删除指定日志文件
PURGE BINARY LOGS TO 'mysql-bin.000002';
这将提取在指定时间范围内的事件,并将它们保存到recovery.sql文件中。
mysqlbinlog --start-datetime="2023-04-01 10:00:00"
--stop-datetime="2023-04-01 11:00:00"
mysql-bin.000001 > recovery.sql
这将把recovery.sql文件中的事件应用到指定的数据库上。
mysql -u [username] -p[password] [database_name] < recovery.sql
暂停记录二进制日志
SET sql_log_bin = 0;
恢复记录二进制日志
SET sql_log_bin = 1;
MySQL错误日志(Error Log)是MySQL服务器用来记录运行时遇到的错误、警告、诊断信息和其他重要消息的日志文件。错误日志对于故障排查和系统监控非常有用,因为它可以帮助数据库管理员(DBA)了解服务器发生了什么,以及在何时、何地发生的。
错误日志的启动和停止以及指定日志文件名都可以通过修改my.ini(或者my.cnf)来配置。。错误日志的配置项是log-error。在[MySQLd]下配置log-error,则启动错误日志。
[mysqld]
log_error = /var/log/mysql/error.log
通过错误日志可以监视系统的运行状态,便于及时发现故障、修复故障。MySQL错误日志是以文本文件形式存储的,可以使用文本编辑器直接查看MySQL错误日志。如果不知道日志文件的存储路径,可以使用SHOW VARIABLES语句查询错误日志的存储路径。SHOW VARIABLES语句如下:
SHOW VARIABLES LIKE 'log_error';
MySQL的错误日志是以文本文件的形式存储在文件系统中的,可以直接删除。
在运行状态下删除错误日志文件后,MySQL并不会自动创建日志文件。flush logs在重新加载日志的时候,如果文件不存在,则会自动创建。所以在删除错误日志之后,如果需要重建日志文件,需要在服务器端执行以下命令:
flush logs;
通用查询日志记录MySQL的所有用户操作,包括启动和关闭服务、执行查询和更新语句等。
my.ini中配置
[mysqld]
general_log = ON
general_log_file = /var/log/mysql/mysql-general.log
//开启
set @@global.general_log=1;
//关闭
set @@global.general_log=0;
查看日志路径
SHOW VARIABLES LIKE 'general%';
记事本打开即可
MySQL的查询日志是以文本文件的形式存储在文件系统中的,可以直接删除。
在运行状态下删除查询日志文件后,MySQL并不会自动创建日志文件。flush logs在重新加载日志的时候,如果文件不存在,则会自动创建。所以在删除查询日志之后,如果需要重建日志文件,需要在服务器端执行以下命令:
flush logs;
日志文件大小:如果查询日志非常大,直接查看整个文件可能会非常耗时,甚至导致系统资源不足。在这种情况下,使用tail
或grep
等工具来查看日志文件的特定部分会更为高效。
日志内容:查询日志可能包含敏感信息,如用户查询的详细信息。确保只有授权的用户可以访问这些日志文件,并遵守适当的安全协议。
性能影响:启用查询日志可能会对MySQL性能产生负面影响,尤其是在高负载的生产环境中。因此,建议仅在需要时启用查询日志,并在使用完毕后及时关闭。
日志轮换:为了管理日志文件的大小和保留期限,你可能需要配置日志轮换。这可以通过操作系统级别的日志管理工具或MySQL的log_rotate
选项来实现。
慢查询日志是记录查询时长超过指定时间的日志。慢查询日志主要用来记录执行时间较长的查询语句。通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后进行优化。
打开MySQL的配置文件my.ini,这里,long_query_time设置了阈值,单位是秒。任何执行时间超过这个值的查询都会被记录到慢查询日志中。
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
先找到日志所在路径,再用txt打开
和通用查询日志一样,慢查询日志也可以直接删除。并且需要执行flush logs语句重建日志文件。