Mysql 日志管理详解

日志对于服务器维护来说是非常重要的,它记录了服务器运行的信息,许多操作都会写入到日志文件,通过日志文件可以了解服务器的运行状态、服务器性能等;对维护人员进行排错,故障处理,优化等提供详细的依据。MySQL中有六种不同类型的日志

一、日志种类

1、错误日志:记录mysql启动,运行或停止时出现的问题信息,一般也会记录警告信息
2、一般查询日志:记录与建立的客户端连接和执行的语句
3、慢查询日志:记录所有执行时间超高long_query_time 的所有查询或不使用索引的查询,可以帮助我们定位服务器性能的问题,优化索引。
4、二进制日志:任何引起或可能引起数据变化的操作,主要用于复制和即时点恢复
5、中继日志:从主服务器的二进制日志文件中复制而来的时间,并保存为slave 服务器的日志文件
6、事务日志:记录InnoDB 等支持事务的存储引擎执行事务时产生的日志

Mysql 中对于日志文件环境变量非常多,可以使用一下命令查看

mysql> show global variables like ‘%log%‘;
+-----------------------------------------+----------------------------------------+
| Variable_name                           | Value                                  |
+-----------------------------------------+----------------------------------------+
| back_log                                | 50                                     |
| binlog_cache_size                       | 32768                                  |
| binlog_direct_non_transactional_updates | OFF                                    |
| binlog_format                           | STATEMENT                              |
| binlog_stmt_cache_size                  | 32768                                  |
| expire_logs_days                        | 0                                      |
| general_log                             | OFF                                    |
| general_log_file                        | /application/mysql/data/bogon.log      |
| innodb_flush_log_at_trx_commit          | 1                                      |
| innodb_locks_unsafe_for_binlog          | OFF                                    |
| innodb_log_buffer_size                  | 8388608                                |
| innodb_log_file_size                    | 5242880                                |
| innodb_log_files_in_group               | 2                                      |
| innodb_log_group_home_dir               | ./                                     |
| innodb_mirrored_log_groups              | 1                                      |
| log                                     | OFF                                    |
| log_bin                                 | OFF                                    |
| log_bin_trust_function_creators         | OFF                                    |
| log_error                               | /application/mysql/data/bogon.err      |
| log_output                              | FILE                                   |
| log_queries_not_using_indexes           | OFF                                    |
| log_slave_updates                       | OFF                                    |
| log_slow_queries                        | OFF                                    |
| log_warnings                            | 1                                      |
| max_binlog_cache_size                   | 18446744073709547520                   |
| max_binlog_size                         | 1073741824                             |
| max_binlog_stmt_cache_size              | 18446744073709547520                   |
| max_relay_log_size                      | 0                                      |
| relay_log                               |                                        |
| relay_log_index                         |                                        |
| relay_log_info_file                     | relay-log.info                         |
| relay_log_purge                         | ON                                     |
| relay_log_recovery                      | OFF                                    |
| relay_log_space_limit                   | 0                                      |
| slow_query_log                          | OFF                                    |
| slow_query_log_file                     | /application/mysql/data/bogon-slow.log |
| sql_log_bin                             | ON                                     |
| sql_log_off                             | OFF                                    |
| sync_binlog                             | 0                                      |
| sync_relay_log                          | 0                                      |
| sync_relay_log_info                     | 0                                      |
+-----------------------------------------+----------------------------------------+
41 rows in set (0.00 sec)

二、错误日志

错误日志主要记录:

1、服务器启动和关闭过程中的信息
2、服务器运行过程中的错误信息
3、事件调度器运行一个事件时产生的信息
4、在从服务器上启动从服务器进程时产生的信息

错误日志定义:
        可以用–log-error [ = file_name ]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行flush logs,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出–log-error选项,则不会重新命名)。错误日志一般有log_error(错误日志文件) 和log_warnings(启用警告信息) 两个变量可以定义,默认使用log_warnings。

mysql> show global variables like ‘%log_error%‘;
+---------------+-----------------------------------+
| Variable_name | Value                             |
+---------------+-----------------------------------+
| log_error     | /application/mysql/data/bogon.err |
+---------------+-----------------------------------+
1 row in set (0.00 sec)

mysql> show global variables like ‘%log_warnings%‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 1     |
+---------------+-------+
1 row in set (0.00 sec)

三、查询日志

        3.1 一般查询日志

启动开关:general_log={ON|OFF}

日志文件变量:general_log_file [ =/PATH/TO/file]
        全局日志开关:log={ON|OFF};该开关打开后,所有日志都会被启用
        记录类型:log_output={TABLE|FILE|NONE};log_output定义了日志的输出格式,可以是表,文件,若设置为NONE,则不启用日志。因此,要启用通用查询日志,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果没有指定,默认名是host_name.log。

由于一般查询使用量比较大,启用写入日志文件,服务器的I/O操作较多,会大大降低服务器的性能,所以默认为关闭的。

