第四章MySQL日志文件管理

Posted 旅行者-Travel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章MySQL日志文件管理相关的知识,希望对你有一定的参考价值。

1、日志文件管理概述:

配置文件:/etc/my.cnf

作用:mysql日志文件是用来记录MySQL数据库客户端连接情况、SQL语句的执行情况以及错误信息告示。

分类:MySQL日志文件分为4种:错误日志、通用查询日志、慢查询日志和二进制日志:

错误日志:记录MySQL服务器的启动、运行、或停止时出现的问题(默认情况,只启用错误日志功能。)

二进制日志:以二进制文件的形式记录了数据库中的操作,但不是记录查询语句。

通用查询日志:记录用户的登录和查询的信息。

慢查询日志:记录所有的执行时间超过指定时间的所有查询或者不使用索引的查询。

  • error log 错误日志 排错 /var/log/mysqld.log【默认开启】
  • bin log 二进制日志 备份 增量备份 DDL DML DCL
  • Relay log 中继日志 复制 接收 replication master
  • slow log 慢查询日志 调优 查询时间超过指定值

 【实例1】SHOW VARIABLES 语句查看是否启用了日志:

mysql> show variables like log_%;
+----------------------------------------+----------------------------+
| Variable_name                          | Value                      |
+----------------------------------------+----------------------------+
| log_bin                                | ON                         |
| log_bin_basename                       | /data/mysql/yltlinux       |
| log_bin_index                          | /data/mysql/yltlinux.index |
| log_bin_trust_function_creators        | OFF                        |
| log_bin_use_v1_row_events              | OFF                        |
| log_error                              | /data/mysql/host130.err    |
| log_output                             | FILE                       |
| log_queries_not_using_indexes          | OFF                        |
| log_slave_updates                      | OFF                        |
| log_slow_admin_statements              | OFF                        |
| log_slow_slave_statements              | OFF                        |
| log_throttle_queries_not_using_indexes | 0                          |
| log_warnings                           | 1                          |

其中Value值是off的表示未开启服务。可以更改my.ini文件中的配置信息,重启mysql服务即可。

注:启用日志功能会降低MySQL数据的执行速度。

 2、错误日志(err log)

 作用:error log 错误日志   排错    /var/log/mysqld.log【默认开启】

 2.1启动和设置错误日志:

  • 日志文件位置:log-error=/var/log/mysqld.log
  • 默认情况下错误日志是开启的,而且无法 被禁止,打开数据安装目录下的my.ini文件找到log-error选项进行查看:

 【实例2】获取log-error变量的值,即获取error log的详细位置:

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

mysql> 

 2.2 查看错误日志

 【实例2】可知log_error的详细位置,下边部分error log:

[[email protected] ~]# more /data/mysql/host130.err

2018
-05-25 19:20:15 5800 [Note] InnoDB: The InnoDB memory heap is disabled 2018-05-25 19:20:15 5800 [Note] InnoDB: Mutexes and rw_locks use G CC atomic builtins 2018-05-25 19:20:15 5800 [Note] InnoDB: Memory barrier is not used 2018-05-25 19:20:15 5800 [Note] InnoDB: Compressed tables use zlib 1.2.3 2018-05-25 19:20:15 5800 [Note] InnoDB: Using Linux native AIO 2018-05-25 19:20:15 5800 [Note] InnoDB: Using CPU crc32 instructio

 2.3 删除错误日志

 目的:对于存放很久的错误日志,可以删除以保证MySQL服务器上的硬盘空间。

 方法:MySQL数据库中可以使用两种方法开启新的错误日志:mysqladmin命令和flush logs。

 mysqladmin 命令语法如下:

1、sqladmin -u root -p flush-log

  注:上述命令会创建一个新的错误日志,旧的仍然会 保留,在名称后边添加-old内容。

3、二进制日志

 作用:bin log 二进制日志 备份 增量备份 DDL DML DCL

   3.1 启用二进制日志

  • 默认情况下,二进制日志(bin-log)功能是关闭状态,如果要开启需要在 my.ini 文件中的 log-bin 选项前的 # 去掉。 

 【实例3】在my.ini 文件中指定 log-bin 选项的参数值,重新指定二进制日志文件的名称为 yangyang:

 

#Binary Logging
log-bin="yangyang"

  关闭my.ini 文件后重新启动MySQl服务器。

 【实例4】为了确保二进制日志功能已经开启,可执行如下命令:

mysql> show variables like log_bin;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> 

  3.2查看二进制日志

  • 二进制日志是以二进制的方式存储,不能直接打开,所以需要使用mysql 自带的 mysqlbinlog 命令工具进行查看

 【实例5】进入当前数据库的数据目录:

  • [[email protected] mysql]# pwd
    /data/mysql
    [[email protected] mysql]# mysqlbinlog yltlinux.000037
    /*!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
    #180525 19:20:25 server id 128  end_log_pos 120 CRC32 0xb6d0f986 Start: binlog v 4, server v 5.6.36-log created 180525 19:20:25 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    BINLOG 
    efEHWw+AAAAAdAAAAHgAAAABAAQANS42LjM2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAB58QdbEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAYb5
    0LY=
    /*!*/;
    DELIMITER ;
    # End of log file
    ROLLBACK /* added by mysqlbinlog */;
    /*!50003 SET [email protected]_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    [[email protected] mysql]# 

    【实例6】查看二进制日志的文件目录:

  • mysql> show master logs;
    +-----------------+-----------+
    | Log_name        | File_size |
    +-----------------+-----------+
    | yltlinux.000001 |    178523 |
    | yltlinux.000002 |       143 |
    | yltlinux.000003 |       143 |
    | yltlinux.000004 |       143 |
    | yltlinux.000005 |       143 |
    | yltlinux.000006 |       143 |
    | yltlinux.000007 |       120 |
    | yltlinux.000008 |       927 |
    | yltlinux.000009 |       120 |
    | yltlinux.000010 |       120 |
    +-----------------+-----------+
    11 rows in set (0.46 sec)
    
    mysql>

 3.3  清理二进制文件

  原因:二进制日志文件会影响MySQL数据库性能,大量的二进制日志文件会占用大量磁盘空间。

  删除二进制文件的方法:

  1. 删除所有二进制文件,新的二进制文件会重新从 000001开始:
reset master;

  2.根据编号进行删除

 【实例7】删除 yltlinux.000005 之前的二进制日志,删除之后通过 SHOW MASTER  LOGS 语句查看文件列表:

mysql> purge master logs to yltlinux.000005;
Query OK, 0 rows affected (0.10 sec)

mysql> show master logs;
+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| yltlinux.000005 |       143 |
| yltlinux.000006 |       143 |
| yltlinux.000007 |       120 |
| yltlinux.000008 |       927 |
| yltlinux.000009 |       120 |
| yltlinux.000010 |       120 |
+-----------------+-----------+
33 rows in set (0.00 sec)

mysql> 

  3.根据创建时间进行删除

  • purge master logs before 语句可以将指定时间之前的所有二进制文件删除;
  •  purge master logs before ‘yyyy -mm-dd hh:mm:ss’;
mysql> purge master logs before 2018-02-01 22:46:00;
Query OK, 0 rows affected (0.07 sec)

mysql> show master logs;
+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| yltlinux.000032 |       143 |
| yltlinux.000033 |      6796 |
| yltlinux.000034 |       709 |
| yltlinux.000035 |       455 |
| yltlinux.000036 |       143 |
| yltlinux.000037 |       120 |
+-----------------+-----------+
6 rows in set (0.00 sec)

mysql> 

   3.4 恢复二进制日志

   原因:二进制日志记录着MySQL数据库的所有事件操作,当发生灾难性错误时,可以通过二进制日志进行恢复。

  【实例9】使用 mysqlbinlog 命令执行还原操作时,必须是编号小的首先被还原。

mysqlbinlog yltlinux.000001 | mysql -u root -p
mysqlbinlog yltlinux.000002 | mysql -u root -p

4.慢查询日志

  作用:用来记录执行时间超过指定时间的查询语句,可以找出那些查询语句执行效率低,以方便进行优化。

  •   默认情况下,慢查询日志功能是关闭的。
  •   如下语句查看慢查询的配置:

  

mysql> show variables like%slow%;
+---------------------------+------------------------------+
| Variable_name             | Value                        |
+---------------------------+------------------------------+
| log_slow_admin_statements | OFF                          |
| log_slow_slave_statements | OFF                          |
| slow_launch_time          | 2                            |
| slow_query_log            | OFF                          |
| slow_query_log_file       | /data/mysql/host130-slow.log |
+---------------------------+------------------------------+
5 rows in set (0.00 sec)

mysql> 

 

以上是关于第四章MySQL日志文件管理的主要内容,如果未能解决你的问题,请参考以下文章

第四章· MySQL客户端工具及SQL讲解

常用python日期日志获取内容循环的代码片段

SpringBoot | 第二十三章:日志管理之整合篇

MySQL 日志管理

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

第四课——mysql配置参数讲解