本文已参与「新人创作礼」活动,一起开启掘金创作之路。
日志筛选器
select @@global.log_error_services;
+----------------------------------------+
| @@global.log_error_services |
+----------------------------------------+
| log_filter_internal; log_sink_internal |
+----------------------------------------+
表示日志事件首选穿过内置的筛选器组件 log_filter_internal ,然后穿过内置的日志写入组件 log_sink_internal。组件是按照列出顺序执行的
在 log_error_services 的值中,指定的任何可加载(非内置)组件都需要通过 install component进行安装
配置错误日志
错误日志记录由 log_error变量(在启动脚本使用--log-error)控制
如果没有给出--log-error,则默认的目标文件是控制台
如果没有命名文件的情况下给出了--log-error,则默认是目标文件是一个在数据目录中名为host_name.err的文件
如果--log-error被制定来命名一个文件,默认的目标文件就是该文件(如果文件没有后缀,则自动添加一个.err后缀)如果没有用一个绝对路径来指定别的位置,那么这个文件就位于数据目录下
系统变量 log_error_verbsity控制着服务器将错误、警告和注释信息记录到错误日志的冗余情况。可以使用的值有如下:
- 1:只输出错误
- 2:输出错误和警告
- 3:输出错误、警告、注释(默认)
如果需要修改错误日志的位置,则需要修改my.cnf并重启
修改日志目录
创建目录
sudo mkdir /data/logs
# 手动创建一个日志文件
echo "" > logs/mysqld.log
sudo chown -R mysql:mysql /data/logs
修改my.cnf
sudo vi /etc/my.cnf
增加 log-error
[mysqld]
log-error=/data/logs/mysqld.log
重启mysql
sudo /etc/init.d/mysql restart
# 查看日志
cat logs/mysqld.log
# 登陆mysql查看是否修改成功
show variables like 'log_error';
调整冗余信息
log_error_verbsity 可以动态修改,修改后无需重启mysql
set @@global.log_error_verbosity=2;
# 查看修改结果
select @@global.log_error_verbosity;
系统变量 log_error_verbsity控制着服务器将错误、警告和注释信息记录到错误日志的冗余情况。可以使用的值有如下:
- 1:只输出错误
- 2:输出错误和警告
- 3:输出错误、警告、注释(默认)
轮转错误日志
当日志文件过大时,我们需要分离出多个文件
sudo mv /data/logs/mysqld.log /data/logs/mysqld.log.0
mysqladmin -u root -p123456 flush-logs
# 合并执行
sudo mv /data/logs/mysqld.log /data/logs/mysqld.log.0 && mysqladmin -u root -p123456 flush-logs
当执行第二行后,会新建一个mysqld.log文件
在第五行,可以使用cron计划,每天定时执行
通用查询日志 & 慢查询日志
通用查询日志
修改日志文件配置
# 查看日志文件路径
select @@global.general_log_file;
# 修改日志文件路径
set @@global.general_log_file='/data/query_log/query.log';
注意:如果在修改日志文件路径时出错,那么需要将目录权限设为mysql
sudo chown -R mysql:mysql /data/query_log/
开启日志记录
查看日志是否开启(ON是开,OFF是关)
show variables like 'general_log';
开启日志
set global general_log=on;
然后查看 query.log 文件,可以看到每次查询的sql都会在这里记录
cat /data/query_log/query.log
如果我们将日志写入方式修改为 table
查看日志写入方式(文件file和、数据表table)
show variables like 'log_output';
更改日志写入方式
set global log_output='table';
那么现在查看日志的方式就是
查询日志信息
select * from mysql.general_log;
注意:通用查询日志会造成巨大的日志,所以启用需谨慎
慢查询日志
慢查询日志包含了执行时间超过了 long_query_time秒(默认10秒),或者至少扫描了 max_examined_row_limit行(默认0)的SQL语句
修改慢查询日志的最大时间
查询超时时间
select @@global.long_query_time;
修改超时时间
set @@global.long_query_time=1;
修改慢查询日志的日志路径
创建目录 & 文件 略:/data/slow_query/slow_query.log
目录授权
sudo chown -R mysql:mysql /data/slow_query/
查询慢查询日志文件路径
select @@global.slow_query_log_file;
修改日志文件路径
set @@global.slow_query_log_file='/data/slow_query/slow_query.log';
刷新日志
flush logs;
启用慢查询日志
查看是否启用(0未启用1已启用)
select @@global.slow_query_log;
启用慢查询日志
set @@global.slow_query_log=1;
如果将 log_output设置为了table,那么将会在如下表中记录
select * from mysql.slow_log;
切换日志表
如果数据表数量过大,可以创建一个新的表来替代
drop table if exists mysql.general_log_new;
create table mysql.general_log_new like mysql.general_log;
rename table mysql.general_log to mysql.general_log_1, mysql.general_log_new to mysql.general_log;