mysql> show global variables like ‘%general_log%‘;
+------------------+-----------------------------------+
| Variable_name    | Value                             |
+------------------+-----------------------------------+
| general_log      | OFF                               |
| general_log_file | /application/mysql/data/bogon.log |
+------------------+-----------------------------------+
2 rows in set (0.00 sec)

mysql> show global variables like ‘%general_log_file%‘;
+------------------+-----------------------------------+
| Variable_name    | Value                             |
+------------------+-----------------------------------+
| general_log_file | /application/mysql/data/bogon.log |
+------------------+-----------------------------------+
1 row in set (0.00 sec)

可以使用以下命令开启general_log:

mysql> show global variables like ‘%general_log%‘;
+------------------+-----------------------------------+
| Variable_name    | Value                             |
+------------------+-----------------------------------+
| general_log      | ON                                |
| general_log_file | /application/mysql/data/bogon.log |
+------------------+-----------------------------------+
2 rows in set (0.00 sec)

    3.2、慢查询日志

查询超时时间:long_query_time

启动慢查日志:log_slow_queries={YES|NO}
    启动慢查日志 : slow_query_log                    
    日志记录文件:slow_query_log_file [= file_name ] 
    MySQL如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

mysql> show global variables like ‘%slow_query_log%‘;
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| slow_query_log      | OFF                                    |
| slow_query_log_file | /application/mysql/data/bogon-slow.log |
+---------------------+----------------------------------------+
2 rows in set (0.00 sec)

默认没有启用慢查询,为了服务器调优,建议开启。

mysql> show global variables like ‘%long_query%‘;
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
超长时间默认为10秒,超过了即为慢查询。

四、二进制日志

二进制日志启动开关:log-bin [= file_name]
二进制日志用于记录所有更改数据的语句,主要用于复制和即时点恢复。二进制日志的主要目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进制日志包含备份后进行的所有更新,二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
查看二进制日志的工具为:mysqlbinlog

二进制日志的格式:
1、基于语句: statement level;#优点:存储量小,节约IO,提高性能
2、基于行: row level;#优点:1非常清楚的记录每一行数据修改的细节,不会出现某些特定情况下存储过程
3、混合方式: mixed level;#继承了row level模式和statement level模式的优点,mysql 自动选择最佳的格式

二进制日志事件:
1、产生的时间:starttime
2、相对位置:position

二进制日志文件:
1、索引文件
2、二进制日志文件

在数据目录下有一个mysql-bin.index便是索引文件,以mysql-bin开头并以数字结尾的文件为二进制日志文件。
日志的滚动:
MySQL的滚动方式与其他日志不太一样,滚动时会创建一个新的编号大1的日志用于记录最新的日志,而原日志名字不会被改变。每次重启MySQL服务,日志都会自动滚动一次。
另外如果需要手动滚动,则使用命令:

mysql> show binary logs;  #查看所有的二进制文件
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |      1067 |
| mysql-bin.000002 |       513 |
+------------------+-----------+
2 rows in set (0.00 sec)

插入数据后,position会发生改变。

修改之前的position
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000002
        Position: 929    ####未改变前的position 为929
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)
修改之后
mysql> insert into master(name) values(‘lilei‘);#插入一条数据
Query OK, 1 row affected (0.02 sec)

mysql> insert into master(name) values(‘lilei‘);
Query OK, 1 row affected (0.01 sec)

mysql> insert into master(name) values(‘lilei‘);
Query OK, 1 row affected (0.02 sec)

mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000002
        Position: 1547  #####插入三条语句后的position 变成了1547
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

mysql> show binlog events in ‘mysql-bin.000002‘ from 929;
+------------------+------+------------+-----------+-------------+----------------------------------------------------------+
| Log_name         | Pos  | Event_type | Server_id | End_log_pos | Info                                                     |
+------------------+------+------------+-----------+-------------+----------------------------------------------------------+
| mysql-bin.000002 |  929 | Query      |         1 |        1001 | BEGIN                                                    |
| mysql-bin.000002 | 1001 | Query      |         1 |        1108 | use `master01`; insert into master(name) values(‘lilei‘) |
| mysql-bin.000002 | 1108 | Xid        |         1 |        1135 | COMMIT /* xid=51 */                                      |
| mysql-bin.000002 | 1135 | Query      |         1 |        1207 | BEGIN                                                    |
| mysql-bin.000002 | 1207 | Query      |         1 |        1314 | use `master01`; insert into master(name) values(‘lilei‘) |
| mysql-bin.000002 | 1314 | Xid        |         1 |        1341 | COMMIT /* xid=52 */                                      |
| mysql-bin.000002 | 1341 | Query      |         1 |        1413 | BEGIN                                                    |
| mysql-bin.000002 | 1413 | Query      |         1 |        1520 | use `master01`; insert into master(name) values(‘lilei‘) |
| mysql-bin.000002 | 1520 | Xid        |         1 |        1547 | COMMIT /* xid=53 */                                      |
+------------------+------+------------+-----------+-------------+----------------------------------------------------------+
9 rows in set (0.00 sec)

