一、日志类型


1、错误日志


存放位置

在对应的参数DATADIR(数据目录)指定的目录中,以主机名+.err命名的文件(ac-PC.err如上图)。错误日志是以文本文件的形式存储的,可以直接使用普通文本工具就可以查看。

修改其存放位置:(my.ini中配置):

   #Enter a name for the error log file. Otherwise a default name will be used.

   #log-error=d:/mysql_log_err.txt

作用:

记录了服务器运行中产生的错误信息;

记录了服务在启动和停止是所产生的信息;

   在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录;

   记录event错误日志;

   配置mysql的主配置文件:log_warning = {0|1} #默认开启,服务器运行中的警告日志也会记录在错误日志中。

相关命令:

MySQL数据库中,可以使用mysqladmin命令来开启新的错误日志。mysqladmin命令的语法如下:
   mysqladmin -u root -p flush-logs
   执行该命令后,数据库系统会自动创建一个新的错误日志。旧的错误日志仍然保留着,只是已经更名为filename.err-old。


2、查询日志


存放位置:

在对应的数据目录(/data)中,以主机名+.log命名的文件(ac-PC.log)(默认情况下,通用查询日志功能是关闭的。通过my.cnf或者my.ini文件的log选项(log [=DIR \ [filename] ])可以开启通用查询日志。将log选项加入到my.cnf或者my.ini文件的[mysqld]组中)

与查询日志相关的变量:

       general_log = {ON|OFF} #启动或关闭查询日志,默认是关闭的。

       general_log_file =d:/mysql_log_general.txt #指定查询日志的位置,默认在参数DATADIR(数据目录)指定的目录(数据目录)下。

       log_output = {TABLE|FILE|NONE} #指定存放查询日志的位置,可以放在文件中,也可以放在数据库的表中,放在表中比放在文件中更容易查看。

查询日志的删除:

   MySQL数据库中,也可以使用mysqladmin命令来开启新的通用查询日志。新的通用查询日志会直接覆盖旧的查询日志,不需要再手动删除了。mysqladmin命令的语法如下:
mysqladmin -u root -p flush-logs

作用:

通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、更新语句、查询语句等。用户的所有操作都会记录到通用查询日志中。如果希望了解某个用户最近的操作,可以查看通用查询日志。通用查询日志是以文本文件的形式存储的。Windows操作系统可以使用文本文件查看器查看。



3、
二进制日志


存放位置:

       默认情况下,二进制日志功能是关闭的。通过my.cnf或者my.ini文件的log-bin选项( my.cnf(Linux操作系统下)或者my.ini(Windows操作系统下))可以开启二进制日志。

       将log-bin选项加入到my.cnf或者my.ini文件的[mysqld]组中,形式如下:log-bin [=DIR \ [filename] ]

       如果未给出file_name值,默认名为“HOSTNAME-bin.nnnnn”;如果给出了文件名,但没有包含路径,则文件默认被写入参数DATADIR(数据目录)指定的目录。如果在日志名中提供了扩展名(例如,log-bin=file_name.extension),则扩展名被悄悄除掉并忽略。

       二进制日志文件名的.nnnn表示,mysqld在每个二进制日志名后面添加一个数字扩展名。每次启动服务器或刷新日志(flush logs)时该数字增加1。如果当前的日志大小达到设定的max_binlog_size,还会自动创建新的二进制日志。如果在该文件的末尾正使用大的事务,二进制日志很有可能会超过max_binlog_size:事务全写入一个二进制日志中,绝对不要写入不同的二进制日志中。

查看二进制日志:

   使用二进制格式可以存储更多的信息,并且可以使写入二进制日志的效率更高。但是,不能直接打开并查看二进制日志。如果需要查看二进制日志,必须使用mysqlbinlog命令。mysqlbinlog命令的语法形式如下:
mysqlbinlog filename.number

删除二进制日志:

(1)删除所有二进制日志:

执行“reset master;”命令,该命令将删除所有二进制日志,新日志的编号从“000001” 开始,命令如下:Mysql>reset master;

(2)该命令将删除“*****” 编号之前的所有日志:

执行“Purge master logs to ‘mysql-bin.*****’” 命令,该命令将删除“*****” 编号之前的所有日志,下列中删除了“mysql-bin.000001”之前编号的所有日志

Mysql>purge master logs to ‘mysql-bin.000015;

(3)删除日期为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志:

执行“purge master logs before ‘yyyy-mm-dd hh24:min:ss’”命令,该命令将删除日期为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志,下列中删除了日期在“2010-05-22 01:00:00”之前的所有日志

Mysql>purge master logs before ‘2010-05-22 01:00:00’’;

(4)设置参数expire_logs_days=#(days):

