MySQL日志简介
日志是数据库的重要组成部分。日志文件中记录了数据库运行期间发生的变化。当数据库遭到意外损害时,可以通过日志文件来查询出错原因,并且可以通过日志文件进行数据恢复。MySQL日志用来记录MySQL数据库的运行情况、用户操作和错误信息等。日志文件可以为MySQL管理和优化提供必要的信息。MySQL日志主要分为4类:
-
二进制日志。以二进制文件的形式记录数据库中所有更改数据的语句。
-
错误日志。记录MySQL服务的启动、关闭和运行错误等信息。
-
通用查用日志。记录用户登录和记录查询的信息。
-
慢查询日志。记录执行时间超过指定时间的查询操作或不使用索引的查询。
除二进制日志外,其他日志都是文本文件。日志文件通常存储在MySQL数据库的数据目录下。默认情况下,只启动了错误日志的功能。其他3类日志都需要数据管理员设置。
但是,启动日志功能会降低MySQL数据库的性能,同时,日志会占用大量的磁盘空间。
二进制日志
二进制日志
主要记录数据库的变坏情况。二进制日志以一种有效的格式,包含了所有更新了的数据或者已经潜在更新了的数据的语句。语句以“事件”的形式保存,描述数据的更改。二进制日志还包含了关于每个更新数据库语句的执行时间信息。它不包含没有修改任何数据的语句。如果要记录所有语句,就需要使用通用查询日志。使用二进制日志的主要目的是最大可能地恢复数据,因为二进制日志包含备份后进行的所有更新。
在默认情况下,二进制日志是关闭的,可以修改MySQL的配置文件来启动和设置二进制日志。my.ini中[mysqld]组下面有几个设置是关于二进制日志选项的:
[mysqld]
log-bin[=path/[filename]]
expire_logs_days=10
max_binlog_size=100M
# 查询日志设置
SHOW VARIABLES like 'log_bin';
# 查看当前的二进制日志文件数及其文件名
# MySQL二进制日志并不能直接查看,而要使用mysqlbinlog命令查看。
show binary logs;
# 删除二进制日志
RESET MASTER; # MySQL的二进制日志文件可以设置为自动删除
或
PURGE {MASTER|BINARY} LOGS TO 'log_name'; # 将删除文件名编号比指定文件名编号小的所有日志文件
PURGE {MASTER|BINARY} LOGS BEFORE 'date'; # 将删除指定日期以前的所有日志文件
# 使用二进制日志恢复数据库
mysqlbinlog [option] filename|mysql -u user -ppassword
option:
--start-date和--stop-date、--start-position和--stop-position
# 暂时停止二进制日志功能
SET sql_log_bin={0|1}; # 0暂停记录、1启动记录
数据库文件最好不要与日志文件放在同一个磁盘上,这样,当数据库所在的磁盘发生故障时,可以使用日志文件恢复数据。
错误日志
错误日志文件
包含了当mysqld启动和停止时,以及服务器运行过程中发生任何严重错误时的相关信息。在MySQL中,错误日志也是非常有用的,MySQL会将启动和停止数据库信息以及一些错误信息记录到错误日志文件中。
在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。如果执行了FLUSH LOGS,错误日志文件就会重新加载。
[mysqld]
log-error[=path/[filename]]
# 查看错误日志
SHOW VARIABLES LIKE 'log_error'; # MySQL错误日志是以文本文件形式存储的
# 删除错误日志
mysqladmin -u root -p flush-logs # 命令行
或
FLUSH LOGS;
通用查询日志
通用查询日志
记录MySQL的所有用户操作,包括启动与关闭服务、执行查询和更新语句等。
在默认情况下,MySQL服务器并没有开启通用查询日志。
[mysqld]
log[=path/[filename]]
# 查看通用查询日志
# 删除通用查询日志
mysqladmin -u root -p flush -logs
如果不指定目录和文件名,通用查询日志将默认存储在MySQL数据目录中hostname-slow.log文件中,hostname是MySQL数据库的主机名。
慢查询日志
慢查询日志
是记录查询时长超过指定时间的日志。慢查询日志主要用来记录执行时间较长的查询语句。通过慢查询日志,可以找到执行时间较长、执行效率较低的语句,然后进行优化。
在默认情况下,MySQL中慢查询日志是关闭的,可以通过配置文件my.ini或者my.cnf中的slow-query-log选项打开,也可以在MySQL服务启动时使用–slow-query-log[=filename]启动慢查询日志。启动慢查询日志时,需要在my.ini或者my.cof文件中配置long_query_time选项指定记录阈值,如果某条查询语句的查询时间超过了这个值,这个查询过程就被记录到慢查询日志文件中。
[mysqld]
slow_query_log_file[=path/[filename]]
long_query_time=n
慢查询日志就默认存储在MySQL数据目录中hostname-slow.log文件中,hostname是MySQL数据库的主机名。参数n是时间值,单位是s。如果没有设置long_query_time选项,默认时间为10s。
(最近更新:2019年09月03日)