mysql数据库日志(如何查看mysql数据库操作记录日志)
大家好,今天小编来为大家解答mysql数据库日志这个问题,如何查看mysql数据库操作记录日志很多人还不知道,现在让我们一起来看看吧!
MySQL中几种常见的日志
前言:
在 MySQL系统中,有着诸多不同类型的日志。各种日志都有着自己的用途,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据。这些不同类型的日志有助于我们更清晰的了解数据库,在日常学习及运维过程中也会和这些日志打交道。本节内容将带你了解 MySQL数据库中几种常用日志的作用及管理方法。
1.错误日志(errorlog)
错误日志记录着 mysqld启动和停止,以及服务器在运行过程中发生的错误及警告相关信息。当数据库意外宕机或发生其他错误时,我们应该去排查错误日志。
log_error参数控制错误日志是否写入文件及文件名称,默认情况下,错误日志被写入终端标准输出stderr。当然,推荐指定 log_error参数,自定义错误日志文件位置及名称。
#指定错误日志位置及名称
vim/etc/my.cnf
[mysqld]
log_error=/data/mysql/logs/error.log
相关配置变量说明:
log_error={1| 0|/PATH/TO/ERROR_LOG_FILENAME}
定义错误日志文件。作用范围为全局或会话级别,属非动态变量。
2.慢查询日志(slow query log)
慢查询日志是用来记录执行时间超过 long_query_time这个变量定义的时长的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。
与慢查询相关的几个参数如下:
slow_query_log:是否启用慢查询日志,默认为0,可设置为0,1。
slow_query_log_file:指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。
long_query_time:慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
log_output:慢查询日志输出目标,默认为file,即输出到文件。
默认情况下,慢查询日志是不开启的,一般情况下建议开启,方便进行慢SQL优化。在配置文件中可以增加以下参数:
#慢查询日志相关配置,可根据实际情况修改
vim/etc/my.cnf
[mysqld]
slow_query_log= 1
slow_query_log_file=/data/mysql/logs/slow.log
long_query_time= 3
log_output= FILE
3.一般查询日志(general log)
一般查询日志又称通用查询日志,是 MySQL中记录最详细的日志,该日志会记录 mysqld所有相关操作,当 clients连接或断开连接时,服务器将信息写入此日志,并记录从 clients收到的每个 SQL语句。当你怀疑 client中的错误并想要确切知道 client发送给mysqld的内容时,通用查询日志非常有用。
默认情况下,general log是关闭的,开启通用查询日志会增加很多磁盘 I/O,所以如非出于调试排错目的,不建议开启通用查询日志。相关参数配置介绍如下:
# general log相关配置
vim/etc/my.cnf
[mysqld]
general_log= 0//默认值是0,即不开启,可设置为1
general_log_file=/data/mysql/logs/general.log//指定日志位置及名称
4.二进制日志(binlog)
关于二进制日志,前面有篇文章做过介绍。它记录了数据库所有执行的DDL和DML语句(除了数据查询语句select、show等),以事件形式记录并保存在二进制文件中。常用于数据恢复和主从复制。
与 binlog相关的几个参数如下:
log_bin:指定binlog是否开启及文件名称。
server_id:指定服务器唯一ID,开启binlog必须设置此参数。
binlog_format:指定binlog模式,建议设置为ROW。
max_binlog_size:控制单个二进制日志大小,当前日志文件大小超过此变量时,执行切换动作。
expire_logs_days:控制二进制日志文件保留天数,默认值为0,表示不自动删除,可设置为0~99。
binlog默认情况下是不开启的,不过一般情况下,建议开启,特别是要做主从同步时。
# binlog相关配置
vim/etc/my.cnf
[mysqld]
server-id= 1003306
log-bin=/data/mysql/logs/binlog
binlog_format= row
expire_logs_days= 15
5.中继日志(relay log)
中继日志用于主从复制架构中的从服务器上,从服务器的 slave进程从主服务器处获取二进制日志的内容并写入中继日志,然后由 IO进程读取并执行中继日志中的语句。
relay log相关参数一般在从库设置,几个相关参数介绍如下:
relay_log:定义 relay log的位置和名称。
relay_log_purge:是否自动清空不再需要中继日志,默认值为1(启用)。
relay_log_recovery:当 slave从库宕机后,假如 relay log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的 relay log,并且重新从 master上获取日志,这样就保证了 relay log的完整性。默认情况下该功能是关闭的,将 relay_log_recovery的值设置为1可开启此功能。
relay log默认位置在数据文件的目录,文件名为 host_name-relay-bin,可以自定义文件位置及名称。
# relay log相关配置,从库端设置
vim/etc/my.cnf
[mysqld]
relay_log=/data/mysql/logs/relay-bin
relay_log_purge= 1
relay_log_recovery= 1
本篇文章主要讲述了 MySQL中的几类日志的用途及设置方法,需要注意的是,上述几类日志,若不指定绝对路径,则默认保存在数据目录下,我们也可以新建一个日志目录专用于保存这些日志。还有 redo log和 undo log没有讲解,留在下篇文章吧。
MySQL中几种常见的日志
标签:详细一个错误效率停止不同类相关信息日志记录convert
如何查看mysql数据库操作记录日志
这是一个慢查询日志的展示工具,能够帮助 DBA或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看 slow-log。QAN(Query Analytics)
PMM目前有 2个版本,但是对于 QAN来说其大致由三部分组成:
QAN-Agent(client):负责采集 slow-log的数据并上报到服务端
QAN-API(server):负责存储采集的数据,并对外提供查询接口
QAN-APP:专门用来展示慢查询数据的 grafana第三方插件
1.数据流转
slow-log--> QAN-Agent--> QAN-API<--> QAN-APP(grafana)
2. pmm1架构图
3. pmm2架构图
如何查看mysql数据库的日志文件
一.错误日志
错误日志在Mysql数据库中很重要,它记录着mysqld启动和停止,以及服务器在运行过程中发生的任何错误的相关信息。
1.配置信息
--log-error=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认hostname.err做为文件名,默认存放在DATADIR目录中。
也可以将log-error配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-error.例如:
[mysql@test2]$ vi/etc/my.cnf
# The MySQL server
[mysqld]
....
log-error=/var/lib/mysql/test2_mysqld.err
.....
2.错误信息样板
080313 05:21:55 mysqld started
080313 5:21:55 InnoDB: Started; log sequence number 0 43655
080313 5:21:55 [Note]/usr/local/mysql/bin/mysqld: ready for connections.
Version:'5.0.26-standard-log' socket:'/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition- Standard(GPL)
080313 5:24:13 [Note]/usr/local/mysql/bin/mysqld: Normal shutdown
080313 5:24:13 InnoDB: Starting shutdown...
080313 5:24:16 InnoDB: Shutdown completed; log sequence number 0 43655
080313 5:24:16 [Note]/usr/local/mysql/bin/mysqld: Shutdown complete
080313 05:24:16 mysqld ended
080313 05:24:47 mysqld started
080313 5:24:47 InnoDB: Started; log sequence number 0 43655
080313 5:24:47 [Note]/usr/local/mysql/bin/mysqld: ready for connections.
Version:'5.0.26-standard-log' socket:'/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Edition- Standard(GPL)
080313 5:33:49 [Note]/usr/local/mysql/bin/mysqld: Normal shutdown
三.查询日志
查询日志记录了clinet的所有的语句。
Note:由于log日志记录了数据库所有操作,对于访问频繁的系统,此种日志会造成性能影响,建议关闭。
1.配置信息
--log=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认为主机名(hostname)做为文件名,默认存放在DATADIR目录中。
也可以将log配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log.例如:
# The MySQL server
[mysqld]
......
#query-log
log=/var/lib/mysql/query_log.log
......
2.读取查询日志
查询日志是纯文本格可,可以使用OS文本读取工具直接打开查看。例如:
[mysql@test2]$ tail-n 15 query_log.log
080313 7:58:28 17 Query show tables
080313 8:07:45 17 Quit
080313 10:01:48 18 Connect root@localhost on
080313 10:02:38 18 Query SELECT DATABASE()
18 Init DB test
080313 10:02:42 18 Query show tables
080313 10:03:07 18 Query select* from pet
080313 10:06:26 18 Query insert into pet values('hunter','yxyup','cat','f','1996-04-29',null)
080313 10:06:39 18 Query select* from pet
080313 10:07:13 18 Query update pet set sex='m' where name='hunter'
080313 10:07:38 18 Query delete from pet where name='hunter'
080313 10:13:48 18 Query desc test8
080313 10:14:13 18 Query create table t1(id int,name char(10))
080313 10:14:41 18 Query alter table t1 add sex char(2)
[mysql@test2]$
四.慢查询日志
慢查询日志是记录了执行时间超过参数long_query_time(单位是秒)所设定值的SQL语句日志。
Note:慢查询日志对于我们发现性能有问题的SQL有很帮助,建议使用并经常分析
1.配置信息
--log-slow-queries=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认为hostname-slow.log做为文件名,默认存放在DATADIR目录中。
也可以将log-slow-queries配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-slow-queries.例如:
# The MySQL server
[mysqld]
......
#slow-query-log
log-slow-queries=/var/lib/mysql/slow_query_log.log
......
2.读取慢查询日志
[mysql@test2]$ cat slow_query_log.log
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket:/var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 5:41:46
# User@Host: root[root]@ localhost []
# Query_time: 108 Lock_time: 0 Rows_sent: 0 Rows_examined: 8738
use test;
select count(1) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name;
# Time: 080313 5:52:04
# User@Host: root[root]@ localhost []
# Query_time: 583 Lock_time: 0 Rows_sent: 0 Rows_examined: 508521177
select count(1) from t1 a, t1 b where a.id=b.id;
/usr/local/mysql/bin/mysqld, Version: 5.0.26-standard-log. started with:
Tcp port: 3306 Unix socket:/var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 080313 10:39:59
# User@Host: root[root]@ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 4537467 Rows_examined: 4537467
use test;
select id from tail;
如果慢查询日志记录很多可以使用mysqldumpslow进行分类汇总
[mysql@test2]$ mysqldumpslow slow_query_log.log
Reading mysql slow query log from slow_query_log.log
Count: 1 Time=583.00s(583s) Lock=0.00s(0s) Rows=0.0(0), root[root]@localhost
select count(N) from t1 a, t1 b where a.id=b.id
Count: 1 Time=108.00s(108s) Lock=0.00s(0s) Rows=0.0(0), root[root]@localhost
select count(N) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name
Count: 1 Time=11.00s(11s) Lock=0.00s(0s) Rows=4537467.0(4537467), root[root]@localhost
select id from tail;
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=
查看日至:
1.首先确认你日志是否启用了
mysql>show variables like'log_bin';
如果启用了,即ON
那日志文件就在mysql的安装目录的data目录下
cat/tail日志文件名
2.怎样知道当前的日志
mysql> show master status;
3.查看从某一段时间到某一段时间的日志
mysqlbinlog--start-datetime='2008-01-19 00:00:00'
--stop-datetime='2008-01-30 00:00:00'/var/log/mysql/mysql-bin.000006
> mysqllog1.log
OK,关于mysql数据库日志和如何查看mysql数据库操作记录日志的内容到此结束了,希望对大家有所帮助。