MySQL日志历史文章,
《MySQL日志 - General Query Log》
MySQL的错误日志,是我们排查问题的主要线索之一,引用GreatSQL技术社区的这篇文章《图文结合带你搞懂MySQL日志之Error Log(错误日志)》,借鉴学习一下。
什么是错误日志
错误日志(Error Log)是MySQL中最常用的一种日志,主要记录MySQL服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。
错误日志记录了什么?
错误日志包含mysqld启动和关闭的时间信息,还包含诊断消息,例如服务器启动和关闭期间以及服务器运行时出现的错误、警告和其他需要注意的信息。
例如:如果mysqld检测到某个表需要检查或修复,会写入错误日志。
根据错误日志配置,错误消息还可能填充performance_schema.error_log表,以便为日志提供SQL接口,使错误日志能够查询。
如果用mysqld_safe启动mysqld,mysqld_safe会将消息写入错误日志。
例如,当mysqld_safe注意到mysqld异常退出时,它会重新启动mysqld,并将mysqld重新启动的消息写入错误日志。
怎么启动错误日志
在MySQL数据库中,错误日志功能是默认开启的。而且,错误日志无法被禁止。
默认情况下,错误日志存储在MySQL数据库的数据文件夹下,名称默认为mysqld.log(Linux系统)或hostname.err(mac系统)。如果需要制定文件名,则需要在f或者my.ini中做如下配置,
[mysqld]log-error=[path/[filename]]#path为日志文件所在的目录路径,filename为日志文件名
修改配置项后,需要重启MySQL服务以生效。
查看日志
MySQL错误日志是以文本文件形式存储的,可以使用文本编辑器直接查看。
查询错误日志的存储路径,
mysql>showvariableslike'log_err%';+----------------------------+----------------------------------------+|Variable_name|Value|+----------------------------+----------------------------------------+|log_error|/var/log/mysqld.log||log_error_services|log_filter_internal;log_sink_internal||log_error_suppression_list|||log_error_verbosity|2|+----------------------------+----------------------------------------+4rowsinset(0.00sec)
参数解析
log_error定义为错误日志文件路径。
log_error_services控制哪个日志组件启用错误日志,该变量可以包含具有0、1或多组件列表;在后一种情况下,组件可以用分号或(从MySQL 8.0.12开始)逗号分隔,另外服务器按照列出的顺序执行组件。
默认情况下,log_error_services具有以下值,
mysql>SELECT@@GLOBAL.log_error_services;+----------------------------------------+|@@GLOBAL.log_error_services|+----------------------------------------+|log_filter_internal;log_sink_internal|+----------------------------------------+1rowinset(0.00sec)
log_error_suppression_list用于错误日志的事件的抑制作用,有些日志不希望记录下来。
log_error_verbosity日志记录等级,
在MGR中建议设置为3可以记录更多日志信息,便于跟踪问题。
log_timestamps控制日志显示时间
在MySQL 5.7.2新增了log_timestamps这个参数,该参数主要是控制error log、general log,等等记录日志的显示时间参数。
在5.7.2之后改参数为默认UTC,这样会导致日志中记录的时间比中国这边的慢,导致查看日志不方便。
mysql>SHOWGLOBALVARIABLESLIKE'log_timestamps';+----------------+-------+|Variable_name|Value|+----------------+-------+|log_timestamps|UTC|+----------------+-------+1rowinset(0.00sec)
可以看到使用的时间是UTC时间,UTC是世界公用的一个时间,我们本地时间和UTC时间就必然存在一个换算关系。按北京时间来算,北京时间将比UTC时间快8个小时。
修改方法:
MySQL 5.7修改,
1.setgloballog_timestamps=system;2.修改后可以在配置文件再添加[mysqld]log_timestamps=system
MySQL 8.0修改,
1.setgloballog_timestamps=system;
因此,
为了国内用户便于读取日志信息,建议将参数写入到配置文件f。
2. MySQL 8.0支持参数log_timestamps持久化设置。
删除\刷新日志
对于很久以前的错误日志,数据库管理员查看这些错误日志的可能性不大,可以将这些错误日志删除,以保证MySQL服务器上的硬盘空间。MySQL的错误日志是以文本文件的形式存储在文件系统中的,可以直接删除。
#刷新日志[root@kaitolog]#mysqladmin-uroot-pflush-logsEnterpassword:mysqladmin:refreshfailed;error:'Couldnotopenfile'/var/log/mysqld.log'forerrorlogging.'
官网提示,
flush-logs指令操作:
MySQL 5.5.7以前的版本,flush-logs将错误日志文件重命名为filename.err_old,并创建新的日志文件。
从MySQL 5.5.7开始,flush-logs只是重新打开日志文件,并不做日志备份和创建的操作。
如果日志文件不存在,MySQL启动或者执行flush-logs时会自动创建新的日志文件。重新创建错误日志,大小为0字节。
如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,
近期更新的文章:
《MySQL日志 - General Query Log》
《最近碰到的一些问题》
《基金词汇的普及 - QDII和QFII (RQFII)》
《基金词汇的普及 - ETF和FOF》
《MySQL convert函数导致的字符集错误场景》
近期的热文:
《推荐一篇Oracle RAC Cache Fusion的经典论文》
《"红警"游戏开源代码带给我们的震撼》
文章分类和索引:
《公众号1100篇文章分类和索引》
如果觉得《MySQL日志 - Error Log错误日志》对你有帮助,请点赞、收藏,并留下你的观点哦!