MySQL日志详解及配置方法

MySQL有4种日志类型,分别是错误日志、二进制日志、查询日志和慢查询日志。

错误日志

错误日志记录mysqld启动、停止和服务器运行过程中发生的任何严重的错误信息。

设置错误日志文件地址:

[mysqld]
log-error = "/home/chenyubo/www/logs/mysql.error.log"

若不指定文件名,默认文件名为hostname.err;若不指定目录,默认目录为DATADIR(数据目录)。

二进制日志

即binlog,记录所有的DDL语句和DML语句,但不包括查询语句。二进制日志的格式有三种:基于语句的格式(STATEMENNT)、基于行的格式(ROW)和混合模式(MIXED)。

设置二进制日志文件地址(log-bin)和日志格式(binlog_format):

[mysqld]
log-bin = "binlog/binlog"
binlog_format=row
# binlog_format=statement
# binlog_format=mixed

若不指定文件名,默认文件名为hostname-bin.000001;若不指定目录,默认目录为DATADIR(数据目录)。

若要只记录部分数据库的二进制日志,可指定binlog-do-db参数:

[mysqld]
binlog-do-db = didi
binlog-do-db = letv

若要不记录部分数据库的二进制日志,可指定binlog-ignore-db参数:

[mysqld]
binlog-ignore-db = didi

删除binlog日志有四种方式,分别为:

1.使用reset master命令,该命令删除所有的binlog日志,新日志编号从000001开始。

mysql> reset master;

2.使用purge master logs to 'mysql-bin.00000x'命令,该命令删除'00000x'编号之前所有的日志。

mysql> purge master logs to 'mysql-bin.000006';

3.使用purge master logs before 'yyyy-mm-dd hh24:mi:ss'命令,该命令删除日期为'yyyy-mm-dd hh24:mi:ss'之前所产生的所有与日志。

mysql> purge master logs before '2020-07-10 12:12:12';

4.设置expire_logs_days参数,此参数表示日志的过期天数。过了指定的天数后日志将会被自动删除。

[mysqld]
expire_logs_days = 3

查询日志

查询日志记录了客户端执行的所有语句。二进制日志和查询不同的地方是,前者不包含查询数据的语句。

查询日志可以设置为保存在文件中或表中,可用log-output参数指定保存的位置:

[mysqld]
log-output = table
# log-output = file
# log-output = none
# log-output = table,none

log-output的可选值为table,file和none的任意组合,但none的优先级较高,若指定了none,则不保存在表和文件中。

启用查询日志可用general-log参数,并用general-log-file指定路径:

[mysqld]
# 启用查询日志
general-log = 1
# 关闭查询日志
# genera-log = 0

# 查询日志路径
general-log-file = "/home/chenyubo/www/logs/mysql.general.log"

若不指定文件名,默认文件名为hostname.log;若不指定目录,默认目录为DATADIR(数据目录)。

慢查询日志

慢查询日志记录所有执行时间超过long_query_time(单位为秒,精度可以到微妙)且记录数不小于min_examined_row_limit的所有SQL语句。

long_query_time默认为10s。但是管理语句和不使用索引查询的语句不会记录到慢查询日志。其中,管理语句包括:alter table,analyze talbe,check table,create table,create index,drop index,optimize table和repaire table。

如果要监控此两类语句,可分别通过设置log-slow-admin-statement参数和log_queries_not_using_indexes参数进行控制。

慢查询日志默认是关闭的,可用slow_query_log参数打开慢查询日志,并用slow_query_log_file指定日志路径。

[mysqld]
# 打开慢查询日志
slow_query_log = 1
# 关闭慢查询日志
# slow_query_log = 0

# 设置慢查询阈值
long_query_time = 3

# 设置慢查询日志路径
slow_query_log_file = "/home/chenyubo/www/logs/mysql.slow.log"

如果慢查询日志很多,可使用mysqldumpslow工具对慢查询日志进行分类汇总。

你可能感兴趣的:(MySQL)