zoukankan      html  css  js  c++  java
  • MySQL日志


    一、日志的作用及类型

    MySQL日志的作用

    • 排错
    • 了解MySQL运行情况

    MySQL日志的类型

    • 错误日志
    • 慢日志
    • 查询日志
    • 二进制日志

    二、错误日志

    记录用户登录和服务出错相关的信息,默认是开启的。

    可以在配置文件中指定错误日志的存放位置,确保启动MySQL服务的用户对这个目录有写权限。

    在配置文件中配置错误日志位置,使用log-error或log_error都可以

    log-error=/var/log/mysql/mysql.log
    

    如果没有指定错误日志,默认存放在MySQL的数据目录下,以主机名.err作为文件名。

    查看错误日志的详细位置:

    Charramma@(none) 11:51  mysql>show variables like 'log_error';
    +---------------+--------------------------+
    | Variable_name | Value                    |
    +---------------+--------------------------+
    | log_error     | /var/log/mysql/mysql.log |
    +---------------+--------------------------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 11:54  mysql>
    

    什么时候会写错误日志到日志文件中?

    • 登录失败
    • 启动过程出错
    • 配置文件出错

    三、慢日志

    作用:记录了执行时间超过long_query_time参数值的sql语句,可以有效的帮助我们发现实际应用中sql的性能问题,找出执行效率低下的sql语句,为数据库性能提升提供了线索。

    慢日志存放在数据目录下,名字是主机名+slow.log

    慢日志默认是关闭的。

    Charramma@(none) 15:21  mysql>show variables like 'slow_query_log';
    +----------------+-------+
    | Variable_name  | Value |
    +----------------+-------+
    | slow_query_log | OFF   |
    +----------------+-------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 15:22  mysql>
    

    查看long_query_time的值,默认为10秒

    Charramma@(none) 16:10  mysql>show variables like 'long%';
    +-----------------+-----------+
    | Variable_name   | Value     |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.01 sec)
    
    Charramma@(none) 16:10  mysql>
    

    通过修改配置文件打开慢日志。

    vim /etc/my.cof
    
    [mysqld]
    # 打开慢日志
    show_query_log = 1
    # 设定超过1秒为慢日志
    log_query_time = 1
    # 指定慢日志的存放目录
    show_query_log_file=/data/mysql/mysql_slow.log
    

    四、查询日志

    查询日志记录客户端操作的所有sql语句,包括select查询语句在内。默认关闭。

    Charramma@(none) 21:53  mysql>show variables like 'general_log';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | general_log   | OFF   |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 21:53  mysql>
    

    在配置文件中开启查询日志。

    [mysqld]
    general_log
    general_log_file=/data/mysql/mysql_ge.log
    

    默认存放在数据目录下,名字是主机名+log。

    由于查询日志纪录了所有数据库的操作,因此对于访问频繁的应用,该日志会对系统性能造成一定影响,通常建议关闭此日志。

    缺点

    • 消耗大量磁盘空间

    • 消耗CPU、内存、磁盘资源

    优点

    • 审计:会记录所有的SQL操作

    五、二进制日志(Binary Log)

    1、什么是二进制日志

    MySQL二进制日志是一个二进制文件,主要记录了数据库的改动,如建表、数据改动等,并且记录了语句发生的时间、执行市场、操作数据等其他额外信息。

    作用:

    • 数据恢复
    • 主从复制

    二进制日志默认不开启。

    Charramma@(none) 19:35  mysql>show variables like 'log_bin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin       | OFF   |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 19:36  mysql>
    

    可以在配置文件中开启二进制日志。

    [mysqld]
    # 打开二进制日志
    # 指定日志文件位置log_bin=/mysql/bin_log/mysql_binlog
    log_bin
    # 服务器的标识id
    server_id = 1
    

    现在可以查看二进制日志文件名了,如果没有开启二进制日志是查不到的。二进制日志文件存放在数据目录下,以主机名-bin.00000*为名

    Charramma@(none) 19:36  mysql>show binary logs;
    ERROR 1381 (HY000): You are not using binary logging
    
    # ****** 开启二进制日志后 *****
    
    Charramma@(none) 19:41  mysql>show variables like 'log_bin';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_bin       | ON    |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 19:41  mysql>
    
    
    Charramma@(none) 19:41  mysql>show binary logs;
    +----------------------+-----------+
    | Log_name             | File_size |
    +----------------------+-----------+
    | localhost-bin.000001 |      5755 |
    +----------------------+-----------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 19:41  mysql>
    

    查看二进制日志大小限制

    Charramma@(none) 20:02  mysql>show variables like 'max_binlog_size';
    +-----------------+------------+
    | Variable_name   | Value      |
    +-----------------+------------+
    | max_binlog_size | 1073741824 |
    +-----------------+------------+
    1 row in set (0.00 sec)
    
    Charramma@(none) 20:13  mysql>
    

    2、二进制日志操作

    • 查看当前服务器所有的二进制文件

      Charramma@(none) 19:51  mysql>show binary logs;
      +----------------------+-----------+
      | Log_name             | File_size |
      +----------------------+-----------+
      | localhost-bin.000001 |    217592 |
      +----------------------+-----------+
      1 row in set (0.00 sec)
      
      Charramma@(none) 19:52  mysql>show master logs;
      +----------------------+-----------+
      | Log_name             | File_size |
      +----------------------+-----------+
      | localhost-bin.000001 |    218475 |
      +----------------------+-----------+
      1 row in set (0.00 sec)
      
      Charramma@(none) 19:52  mysql>
      
    • 查看当前二进制日志文件状态

      最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值。

      Charramma@(none) 19:52  mysql>show master status;
      +----------------------+----------+--------------+------------------+-------------------+
      | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +----------------------+----------+--------------+------------------+-------------------+
      | localhost-bin.000001 |   241741 |              |                  |                   |
      +----------------------+----------+--------------+------------------+-------------------+
      1 row in set (0.00 sec)
      
      Charramma@(none) 19:53  mysql>
      
    • 刷新日志,产生一个新编号的二进制日志文件

      Charramma@(none) 19:53  mysql>flush logs;
      Query OK, 0 rows affected (0.00 sec)
      
      Charramma@(none) 20:01  mysql>show master logs;
      +----------------------+-----------+
      | Log_name             | File_size |
      +----------------------+-----------+
      | localhost-bin.000001 |    411106 |
      | localhost-bin.000002 |      2214 |
      +----------------------+-----------+
      2 rows in set (0.00 sec)
      
      Charramma@(none) 20:01  mysql>
      
    • 重置所有二进制日志文件

      Charramma@(none) 20:01  mysql>reset master;
      Query OK, 0 rows affected (0.06 sec)
      
      Charramma@(none) 20:02  mysql>show master logs;
      +----------------------+-----------+
      | Log_name             | File_size |
      +----------------------+-----------+
      | localhost-bin.000001 |       730 |
      +----------------------+-----------+
      1 row in set (0.00 sec)
      
      Charramma@(none) 20:02  mysql>
      

    3、二进制日志的内容

    查看二进制日志的内容

    # 查看第一个binlog文件的内容
    Charramma@(none) 20:21  mysql>show binlog events;
    
    # 查看某个特定的binlog文件的内容
    Charramma@(none) 20:21  mysql>show binlog events in 'localhost-bin.000001' limit 3;
    +----------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name             | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +----------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | localhost-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.29-log, Binlog ver: 4 |
    | localhost-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
    | localhost-bin.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
    +----------------------+-----+----------------+-----------+-------------+---------------------------------------+
    3 rows in set (0.00 sec)
    
    Charramma@(none) 20:21  mysql>
    
    • pos pos起始点
    • Event_type事件类型
    • server id 1 数据库主机的服务号;
    • end_log_pos pos结束点
    • SET 执行的sql语句

    3、二进制日志格式

    二进制日志有三种格式:

    1. Stetament格式

      基于语句的,记录操作的SQL语句。

      优点:

      • 日志文件较小
      • 便于阅读与理解
      • 包含原始SQL,方便统计和审计

      缺点:

      • 可能导致主从不一致,存在安全隐患
      • 不能复制部分系统函数
      • 不支持不确定的SQL语句

      mysql5.7以前Statement是默认的格式

    2. Row格式

      记录操作的每一行数据。

      优点:

      • 相对于Statement有更加安全的复制格式
      • 系统的特殊函数也可以复制
      • 更少的锁
      • 数据一致性高

      缺点:

      • 日志文件比较大
      • 无法看见用户执行的SQL

      mysql5.7之后,默认的格式为Row格式

    3. MIXED格式

      一种混合格式,混合使用Row和Statement格式,对DDL记录会使用Statement,对于table里的行操作会记录Row格式。如果是Innodb表,事务级别为Read committed 或者 read uncommitted日志级别只能使用Row格式。

  • 相关阅读:
    curl post请求
    c++/c字符串操作汇集
    CCClippingNode bug
    处理Google Play的相关方法
    libcurl断点下载
    c pvr转存pvr.ccz格式
    ios 设备震动
    cocos2d-x android项目引用so库编译
    cocos2d-x CCEditBox 字符不能显示完全的bug
    Android增量更新
  • 原文地址:https://www.cnblogs.com/CharrammaBlog/p/13466702.html
Copyright © 2011-2022 走看看