mysql> purge binary logs to ‘mysql-bin.000002‘;#用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个
Query OK, 0 rows affected (0.01 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000002 |      1547 |
+------------------+-----------+
1 row in set (0.00 sec)

使用命令mysqlbinlog查看二进制日志内容:

基本语法:

mysqlbinlog [options] log-files
常用options(类似字节偏移数):
--start-position     :开始位置
--stop-position     :结束位置
--start-datetime ‘yyyy-mm-dd hh:mm:ss‘  :开始时间
--stop-datetime ‘yyyy-mm-dd hh:mm:ss‘  :结束时间

[[email protected] mysql]# bin/mysqlbinlog --start-position 513 --stop-position 1067 ./data/mysql-bin.000002
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#161229 21:56:12 server id 1  end_log_pos 107 	Start: binlog v 4, server v 5.5.53-log created 161229 21:56:12 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG ‘
/BVlWA8BAAAAZwAAAGsAAAABAAQANS41LjUzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD8FWVYEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
‘/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

五、中继日志


六、事务日志

事务性存储引擎用于保证(ACID)原子性、一致性、隔离性和持久性;其不会立即写到数据文件中,而是写到事务日志中。

innodb_flush_log_at_trx_commit:
0: 每秒同步,并执行磁盘flush操作;
1:每事务同步,并执行磁盘flush操作;
2: 每事务同步,但不执行磁盘flush操作;
mysql> show global variables like ‘%innodb_flush%‘;
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
| innodb_flush_method            |       |
+--------------------------------+-------+
2 rows in set (0.00 sec)
时间: 2024-10-26 20:03:00

Mysql 日志管理详解的相关文章

项目log4j日志管理详解

项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对于初次使用者可能会遇到一点的小麻烦.最近在项目中刚做了一个统计用户登录的日志文件,要求将用户登录到某个模块的信息输出到login.log中,每天生成一个已日期命名的该类文件,现share出来. 1.Log4j下载 在apache网站:jakarta.apache.org/log4j 可以免费下载到L

MySQL日志功能详解(1)

MySQL日志:(以下都位全局服务器变量) MySQL > show global variables like '%log%'; MySQL 6类日志简单介绍 查询日志:默认为关闭(产生大量写操作) 所有跟查询相关的语句 慢查询日志:查询执行时长超过指定时长的查询,即为慢查询         (包括查询本身,以及查询所依赖的资源不被允许[表被锁定]) 错误日志:跟错误信息相关,以及mysql启动,关闭,主从复制等信息 二进制日志:记录跟修改相关的操作,用来实现复制的凭据(可是实现数据恢复) 中

MySQL日志功能详解查询、慢查询

MySQL日志:大量的IO操作不建议写到文件中 mysql> show global variables like 'innodb%'; mysql> show global variables like '%log%';  general_log                             | OFF   log                                     | OFF [临时开启记录日志] mysql> set global log='ON';

MySQL日志功能详解(2)

二进制日志:(多个线程会争用,可以首先写到缓冲区中) 记录了当前服务器的数据修改和有潜在可能性影响数据修改的语句 默认在数据目录下,通常情况下为mysql-bin     [[email protected] data]# file mysql-bin.000001      mysql-bin.000001: MySQL replication log  复制日志 可以通过mysqlbinlog命令来查看 时间记录 time 偏移位置 position MySQL > show master 

Linux命令:MySQL系列之十一--MySQL日志管理

MySQL日志管理 SHOW GLOBAL VARIABLES LIKE '%log%':查看关于log的全局变量 一.日志分类 1.错误日志   2.一般查询日志   3.慢查询日志 4.二进制日志  5.中继日志   6.事务日志   7.滚动日志 二.日志详解 1.错误日志 说明:在对应的数据目录中,以主机名+.err命名的文件,错误日志记录的信息类型: 记录了服务器运行中产生的错误信息 记录了服务在启动和停止是所产生的信息 在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录

MySQL 日志管理(一)

一.MySQL的日志查看: QL的初期,需要熟练掌握sql语句的运用,最简单的方式就是多练习多运用,但是好需要有一定的目的性,什么意思呢? 就是每个人的习惯不一样,可能容易犯的错误也不同,所以需要总结自己的常犯错误,有针对性的弥补,这样就会对MySQL的学习和掌握起到事半功倍的效果.今天就说几种记录MySQL操作的几种日志: #错误日志     log-error #查询日志     log #二进制日志  log-bin #慢日志  log-slow-queries #更新日志 log-upd

Mysql 三大特性详解

Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下图所以,是由多个内存块组成的内存池,同时又多个后台线程进行工作,文件是存储磁盘上的数据. 后台线程 上面看到一共有四种后台线程,每种线程都在不停地做自己的工作,他们的分工如下: Master Thread: 是最核心的线程,主要负责将缓冲池中的数据异步刷新的磁盘,保证数据的一致性,包括脏页的刷新.合

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; MySQL数据库引擎详解 作为Java程序员,MySQL数据库