本文目录一览:
如何開啟mysql的日志或如何查看 mysql的日志文件
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
在mysql的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了。
例如:#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=#Enter a name for the query log file. Otherwise a default name will be used.
#log=#Enter a name for the error log file. Otherwise a default name will be used.
log-error=#Enter a name for the update log file. Otherwise a default name will be used.
#log-update=
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉
查看命令:①show variables like 'log_%';查看所有的log命令
②show variables like 'log_bin';查看具体的log命令
怎么查看mysql日志
通用查询日志可以存放到一个文本文件或者表中,所有连接和语句被记录到该日志文件或表,缺省未开启该日志。
通过--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。
mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。
不同于更新日志和二进制日志,它们在查询执行后,但是任何一个锁释放之前记录日志。
查询日志包含所有语句,而二进制日志不包含只查询数据的语句。
服务器重新启动和日志刷新不会产生新的一般查询日志文件。
MySQL8.0错误日志Error log
错误日志包含mysqld启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行时出现的错误、警告和其他需要注意的信息。例如:如果mysqld检测到某个表需要检查或修复,会写入错误日志。
根据错误日志配置,错误消息还可能填充performance_schema.error_log表,以便为日志提供SQL接口,使错误日志能够查询。
如果用mysqld_safe启动mysqld,mysqld_safe会将消息写入错误日志。例如,当mysqld_safe注意到mysqld异常退出时,它会重新启动mysqld,并将mysqld重新启动的消息写入错误日志。
在MySQL 8.0中,错误日志使用MySQL组件(component) 架构。错误日志系统由执行日志事件过滤和写出组件以及系统变量组成,该系统变量配置启用哪些组件来实现所需的日志记录。
基于组件的错误日志记录提供了以下功能:
log_error_services系统变量控制为错误记录启用哪些日志组件。多个组件用逗号或分号分隔,日志系统按照此顺序依次执行。组件分过滤filter和写出sink两类。filter类组件过滤错误日志信息,sink类组件将错误日志写到不同的位置。
过滤器组件 过滤依据 相关系统变量 log_filter_internal 错误事件的优先级及错误代码 log_error_verbosity
log_error_suppression_list log_filter_dragnet 用户定义的规则 dragnet.log_error_filter_rules
系统变量log_error指定错误日志的缺省目的地,日志组件根据该系统变量决定自己的日志输出目的地。
sink类日志组件 log_error值 目的地 log_sink_internal(缺省) file_name file_name log_sink_internal stderr 控制台 log_sink_json stderr 控制台 log_sink_json file_name file_name .00.json
file_name .01.json log_sink_test stderr 控制台 log_sink_test file_name file_name log_sink_syseventlog stderr 系统日志 log_sink_syseventlog file_name 系统日志
安装sink组件log_sink_json,修改log_error_services参数增加log_sink_json写出组件。
目标:配置log_sink_internal组件只记录ERROR类信息。
方法:修改启动参数文件,调整log_error_verbosity参数。
目标:配置log_sink_internal记录ERROR, WARNING, INFORMATION类错误,将 WARNING, INFORMATION中错误号MY-010001,MY-10002过滤掉。
方法:修改启动参数文件,调整log_error_verbosity和log_error_suppression_list参数
目标:配置过滤器,按照用户定义的规则过滤错误日志信息。
方法:使用log_filter_dragnet,配置变量dragnet.log_error_filter_rules添加过滤规则。
目标:将MySQL的错误日志写入Linux系统日志。
方法:使用log_sink_syseventlog组件,将错误日志写入Linux系统日志。
目标:保留原错误日志,让MySQL开始一个新的错误日志。
方法:使用FLUSH ERROR LOGS 或 FLUSH LOGS 或 mysqladmin flush-logs都可以关闭错误日志,然后重新创建错误日志,在此之前应该手工将错误日志改名或备份。
MySQL三种重要日志
日志是MySQL的重要组成部分,其中对于开发而言不得不关注三种重要的日志,分别是二进制日志(bin log)、事务日志(redo log、undo log)。接下来详细介绍这三种日志。
binlog叫做二进制日志,主要是用于记录MySQL表的逻辑变化过程。在实际应用过程中,通常被用于主从复制和数据恢复。
事务执行过程中,会先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。
事务提交后的写入只是写入到文件系统的page cache,并没有把数据持久化到磁盘。持久化磁盘由操作系统决定调用fsync。
MySQL提供了配置决定fsync的时机,当sync_binlog=0的时候,每次提交事务只写入page cache,不执行fsync。当sync_binlog=1的时候,表示每次提交事务都会执行fsync。当sync_binlog = N的时候,每次提交事务都写入page cache,累计多个事务才进行fsync。
显然,当sync_binlog = 1的时候,binlog日志不会丢失。当sync_binlog = N的时候,如果发生异常重启,会丢失N个事务的binlog日志。
STATEMENT
记录数据操作的原始SQL,可能引发主库备库因索引选择不一致,导致数据执行结果不一致。
ROW
ROW基于行复制,只记录哪条数据被修改.缺点:占空间。比如DELETE 语句,对于STATEMENT只占用1条SQL。而ROW格式则需要把所有记录的数据记录下来。
MIXED
对于可能引发主备不一致的命令使用ROW格式,否则使用STATEMTNT
对于每一次更新操作,MySQL都需要写入磁盘,然后需要找到对应那条记录并更新。IO成本较高和查找成本都很高。为了提高性能,MySQL会将更新操作写入redo log,并更新内存。INNODB引擎会在适当的时候将操作记录更新到磁盘。
[图片上传失败...(image-c6a1f2-1627716309698)]
undo log主要是记录了数据的逻辑变化,比如对应一条insear语句,undo log会记录一条delete语方便回退到更新前的值。
时刻A发生故障的话,由于binlog未写入,redo log回滚数据,两个日志数据是一致的。
时刻B发生故障,则需要判断binlog是否完整来决定如何恢复。
redo log和bin log的区别?
为什么redo log crash-safe,而bin log不可以?
mysql 日志
在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。
错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。