mysql的日志
作者:binmysql当然少不了日志,不然出错我们去哪里找(滑稽)?
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)
慢查询日志文件是文本型,所以我们可以直接打开查看