Mysql日志的分类:
出错日志(error log):(log_error)这个日志记载着服务器启动和关闭的情况,还记载着关于故障或异常状况的消息。
我们安装完数据库之后,启动数据库如果发生异常,我们应该首先查这个日志文件。
常规查询日志:(log)该日志包括客户连接的记录,来自客户的SQL查询和其他的各种事件。一般我们可以用其来监视用户的活动,谁在连接,从哪连接,执行哪些操作
慢查询日志:(slow_query_log)该日志用于改进查询性能,慢是有时间定义的,用变量(long_query_time)来配置,默认值是2.0,单位是秒,这个慢还取决你服务器,比如服务器的负载高时,可能查询速度就会下降,原本不是慢查询的语句,也会被写入到慢查询日志中。
二进制日志(binary log):(log_bin)这个日志由多个文件构成,里面记录着由update,delete,insert,create table, drop table,grant等语句完成的数据修改,二进制日志是一些二进制编码的数据修改“事件”,它有一套配套的索引文件,里面列出了服务器上现有的二进制日志文件
二进制日志索引文件:(log_bin_index)记录着服务器上现有的二进制日志文件,它可以配合数据库备份文件在系统发生崩溃后对数据表进行恢复,先从备份文件恢复数据库,然后使用mysqlbinlog工具把二进制日志的内容转换为文本语句,接下来把上次备份后执行的过的每一条数据修改语句依次执行,达到恢复到数据库崩溃前的状态。
mysql的复制机制:就是通过二进制日志把主服务器上发生的数据修改事件传到从服务器上去
中继日志:(relay_log)在主从架构时,一般在从服务器上会维护一个中继日志,里面记载着从主服务器上接收的、目前尚未执行的数据修改事件,中继日志和二进制日志的格式是一样的,并且也有一个配套的索引文件,其列出了从服务器上现有的中继日志文件。
中继日志索引文件:(relay_log_index)列出了从服务器上现有的中继日志文件。
日志的存储:
在5.1.20版本之后:日志除了被写入文件中还可以有如下的存储方式:
出错日志:可以发送到syslog
常规日志:可以写到mysql数据库中的数据库表中
慢查询日志:可以写到mysql数据库中的数据库表中
注:如果我们没有配置,默认mysql服务器是不会创建任何日志,但是两种特例除外:
1.在Unix操作系统中:如果用mysqld_safe来启动服务器,该脚本将创建出错日志,并告诉服务器去使用它
2.在Windows操作系统中:只要没有使用--console选项来表明让出错信息发送到控制台而不是被发送到文件,那么服务器就会创建出错日志
注:如果出错日志文件已经存在,但是用来登录服务器的账号没有写权限,mysql服务将会启动失败,并且没有任何报错消息被写入日志。
使用mysqld_safe启动数据库服务器时,如何将出错日志信息发送到syslog,而不是发送到一个日志文件:
使用--syslog 参数代替--log_error——mysql技术内幕,但是在5.6中没有查到该参数
Windows上的出错日志:
在Windows上,mysql把错误日志默认写到数据目录的HOSTNAME.ERR文件中,但是如果在启动时,你使用了参数--console,那么此时mysql将会把错误信息打印在控制台,同时不会再写入错误文件里。
但是:如果你的mysql被安装成Windows的一项服务了,这时再使用--console将没有任何效果,因为它找不到控制台去输出。。。
日志的启用方式:
1.使用参数的方式:下面是本人在mysql5.6中可使用的参数名称:
参数 | 含义 | 值 | 含义 |
--log_error: | (出错日志) | path+file | 日志文件存放路径 |
--log | 常规日志 | path+file | |
--slow_query_log | 是否开启慢查询日志 | on/off | 开关 |
--slow_query_log_file | 慢查询日志文件存储名称 | path+file | 慢查询文件存储路径和名称 |
--log_bin | 是否开启二进制日志 | on/off | 开关 |
--log_bin_basename | 二进制日志的文件名 | path+file | |
--log_bin_index | 二进制日志索引文件 | path+file | |
--relay_log | 是否开启中继日志 | on/off | |
--relay_log_basename | 中继日志文件名 | path+file | |
--relay_log_index | 中继日志索引文件 | path+file |
更多命令可使用:show variables like "%log%";来查询
注:配置日志的时候,如果没有文件,那么mysql会自动创建该文件,但是如果没有对应的子目录,mysql是不会自动创建子目录的