您的位置:首页 > 数据库 > MySQL

MySQL 日志管理

2015-12-25 12:37 344 查看
大纲

一、MySQL日志类型概貌
二、错误日志
三、一般查询日志
四、慢查询日志
五、二进制日志
六、事务日志
七、中继日志

一、MySQL日志类型概貌
错误日志:记录启动、运行或停止mysqld时出现的问题

一般查询日志:记录建立的客户端连接和执行的语句

慢查询日志:所有执行时间超过long_query_time秒的所有查询或不使用索引的查询

二进制日志:记录所有更改数据的语句。还用于复制事务日志

事务日志:记录事务相关的操作或修改日志
中继日志:从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件

二、错误日志
1、错误日志记录的内容
服务器启动和关闭过程中的信息
服务器运行过程中的错误信息
事件调度器运行一个事件时产生的信息
在从服务器上启动从服务器进程时产生的信息

2、错误日志相关服务器变量(1)、log_error FILE_NAME:定义错误日志文件。默认为数据目录下的host_name.err文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。
(2)、log_warnings {0|1}:设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。

三、一般查询日志
1、一般查询日志相关服务器变量
(1)、general_log {ON|OFF}:设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项。如若启用此项,其输出位置则由--log_output选项进行定义,如果log_output的值设定为NONE,即使用启用查询日志,其也不会记录任何日志信息。作用范围为全局,可用于配置文件,属动态变量。

(2)、general_log_file FILE_NAME:查询日志的日志文件名称,默认为“hostname.log"。作用范围为全局,可用于配置文件,属动态变量。

(3)、log {ON|OFF}:是否启用记录所有语句的日志信息于一般查询日志(general query log)中,默认通常为OFF,MySQL5.6已经废弃此项

(4)、log_output {TABLE|FILE|NONE}:定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。作用范围为全局级别,可用于配置文件,属动态变量。

四、慢查询日志
1、慢查询日志相关服务器变量
(1)、long_query_time TIME:设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量。

(2)、log_slow_queries {ON|OFF}:是否记录慢查询日志。慢查询是指查询的执行时间超出long_query_time参数所设定时长的事件。MySQL 5.6将此参数修改为了slow_query_log。作用范围为全局级别,可用于配置文件,属动态变量。

(3)、slow_query_log {ON|OFF}:设定是否启用慢查询日志。0或OFF表示禁用,1或ON表示启用。日志信息的输出位置取决于log_output变量的定义,如果其值为NONE,则即便slow_query_log为ON,也不会记录任何慢查询信息。作用范围为全局级别,可用于选项文件,属动态变量。

(4)、slow_query_log_file FILE_NAME:设定慢查询日志文件的名称。默认为hostname-slow.log,但可以通过--slow_query_log_file选项修改。作用范围为全局级别,可用于选项文件,属动态变量。

五、二进制日志
1、二进制日志记录的内容:任何引起或可能引起数据库变化的操作

2、二进制日志的作用:实现复制功能和即时点还原功能

3、二进制日志的格式
①基于语句: statement
②基于行: row
③混合方式: mixed

4、二进制日志事件记录格式
①产生的时间:starttime;包括--start-datetime和--stop-datetime
②相对位置:position;包括--start-position和--stop-position

5、二进制日志文件组成
①索引文件
②二进制日志文件
6、二进制日志相关的服务器变量
(1)、binlog_cache_size SIZE:使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

(2)、binlog-format={ROW|STATEMENT|MIXED}:指定二进制日志的类型,默认为STATEMENT。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。作用范围为全局或会话,可用于配置文件,且属于动态变量。

(3)、binlog_stmt_cache_size SIZE:当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句

(4)、log-bin={YES|NO}:是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。其仅用于显示是否启用了二进制日志,并不反应log-bin的设定值。作用范围为全局级别,属非动态变量。

(5)、sql_log_bin={ON|OFF}:用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

(6)、max_binlog_cache_size {4096 .. 18446744073709547520}:二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。作用范围为全局级别,可用于配置文件,属动态变量。

(7)、max_binlog_size={4096 .. 1073741824}:设定二进制日志文件上限,单位为字节,最小值为4K,最大值为1G,默认为1G。某事务所产生的日志信息只能写入一个二进制日志文件,因此,实际上的二进制日志文件可能大于这个指定的上限。作用范围为全局级别,可用于配置文件,属动态变量。

(8)、sql_log_off={ON|OFF}:用于控制是否禁止将一般查询日志类信息记录进查询日志文件。默认为OFF,表示不禁止记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

(9)、sync_binlog=#:设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。

7、查看当前正在使用的二进制日志文件
SHOW MASTER STATUS;

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000014 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
8、查看所有的二进制日志文件
SHOW BINARY LOGS;

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       107 |
| mysql-bin.000002 |       107 |
| mysql-bin.000003 |       107 |
| mysql-bin.000004 |       107 |
| mysql-bin.000005 |     27326 |
| mysql-bin.000006 |   1038693 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |       126 |
| mysql-bin.000009 |      1654 |
| mysql-bin.000010 |     20386 |
| mysql-bin.000011 |       126 |
| mysql-bin.000012 |       477 |
| mysql-bin.000013 |       126 |
| mysql-bin.000014 |       356 |
+------------------+-----------+
14 rows in set (0.00 sec)
9、查看二进制日志事件
SHOW BINLOG EVENTS IN 'BINLOG_FILENAME' [FROM POS];

mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000014' FROM 107;
+------------------+-----+------------+-----------+-------------+---------------------------------------------------------------------------+
| Log_name         | Pos | Event_type | Server_id | End_log_pos | Info                                                                      |
+------------------+-----+------------+-----------+-------------+---------------------------------------------------------------------------+
| mysql-bin.000014 | 107 | Query      |         1 |         177 | BEGIN                                                                     |
| mysql-bin.000014 | 177 | Intvar     |         1 |         205 | INSERT_ID=6                                                               |
| mysql-bin.000014 | 205 | Query      |         1 |         329 | use `jiaowu`; INSERT INTO tutors (Tname,Gender,Age) VALUES ('Tom','M',30) |
| mysql-bin.000014 | 329 | Xid        |         1 |         356 | COMMIT /* xid=15 */                                                       |
+------------------+-----+------------+-----------+-------------+---------------------------------------------------------------------------+
4 rows in set (0.00 sec)
10、清除二进制日志文件
PURGE BINARY LOGS TO 'mysql-bin.010';

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       107 |
| mysql-bin.000002 |       107 |
| mysql-bin.000003 |       107 |
| mysql-bin.000004 |       107 |
| mysql-bin.000005 |     27326 |
| mysql-bin.000006 |   1038693 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |       126 |
| mysql-bin.000009 |      1654 |
| mysql-bin.000010 |     20386 |
| mysql-bin.000011 |       126 |
| mysql-bin.000012 |       477 |
| mysql-bin.000013 |       126 |
| mysql-bin.000014 |       356 |
+------------------+-----------+
14 rows in set (0.01 sec)

mysql> PURGE BINARY LOGS TO 'mysql-bin.000008';
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000008 |       126 |
| mysql-bin.000009 |      1654 |
| mysql-bin.000010 |     20386 |
| mysql-bin.000011 |       126 |
| mysql-bin.000012 |       477 |
| mysql-bin.000013 |       126 |
| mysql-bin.000014 |       356 |
+------------------+-----------+
7 rows in set (0.00 sec)
11、滚动二进制日志
FLUSH LOGS;

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000014 |      356 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.06 sec)

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000015 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


六、事务日志1、事务性存储引擎用户保证原子性、一致性、隔离性、持久性
2、事务日志相关服务器变量
(1)、innodb_flush_log_at_trx_commit {0|1|2}:设定InnoDB同步日志缓冲区(log buffer)数据至日志文件中的方式,以及刷写日志文件至磁盘的方式。其可接受的值中,“0”表示将日志缓冲区每秒一次地写入日志文件,并同时将日志文件刷写至磁盘中,但事务提交时不会采取任何动作;“1”是默认值,表示在有事务提交时将日志缓冲区写入日志文件,并同时将日志文件刷写至磁盘;“2”表示每事务提交或每秒一次将日志缓冲区写入日志文件,但不会同时执行日志文件的刷写操作。当然,由于操作系统进程调度的原因,每秒一次的日志写入或刷写操作并不能得到100%的保证。
完全兼容ACID的场景需要将此变量值设置为1,由于要执行每事务的日志刷写操作,其会阻止I/O调用,直到写操作完成,故其会显著降低InnoDB每秒钟可以提交的事务数。设置为“2”可获得比“1”更好的性能,而且仅在操作系统崩溃时才会丢失最后一秒钟的数据,因此数据安全性也有着不错的表现。设置为“0”则有可能会导致事务最后一秒钟的数据丢失,于是整个事务的数据安全性将无法保证,但其通常有着最好的性能。为了在最大程序上保证复制的InnoDB事务持久性和一致性,应该设置变量innodb_flush_log_at_trx_commit=1以及设置变量sync_binlog=1。
然而需要注意的是,有些磁盘自身也有缓存,这可能会给事务操作带来额外的潜在风险。可以使用hdparm工具或供应商的自有工具等禁用磁盘自身的缓存。当然,高性能事务的最佳配置是把此变量的值设置为1,并且将日志文件放在有备用电池的写入缓存的RAID上。作用范围为全局,可用于选项文件,属动态变量。

0表示每秒同步,并执行磁盘flush操作
1表示每事务同步,并执行磁盘flush操作
2表示每事务同步,但不执行磁盘flush操作

(2)、innodb_log_buffer_size{262144 .. 4294967295}:设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务可以借助于更大的日志缓冲区来避免在事务完成之前将日志缓冲区的数据写入日志文件,以减少I/O操作进而提升系统性能。因此,在有着较大事务的应用场景中,建议为此变量设定一个更大的值。作用范围为全局级别,可用于选项文件,属非动态变量。

(3)、innodb_log_file_size={108576 .. 4294967295}:设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为明智的取值范围是从1MB到缓存池体积的1/n,其中n表示日志组中日志文件的个数。日志文件越大,在缓存池中需要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障恢复速度。作用范围为全局级别,可用于选项文件,属非动态变量。

(4)、innodb_log_files_in_group={2 .. 100}:设定日志组中日志文件的个数。InnoDB以循环的方式使用这些日志文件。默认值为2。作用范围为全局级别,可用于选项文件,属非动态变量。

(5)、innodb_log_group_home_dir=/PATH/TO/DIR:设定InnoDB重做日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范围为全局级别,可用于选项文件,属非动态变量。

(6)、innodb_mirrored_log_groups=#:设定日志组镜像的个数。其值应该为1。

(7)、expire_log_days #:设置二进制日期的过期时间,过期则会自动清理

七、中继日志(从服务器)1、中继日志概念:从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件

总结:二进制日志是为了在将来某个时刻数据库崩溃时还原数据库,而事务日志则是为了保证事务本身的可靠性的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL 日志