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.cnf文件中的配置信息,重启mysql服务即可。

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

2、错误日志(err log)

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

 2.1启动和设置错误日志:

  • 日志文件位置:log-error=/var/log/mysqld.log
  • 默认情况下错误日志是开启的,而且无法 被禁止,打开数据安装目录下的my.cnf文件找到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:

[root@host130 ~]# 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.cnf文件中的 bin_log 选项前的 # 去掉。 

 【实例3】在my.cnf文件中指定如下内容:

log_bin=mysql-bin  
server-id=11 #由于bug问题必须设置这个id,数字随便写
datadir=/var/lib/mysql   #默认指定文件存放位置,可修改,但是要注意权限

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

[root@localhost ~]#  systemctl restart mysqld

 【实例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】进入当前数据库的数据目录:

  • [root@host130 mysql]# pwd
    /data/mysql
    [root@host130 mysql]# mysqlbinlog yltlinux.000037
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@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 COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    [root@host130 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.慢查询日志

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

  • 默认情况下,慢查询日志功能是关闭的。

  4.1 启用慢查询日志:

  • 如下语句查看慢查询的配置:
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>
  • 默认情况下,my.cnf文件的相关内容如下:

    slow-query-log=                        //表示是否启用慢查询日志,其中0表示不启用,修改为1表示启用慢查询日志
    slow_query_log_file=''WS-slow.log" //指定慢查询日志生成的文件路径和名称,如果不指定路径名,默认存放在数据库的数据文件下
    long_query_time= //指定时间值,以秒为单位,默认值为10s

  4.2 查看和删除慢查询日志

   4.2.1  查看慢查询日志

   启用慢查询日志时,重新启动 MySQL 数据库,会自动生成一个慢查询日志,日志是以  文本文件  的形式存储,可以直接通过文本文件打开工具查看。

   4.2..2  删除慢查询日志

   删除慢查询日志有两种方法:

  1. 直接手动删除
  2. 通过执行 mysqladmin 命令启用新的慢查询日志,新生成的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。基本语法如下:
mysqladmin -u root -p flush-logs

  >删除之后重启删除之后需要重启 MySQL 服务,重启之后会生成新的慢查询日志。

  >如果要备份旧日志,可以将旧日志改名,再重启MySQL服务。

【第六章】MySQL日志文件管理的更多相关文章

  1. MySQL基础之第17章 MySQL日志

    17.1.日志简介 二进制日志错误日志通用查询日志慢查询日志 17.2.二进制日志 二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况.通过二进制日志可以查询MySQL数据 ...

  2. 高性能MySQL之【第十六章MySQL用户工具】学习记录

    接口工具:      Msql Workbench   http://www.mysql.com/products/workbench      SQLyog  http://www.webyog.c ...

  3. 第六章 MySQL 查询

    查询数据表 语法: SELECT {* | <字段列表>} [ FROM <表1>, <表2>.... [ where <表达式> ] [ group ...

  4. JAVA / MySql 编程——第六章 Mysql 创建账户的相关命令

    1.        创建普通用户: 语法: CREATE USER `user`@`host` [IDENTIFIED 'password'];   //user:用户名,host:主机名,passw ...

  5. 第六章· MySQL索引管理及执行计划

    一.索引介绍 1.什么是索引 1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容. 2)让获取的数据更有目的性,从而提高数据库检索数据的性能. 2.索引类型介绍 1)BTREE:B+树索引 ...

  6. 第十五章 MySQL日志(待续)

    ·······

  7. 第六章 MySQL函数(待续)

    ············

  8. 【MySQL函数】MySQL 5.5从零开始学第六章

    说明:本文总结自:<MySQL 5.5从零开始学>第六章 MySQL中的函数包括: 数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数和加密函数等. 函数: 表示对输入参数值 ...

  9. 《mysql必知必会》学习_第六章_20180730_欢

    第六章<过滤数据> P35 1. select prod_name,prod_price from products where prod_price=2.5; 2.select prod ...

随机推荐

  1. 如何理解低耦合AND高内聚?[转]

    1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进 ...

  2. 【oracle笔记3】多表查询

    *多表查询 分类:1.合并结果集 2.连接查询 3.子查询 *合并结果集:要求被合并的表中,列的类型和列数相同. *UNION,去除重复行.完全相同的行会被去除 *UNION ALL:不去除重复行. ...

  3. 初窥UIKit Dynamics

    原文来自这里. iOS7中可以方便的给物体添加动态物理特性,主要使用到UIDynamicAnimator,UIDynamicBehavior以及实现了UIDynamicItem协议的对象.在iOS7中 ...

  4. 洛谷P4525 【模板】自适应辛普森法1(simpson积分)

    题目描述 计算积分 结果保留至小数点后6位. 数据保证计算过程中分母不为0且积分能够收敛. 输入输出格式 输入格式: 一行,包含6个实数a,b,c,d,L,R 输出格式: 一行,积分值,保留至小数点后 ...

  5. systemd的新特性及常见的systemd unit类型分析

    systemd概述 )systemd是一种新的linux系统服务管理器,用于替换init系统,能够管理系统启动过程和系统服务,一旦启动起来,就将监管整个系统.在centos7系统中,PID1被syst ...

  6. linux 特殊命令(二)

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Membershi ...

  7. npm 取消代理 npm config delete proxy

    今天在安装electron时设置了代理,发现再npm install 安装别的总是装不上,只好取消代理. npm 取消代理 npm config delete proxy

  8. Java : Spring基础 AOP

    简单的JDK动态代理例子(JDK动态代理是用了接口实现的方式)(ICar是接口, GoogleCar是被代理对象, MyCC是处理方法的类): public class TestCar { publi ...

  9. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

  10. A1092

    可输入内容为0-9,a-z,A-Z. 输入: 第一行输入任意字符串: 第二行输入期望字符串. 输出: 如果第一行包含了所有期望字符串,输出yes和多余字符个数: 如果第一行不能完全包含期望字符串,输出 ...