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工具对慢查询日志进行分类汇总。