此参数的含义是设置日志的过期天数,过来指定的天数后日志将会被自动删除,这样将有利于减少DBA管理日志的工作量。

expire_logs_days=3

这样,3天前的日志都会被删除,系统自动删除

作用:

二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况。二进制日志记录了所有的DDL(数据定义语言)语句和DML(数据操作语言)语句,但是不记录包括数据查询的语句。语句以“事件”的形式保存,它描述了数据的更改过程,此日志对于灾难时的数据恢复起着极其重要的作用。


4、
慢查询日志


说明:

默认为关闭状态,记录下来查询时间超过设定时长的查询,这些查询日志将被慢查日志记录下来
配置mysql的主配置文件:
slow_query_log  = {ON | OFF} #是否开启慢慢查询日志,默认是关闭的  
slow_query_log_file = /mydata/data/mysql-slow.log #慢查询日志的存放位置,默认在数据目录下
log_query_time = 10 #定义默认的时长,默认时长为10秒
log_query_not_using_indexes = {ON|OFF} #设定是否将没有使用索引的查询操作记录到慢查询日志  
log_output = {TABLE|FILE|NONE} #定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为FILE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息


5、中继日志


说明:

主要是在mysql服务器的从架构中的从服务器上用到的,当从服务器想要和主服务器进行数据的同步时,从服务器将主服务器的二进制日志文件拷贝到自己的主机上放在中继日志中,然后调用SQL线程按照中继日志文件中的二进制日志文件执行以便就可达到数据的同步。
开启的方法:(只在从服务器上开启)  
配置mysql的主配置文件:    
relay-log = file_name #指定中继日志的位置和名字,默认为host_name-relay-bin。也可以使用绝对路径,以指定非数据目录来存储中继日志    
relay-log-index = file_name #指定中继日志的名字的索引文件的位置和名字,默认为数据目录中的host_name-relay-bin.index
relay-log-info-file = file_name #设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info
relay_log_purge = {ON|OFF} #设定对不再需要的中继日志是否自动进行清理。默认值为ON
relay_log_space_limit = 0 #设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数
max_relay_log_size = {4096..1073741824} #设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。


6、事务日志


Mysql默认情况下会有两个文件:ib_logfile0ib_logfile1,这两个文件就是重做日志文件,或者事务日志。

重做日志的目的:万一实例或者介质失败,重做日志文件就能派上用场。

每个InnoDB存储引擎至少有一个重做日志文件组,每个文件组下至少有2个重做日志文件,如默认的ib_logfile0、ib_logfile1。InnoDB存储引擎先写重做日志文件1,当达到文件的最后时,会切换至重做日志文件2,当重做日志文件2也被写满时,会再被切换到重做日志文件1中。

影响重做日志的参数:

Innodb_log_file_size、innodb_log_files_in_group、innodb_log_group_home_dir影响着重做日志文件的属性。

重做日志与二进制日志的区别:

1)二进制日志会记录所有与mysql有关的日志记录,包括InnoDB等其他存储引擎的日志,而InnoDB存储引擎的重做日志只记录有关其本身的事务日志,

2)记录的内容不容,不管你将二进制日志文件记录的格式设为哪一种,其记录的都是关于一个事务的具体操作内容,而InnoDB存储引擎的重做日志文件记录的关于每个页的更改的物理情况;

3)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中。

从日志缓冲写入磁盘上的重做日志文件的条件:

在主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件中,不论事务是否提交。另一个触发这个过程是由参数innodb_flush_log_at_trx_commit控制,表示在提交时,处理重做日志的方式。

参数innodb_flush_log_at_trx_commit可设的值有012,0代表当提交事务时,并不将事务的重做日志写入磁盘上的日志文件,而是等待主线程每秒的刷新,而12不同的地方在于:1是在commit时将重做日志缓冲同步写到磁盘;2是重做日志异步写到磁盘,即不能完全保证commit时肯定会写入重做日志文件,只是有这个动作

值得注意的一点:因为重做日志有个capacity变量,该值代表了最后的检查点不能超过这个阀值。


7、滚动日志


说明:只要是针对二进制日志进行滚动的,对某个类型的日志文件滚动一次就生成一个新的相对应的日志文件,通过这种方法保证日志文件的特定大小,从而保证服务器在对日志文件查询时有较高的响应能力。
滚动二进制日志的命令:
1 mysql> FLUSH LOGS;


总结错误日志和慢查询日志目前来说对普通开发者来说比较有用,REDO日志对用户理解INNODB存储引擎的事务安全性处理比较有帮助,2进制日志则在大型系统性能优化,或海量数据处理有帮助,当然,如果是DBA,则这些日志都是要经常用到的。