首页 > mysql > mysql的日志

mysql的日志

作者:bin
目录
[隐藏]

mysql当然少不了日志,不然出错我们去哪里找(滑稽)?

mysql有4种不同的日志:

错误日志、二进制日志、查询日志、慢查询日志;

一、错误日志

我们可以用–log-error[=file-name]来指定错误日志保存的位置

查看日志记录位置方式,先查看LOG_ERROR目录位置:

mysql -uroot -p -e "select @@LOG_ERROR";

+--------------------------+
| @@LOG_ERROR |
+--------------------------+
| /var/log/mysql/error.log |
+--------------------------+

二、二进制日志

二进制日志,记录了所有的DDL,和DML语句,但不包含查询语句,在数据灾难时显得至关重要;

binlog的格式binlog_format,有3种:
1.row,记录下每一行的修改记录,如果一条语句修改了n行数据,那么n行数据的修改结果都会记录下来,比较占磁盘,但更详细。
2.statement,默认,记录下执行sql的语句,这样binlog更不占磁盘,缺点是一些函数可能没办法被复制,例如sleep();
3.mix上面2种混合

使用如下命令查看是否打开了二进制日志:

mysql -uroot -p -e "select @@LOG_BIN"; 

+-----------+
| @@LOG_BIN |
+-----------+
| 1 |
+-----------+

为1即为打开

二进制文件的位置在my.cnf配置文件log_bin参数,日志文件名host_name-bin.range(0,99999),例如:mysql-bin.000001

由于日志文件是使用二进制存储的,直接你也看不了,所以我们使用mysqlbinlog工具进行查看

查看日志:

mysqlbinlog mysql-bin.000001 |view -

显然内容太多了,并不是所有内容都是我们需要的

还有很多option可以使用

-d, –database 指定数据库名称

-o, –offset 从第几行开始

-r , –result-file 将结果输出的指定文件

-s, –short-form 显示简单格式,省略一些信息

–set-charset 输出文本的格式

–start-datetime 日志开始日期

示例: -start-datetime='2017/09/23 17:00:00'

–start-position 日志开始位置

日志内容出现的at

13 # at 107
14 #170923 16:35:53 server id 1 end_log_pos 180 Query thread_id=53 exec_time=0 error_code=0       

示例:–stop-position=107
将在at 107停止   ,start也是同理

 

二进制日志的删除:

建议定期清理日志文件,减轻磁盘压力:

1、全部删除

mysql -uroot -p -e "reset master"

日志的后缀编号又从000001开始了

2、删除某个之前

删除mysql-bin.000001之前的日志文件

purge master logs to 'mysql-bin.000001'

3、删除某个日期前的日志

purge master logs before 'yyyy-mm-dd hh:mm:ss'

4、设置日期过期天数

可以查看日志过期天数:

mysql -uroot -p -e "select @@EXPIRE_LOGS_DAYS"

也可以在my.cnf中配置日志过期天数

xpire_logs_days = 10

 

三、查询日志

查询日志包含所有sql语句,而二进制日志不包含查询语句

查看是否已经开启查询日志(1:开启,0:你懂的)

mysql -uroot -p -e "select @@GENERAL_LOG"

查看查询日志保存方式

mysql -uroot -p -e "select @@LOG_OUTPUT"

查看日志文件位置

mysql -uroot -p -e "select @@GENERAL_LOG_FILE"

查看查询日志

vim /var/log/mysql/mysql.log

四、慢查询日志

记录了所有执行时间超过long_query_time(秒),并且不小于min_examined_row_limit但所有sql语句日志;

值得注意的是long_query_time默认是10,最小为0,精确度可以到微妙;

默认情况下有2种情况的日志不会被保存:

1、管理语句(alter, check,drop等)

2、不使用索引进行查询等语句

但是我们可以通过 –log-slow-admin-statements 和log_queries_not_using_indexes进行选择

查看slow日志是否开启

mysql -uroot -p -e "select @@LOG_SLOW_QUERIES"

查看slow日志文件位置

mysql -uroot -p -e "select @@SLOW_QUERY_LOG_FILE"

当然也可以像查询日志一样指定输出类型(–log-output)

慢查询日志文件是文本型,所以我们可以直接打开查看

 

 

 

 

您必须 [ 登录 ] 才能发表留言!