一、MySQL日志简介
(一)、mysql日志的种类,一般来说,日志有五种,分别为:
- 错误日志:log_error (记录启动,运行,停止mysql时出现的信息)
- 二进制日志:log_bin (记录所有更改数据的语句,还用于复制,恢复数据库用)
- 通用查询日志:general_log (记录建立的客户端连接和执行的语句)
- 慢查询日志: log_slow_queries (记录所有执行超过long_query_time秒的所有查询)
- 更新日志: log_update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)
(二)、 查询当前日志记录的状况:
- mysql>show variables like ‘%log%’;(查看是否启用了日志)
- mysql> show master status;(怎样知道当前的日志)
- mysql> show master logs;(显示二进制日志的数目)
(三)、MySQL日志状态图示
- 错误日志(默认开启)
- 二进制日志
- 通用查询日志
- 慢查询日志
二、MySQL日志分类
(一)、错误日志
-
说明:
错误日志默认是启用的
,一般存放在数据目录下,如无特别指定,默认以 $HOSTNAME.err 为文件名称。错误日志中除了记录错误相关的信息之外,默认还记录 MySQL 初始化、启动和关闭过程中输出的信息(未必是错误信息)、event scheduler 运行时所产生的信息、主从架构中的从 I/O Thread 的信息,还包括服务器运行过程中所发生的任何严重的错误信息。通常,当数据库出现问题不能正常启动,应当首先想到的就是查看错误日志。从中可以看到此日志文件记录的MySQL数据库启动和关闭信息。 -
–log-error=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认hostname.err(hostname为主机名)做为文件名,默认存放在DATADIR目录中。也可以将log-error配置到my.cnf文件中,这样可省去每次启动mysqld时都手工指定–log-error.在mysql配置文件my.ini中添加:log-error = D:\ProgramFiles\MySQL\mysqld.err如果执行了FLUSH LOGS,错误日志文件将被命名为后缀old文件,并且会创建一个新的空文件。错误日志文件的格式:时间 [错误级别] 错误信息
-
MySQL客户端可以通过下列方法来获取错误日志的详细位置:
mysql> show variables like ‘log_error’;
±---------------------±------------------------------------------------------+
| Variable_name | Value |
±---------------------±------------------------------------------------------+
| log_error | D:\ProgramFiles\MySQL\Data\jevo.err |
±----------------------±-----------------------------------------------------+1 row in set (0.00 sec)
-
错误日志-记录级别
错误日志文件的记录级别:错误日志有3个level等级:error、warning 和information。
(二)、二进制日志
-
二进制日志主要用来记录操作MySQL数据库中的写入性操作(
增删改,但不包括查询
),相当于sqlserver中的完整恢复模式下的事务日志文件。 -
二进制日志的作用:1、用于复制,配置了主从复制的时候,主服务器会将其产生的二进制日志发送到slave端,slave端会利用这个二进制日志的信息在本地重做,实现主从同步。2、用户恢复,MySQL可以在全备和差异备份的基础上,利用二进制日志进行基于时间点或者事物Id的恢复操作。原理雷同于主从复制的日志重做。
-
开启二进制日志:开启二进制日志需要指定一个log-bin参数的路径,比如:
log_bin="D:\phpStudy\MySQL\mysql_log\log_bin"
。开始二进制日志之后会自动生成一个管理二进制日志的log_bin_index文件。log_bin选项也显示为on,即开启了二进制日志。
-
MySQL客户端可以通过下列方法来获取二进制日志的详细位置:
mysql> show variables like ‘log_bin’;
±---------------------±----------------+
| Variable_name | Value |
±---------------------±-----------------+
| log_bin | ON |
±----------------------±----------------+
1 row in set (0.00 sec)
(三)、通用查询日志
- 通用查询日志主要记录建立的客户端连接和执行的语句,MySQL中的参数general_log用来控制开启、关闭MySQL查询日志,参数general_log_file用来控制查询日志的位置。所以如果你要判断MySQL数据库是否开启了查询日志,可以使用下面命令。general_log为ON表示开启查询日志,OFF表示关闭查询日志。
- 开启查询日志-在my.ini(windows系统)或my.cnf(linux系统)中添加一下内容:
#通用查询日志-开启general_log=on#通用查询日志-日志存储目录general_log_file="D:\phpStudy\MySQL\mysql_log\general_log.log"
- MySQL客户端可以通过下列方法来获取查询日志的详细位置
mysql> show variables like ‘%general_log%’;
±--------------------±---------------------------------------+
| Variable_name | Value |
±---------------------±--------------------------------------+
| general_log | ON |
| general_log_file | /var/lib/mysql/DB-Server.log |
±----------------------±--------------------------------------+
2 rows in set (0.00 sec)
(四)、慢查询日志
-
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
-
慢查询设置的相关参数
slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。 log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。 log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。 log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。
-
注意:找到mysql的安装目录,找到my.ini文件夹在[mysqld]处加入以下代码开启慢查询,永久有效。
#开启慢查询 slow_query_log = ON #log-slow-queries:代表MYSQL慢查询的日志存储目录,此目录文件一定要有写权限; #最长执行时间 (查询的最长时间,超过了这个时间则记录到日志中) . long_query_time = 5 #慢查询日志存储方式 log_output='FILE' log-slow-queries="C:/Program Files (x86)/MySQL/MySQL Server 5.0/log/mysql-slow.log" #没有使用到索引的查询也将被记录在日志中 log-queries-not-using-indexes = ON
三、修改MySQL配置参数-日志参数
(一)、动态修改(临时修改,重启失效)
- 说明:静态变量不能修改,但是可以修改全局变量。
- 通用查询日志
#临时开启通用查询日志mysql > set global general_log=on;#临时设置通用查询日志文件目录mysql > set global general_log_file='/tmp/mariadb_general_log.log';#临时关闭通用查询日志mysql > set global general_log=off;#把日志直接存放到表里面mysql > set global log_output='table';
- 慢查询日志
#临时开启慢查询日志mysql> set global slow_query_log='ON'; #或mysql> set global slow_query_log=1;#查询超过4秒就记录mysql> set global long_query_time=4;#设置慢查询日志存放的位置mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';
(二)、永久修改
1、说明
在配置文件中(my.ini或my.cnf)添加配置信息后,重启MySQL后就是永久修改,永久生效。直到再次修改配置信息并重启MySQL为止。