在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL也不例外。
1,错误日志
错误日志是MysQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
该日志是默认开启的,默认存放目录为mysql的数据目录,默认的日志文件名为hostname.err (hostname是主机名)。
下面来演示一遍:
sql语句返回错误日志存放的地方。
show variables like 'log_error%';
至于这个当前目录,即存放我们数据库文件的data目录,可通过show variables like '%datadir%';
语句查到。
找到DESKTOP-3HJOHII.err文件,用nopade++打开即可查看。
2,二进制日志
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制,就是通过该binlog实现的。
二进制日志,MySQI8.0默认已经开启,低版本的MySQL的需要通过配置文件开启,并配置MySQL日志的格式。Windows系统: my.ini Linux系统:my.cnf
下面介绍查询二进制日志所用到的sql
2.1 binlog日志查询基本操作
1,查询Mysql是否开启了binlog日志
show variables like 'log_bin';
2,查看binlog日志的格式
SHOW VARIABLES LIKE 'binlog_format';
3,查看所有日志
show binlog events;
4,查看最新的日志(在查看之前我做了一个update操作)
show master status;
可以看到,最新的日志在bin000027文件中,偏移量为501,(这些binlog日志文件都可以在data目录下找到)下面可以接着查询。
5,查询指定的binlog日志
show binlog events in 'DESKTOP-3HJ0HII-bin.000027';
可以看到,501记录了前面的一个update操作,前面几行记录了可以看到记录了update操作的整个事务开启过程。(注,后面的日志是后面又做的一个update操作,读者不必疑惑)
6,从指定的位置开始,查看指定的binlog日志。
show binlog events in 'DESKTOP-3HJ0HII-bin.000027' from 501;
7,从指定的位置开始,查看指定的binlog日志,限制查询的条数。
show binlog events in 'DESKTOP-3HJ0HII-bin.000027' from 501 limit 2;
这里的limit用法就是我们前面所学的limit关键字用法。
8,清空所有的binlog日志文件
reset master;
2.2 补充:日志格式
1,STATEMENT
该日志格式在日志文件中记录的都是SQL语句(statement),每一条对数据进行修改的SQL都会记录在日志文件中,通过Mysql提供的mysqlbinlog工具,可以清晰的查看到每条语句的文本。主从复制的时候,从库(slave)会将日志解析为原文本,并在从库重新执行一次。
2,ROW
该日志格式在日志文件中记录的是每一行的数据变更,而不是记录sQL语句。比如,执行sQL语句:updatetb_book set status=‘1’,如果是STATEMENT日志格式,在日志中会记录一行sQL文件;如果是ROW,由于是对全表进行更新,也就是每一行记录都会发生变更,ROW格式的日志中会记录每一行的数据变更。
3,MIXED
混合了STATEMENT和 ROW两种格式。
ps:开启binlog日志,配置binlog日志的格式
配置完以后要重启mysql服务器才会生效
3,查询日志
1,查看mysql是否开启了查询日志
show variables like 'general_log';
2,开启查询日志
set global general_log=1;
注意,该语句开启只是在此次会话中开启,要永久开启需要配置配置文件。
3,怎么查看查询日志?还是在data目录下可以找到,有一个主机名.log
的文件,例如我的电脑里面就是DESKTOP-3HJ0HII.log
点开查看即可,注意:该日志会记录所有的增删改查。
4,慢查询日志
慢查询日志记录了所有执行时间超过参数long_query_time设置值并且扫描记录数不小于
min_examined_row_limit的所有的SQL语句的日志。long_query_time默认为10秒,最小为0,精度可以到微秒。
这个日志的作用是:我们可以查看我们以前做过的某些查询,哪些比较耽误时间,方便我后期进行优化。
1,查看慢查询日志是否开启
show variables like 'slow_query_log%';
此时慢查询是关闭的,可以看到,如果开启慢查询以后,慢查询日志存放在DESKTOP-3HJOHll-slow.log
文件中
2,开启慢查询日志set global slow_query_log=1;
3,查看慢查询的超时时间show variables like 'long_query_time%;
--end--