MySQL数据库中常见的日志文件有错误日志(Error Log)、二进制日志(Binary Log)、慢查询日志(Slow Query Log)、全查询日志(General Query Log)、中继日志(Relay Log)和事务日志。
阅读MySQL架构原理之体系架构 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)可知日志文件是MySQL最后一层文件系统中的一部分。下面从运维角度看看这些文件:
一、错误日志文件
1、日志记录内容:
错误日志记录了MySQL的启动、运行和关闭过程中的重要信息。具体来说,错误日志记录的内容包括:
1)服务器启动、关闭过程中的信息。
2)服务器运行过程中的错误信息。
3)事件调试器运行一个事件产生的信息。
4)在从服务器上启动服务器进程时产生的信息。
2、日志作用:
当数据库出现问题时,第一时间应该查看的就是这个错误日志文件。该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,默认情况下以err结尾。
3、日志查看:
可以通过“show variables like ‘log_error‘’”命令查看错误日志路径,通过任何打开文本的工具或命令查看。也可以使用Perror命令查询错误代码的含义,比如:perror 1006。
4、日志相关参数设置:
1)日志路径log-error
默认情况下,错误日志存放在数据目录中,名称为“hostname.err”,当然也可以用户自定义路径。在配置文件my.cnf里进行设置,比如:
log-error=/usr/local/mysql/mysqld.err
2)警告信息是否记录至错误日志log_warnings
默认设置为1,表示启动,可以将其设置为0以禁用;当其值大于1时表示将新大气连接时产生的“失败连接”和“拒绝访问”类的错误信息也记录至错误日志。
5、日志清理
在OS级别可以直接删除错误日志,也可以在MySQL提示符下使用“flush logs”命令清理错误日志。
二、全日志查询(通用查询日志、查询日志)
1、日志记录内容:
全查询日志记录了所有对数据库请求的信息,不论这些请求是否得到了正确的执行。默认位置在变量datadir下,默认文件名为hostname.log。在默认情况下其是不开启的。
2、日志作用:
当需要进行采样分析师,需要开启全日制查询。
3、日志查看:
可以通过“show variables like ‘datadir’”命令查看日志路径,通过任何打开文本的工具或命令查看。
4、日志相关参数设置:
1)general_log={on|off}
设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了这个选项。手工使用命令“set general_log=1;”开启。联动的参数是输出位置的确定--log_output
2)log_output={table|file|none}
如启动了全查询日志,其输出位置就由该参数确定。如果选项是none,即使使用了查询日志其也不会记录任何日志信息。
这个变量的作用范围是全局的,可用于配置文件也可以通过set修改,属于动态变量。
3)sql_log_off={on|off}
用于控制是否禁止将一般查询日志类信息记录仅查询日志文件,默认为off表示不禁止记录。
用户可以在会话基本修改此变量的值,但是必须具备相应权限。它的作用范围全局和会话通用,属于动态变量。
4)general_log_file=file_name查询日志的日志文件名称,默认为“hostname.log”,默认在数据目录。其作用范围为全局,可用于配置文件,属于动态变量。
5、日志清理
在OS级别可以直接删除日志,也可以在MySQL提示符下使用“flush logs”命令清理日志。
三、慢查询日志
1、日志记录内容:
用来记录在MySQL中响应事件超过预先设定的阈值的语句,具体指运行事件超过long_query_time值的SQL会被记录到慢查询日志中;默认情况下不开启,需要手工设置参数。
慢查询日志不仅支持将日志记录写入文件,也支持将日志记录写入数据库表。
2、日志作用:
如果不是调优需要,一般不建议启动该参数;具体应用可参考MySQL索引原理之慢查询等优化 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)。
3、日志查看:
可以通过"SHOW VARIABLES LIKE 'slow_query_log%';命令查看日志路径,通过任何打开文本的工具或命令查看;也可以通过命令mysqldumpslow查看。
此外,mysqlsla/percona-toolkit等工具也可以用来查看分析慢查询日志。
4、日志相关参数设置:
1)slow_query_log={on|off}
设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了这个选项。手工使用命令“set global slow_query_log=1;”开启。联动的参数是输出位置的确定--log_output。
该参数属于动态变量,作用范围为全局级别,可用于选项文件。开启仅支持当期数据库系统,如果数据库重启则会失效;如果要永久生效,就必须通过修改配置文件my.cnf。
2)log_output={FILE|TABLE|NONE}
日志存储方式。‘FILE’表示将日志存入文件;‘TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。如果其值为NONE则同全日志查询一样。
MySQL数据库支持同时两种日志存储方式,配置时以逗号隔开即可,如“log_output=FILE,TABLE;”。
日志记录到系统的专用日志表比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,有需要能够获得更高的系统性能时首选文件存储方式。
3)slow_query_log_file=/PATH/TO/SOMEFILE
文件存储位置。默认存放位置为数据库文件所在目录下,名称为hostname-slow.log。通过该选项可修改慢查询资质保存路径及文件名,其作用范围全局级别,可用于选项文件,属于动态变量。
4)long_query_time:慢查询阈值,当查询时间多余设定的阈值时记录日志。
5)log_queries_not_using_indexes={on|off}
设定是否两所有没有使用索引的查询操作记录到慢查询日志,默认为OFF。如果运行的SQL没有使用索引,那么即使超过阈值了也会记录在慢查询日志里面的。
其作用范围为全局级别,可用于配置文件,属于动态变量。
6)min_examined_row_limit=1000:记录那些由于查找了多余1000次而引发的慢查询。
7)log_slow_admin_statements:记录那些慢的optimize table/analyze table/alter table语句。
8)log_slow_slave_statements:记录由slave所产生的慢查询。
5、日志清理
在OS级别可以直接删除日志,也可以在MySQL提示符下使用“flush logs”命令清理日志。
四、二进制日志
1、日志记录内容:
记录了对数据库进行变更的所有操作,但是不包括select和show操作,因为这类操作没有对数据库本身进行修改。另外,二进制日志还包含了执行数据库更改操作的时间等信息。
通过命令“set sql_log_bin=1;”来开启二进制日志。具体使用可参考MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)。
2、日志作用:
1)恢复:某些数据的恢复需要二进制日志,在全库文件恢复后,可以在此基础上通过二进制日志进行point-to-time的恢复。
2)复制:其原理和恢复类似,通过复制和执行二进制日志是的一台远程的Slave数据库与Master数据库进行实时同步。
3、日志查看:
show binary logs;
show master logs;
show binlog events;
show binlog events in 'xxxx';
查看二进制日志的内容:mysqlbinlog binarylog_name。
4、日志相关参数设置:
1)log_bin={off|no}
是否开启二进制日志。如果为mysqld设定了--log_bin选项,那么其值为ON,否则为OFF。该值仅用于显示是否启用了二进制日志,并不反映log_bin的设定值——即不放映二进制日志文件存放的具体位置(在my.cnf中定义)。
其作用范围为全局级别,属于静态变量。
2)binlog_cache_size=32768
启动服务器时二进制日志的缓存大小。可以通过show global status查看binlog_cache_use/binlog_cache_disk_use的状态,根据情况判断当期该变量设置是否合适。
3)binlog_format={row|statement|mixed}
指定二进制日志的类型。该变量作用范围全局或会话,可用于配置文件,属于动态变量。三个值的具体含义分别如下:
statement:表示二进制日志文件记录的事日志逻辑SQL语句。
row:表示记录的不再是简单的SQL语句了,而是行更改情况。此时可以将InnoDB的事务隔离级别设为read committed以获得更好的并发性能。
mixed:数据库默认采用statement,但是在一些情况会使用用row格式。
4)binlog_stmt_cache_size=32768:基于statement格式的缓存大小。
5)expire_logs_days={0.99}
设定二进制日期的过期天数,超长此天数的二进制日志文件将被自动删除。默认为0,表示不起用过期自动删除功能。如果启用此功能,那么自动删除工作通常发生在MySQL启动时或FLUSH日志时。
其作用范围为全局,可用于配置文件,属于动态变量。
6)max_binlog_cache_size={4096…}
设置单个二进制日志文件的最大值,单位为字节。最小值为4KB,最大值为1GB,默认为1GB。
其作用范围为全局级别,可用于配置文件,属于动态变量。
7)max_binlog_stmt_cache_size=18......:基于statement格式的二进制日志文件的最大缓存大小。
8)sql_log_bin={on|off}
用于控制二进制日志信息是否记录仅日志文件。默认为ON,表示启用记录功能。
用户可以在会话级别修改此变量的值,但其必须具有超级权限。其作用范围为全局和会话级别,属于动态变量。
9)--binlog-do-db和--binlog-ignore-db:指定二进制日志文件记录哪些数据库操作。默认值为空,则表示将所有库的日志同步到二进制日志。
10)sync_binlog=N
每个N秒将缓存中的二进制日志记录写会硬件。默认为0,表示不同步。任何正数值都表示对二进制没多少次写操作之后同步一次。
11)log_slave_updates:该参数在搭建master=>slave=>slave的架构时,需要配置。
5、日志清理
通过变量expire_logs_days或者使用“flush logs”命令清理日志。
标签:log,记录,二进制,查询,MySQL,日志,维护 From: https://www.cnblogs.com/ilovebath/p/16707609.html