PS:版本查询select version();
1.MySQL常用日志服务器层日志(存储引擎层有自己的日志)
日志类型 描述error_log(错误日志) 记录MySQL启动、运行或停止时出现的问题
general_log(常规日志) 记录所有发送给MySQL的请求(耗性能)
slow_query_log(慢查日志) 记录符合条件的查询(eg:超过10s、没有使用索引等)
binary_log(二进制日志) 记录全部有效的数据修改日志(老版本数据库不会开启)
relay_log(中继日志) 用于主从复制,临时存储主从同步的二进制日志(增量复制)
知识扩展:https://blog.csdn.net/zhang123456456/article/details/72811875
实时查看文件:tail -f /var/log/mysqld.log
tail -f 用于监视文件增长(默认是末尾10行)
2.error_log(错误日志)一般记录MySQL运行错误和和未授权的访问
老版:log_error + log_warnings
常用:log_error + log_error_verbosity
新版:log_error + log_error_verbosity + log_error_services
查询MySQL配置:show variables like '%log_error%';
SQL查询可以这么干:
-- Ubuntu下默认是:`/var/log/mysql/error.log` -- CentOS下默认是:`/var/log/mysqld.log` | `/var/log/mariadb/mariadb.log` select @@log_error; -- 尽可能和Data分开存储 -- 0:不记录警告信息,1:告警信息写入错误日志,2:各类告警信息都写入(eg:网络故障和重连信息) select @@log_warnings; -- MySQL8中已经移除(MySQL5.7默认是2,MariaDB5.5.60默认是1) -- 错误级别(1:Error,2:Error、Warning,3:Error、Warning、Info select @@log_error_verbosity; -- MySQL8默认是2,MySQL5.7默认是3 -- PS:从MySQL 5.7.2开始,首选`log_error_verbosity`系统变量 -- 默认是`log_filter_internal; log_sink_internal` select @@log_error_services; -- MySQL8.0中新增PS:其实MySQL在市面上有很多成熟解决方案(基本上都是基于5.6、5.7的)
这也是为什么我开篇主推MySQL5.7系列和MariaDB5.5.60(很多时候不是不用最新DB,而是架构依赖做不到啊)
知识拓展:https://www.cnblogs.com/kerrycode/p/8973285.html
MySQL8.0新增参数:log_error_services日志服务组件:
日志服务组件名 描述log_sink_internal 默认的日志输出组件(依赖log_error)
log_filter_internal 默认的日志过滤组件(依赖log_error_verbosity)
log_sink_json 将错误日志输出到json文件
log_sink_syseventlog 将错误日志输出到系统日志文件
PS:log_filter_internal:过滤错误信息(达不到级别的不记录)
日记格式一般是这样的:UTC时间戳 进程id [日志级别] [错误代码] [由什么产生的日志(Server or Client)] 详细信息
eg:2019-05-19T09:54:11.590474Z 8 [Warning] [MY-010055] [Server] IP address '192.168.36.144' could not be resolved: Name or service not known
一般log_sink_json用的比较多:
官方文档参考:https://dev.mysql.com/doc/refman/8.0/en/error-log-json.html
PS:第一次使用需要安装一下json组件:install component 'file://component_log_sink_json';
常用设置:set persist log_error_services='log_filter_internal;log_sink_json';
时间戳相关的小知识点上面的时间默认是UTC的时间戳,和我们是有时差的,这个时间戳可以通过设置log_timestamps来本地化:
-- 查询 select @@log_timestamps; -- MySQL5.7新增 -- 从8开始,可通过SET PERSIST命令将全局变量的修改持久化到配置文件中 set persist log_timestamps='SYSTEM'; -- 需要root权限PS:set persist生成的配置文件路径在:/var/lib/mysql/mysqld-auto.cnf
3.general_log(常规日志)以前开发调试的时候基本上都是会开启的,上线后关闭(系统V1初期的时候也会开启一段时间)
现在开发可以使用go-sniffer来抓包查看客户端执行的SQL
-- 是否打开常规日志(0不打开,1打开) -- 一般不打开(性能) select @@general_log; -- 默认为0 -- Ubuntu默认:/var/lib/mysql/ubuntuserver.log -- CentOS默认:/var/lib/mysql/localhost.log select @@general_log_file; -- 常规日志的路径 -- 日志的存储方式(FILE | TABLE | NONE) select @@log_output; -- 默认是文件存储简单看一下常规日志在数据库中的结构: