ITPub博客

首页 > 数据库 > MySQL > MySQL的日志管理

MySQL的日志管理

原创 MySQL 作者:T1YSL 时间:2025-08-13 16:38:26 0 删除 编辑

一、四种日志

日志存放位置:数据目录下

    [root@s200 ~]# cd /data/mysql/


1、错误日志:记录mysql服务器的启动、运行及关闭过程,默认以.err结尾

    mysql> show variables like 'log_error';

        +---------------+------------------------------------+

        | Variable_name | Value                              |

        +---------------+------------------------------------+

        | log_error     | /data/mysql/mysqlerror.err |

        +---------------+------------------------------------+

2、二进制日志***

    记录用户对数据库所做的所有的ddl和dml操作,不会记录查询语句,对数据的灾难恢复有至关重要的作用。

        ddl:create、alter、drop、truncate

        dml:insert、update、delete

        二进制日志作用:数据恢复、AB复制

       /data/mysql/mysql-bin.XXXXXX

3、通用查询日志:记录所有对数据库的请求信息(包括登录、查询等),默认不开启

    日志量较大、占用磁盘空间,一般不开启

     默认名字:主机名.log

4、慢查询日志:记录的是查询时间超过指定时间的查询语句,一般用于优化查询

    默认也是不开启的


二、开启各种日志,修改配置文件

1、开启通用查询日志,指定日志文件名

  在mysqld段添加如下行:

    log=general_select_log  //等号右侧的日志文件名字自定义

  [root@s200 mysql]# /etc/init.d/mysqld restart

  [root@s200 mysql]# ls /data/mysql/general_select_log 

  验证:在mysql>里面执行一些查询语句,看该文件是否有相应内容。

2、开启慢查询日志,指定日志文件名,设置超时时间

  在mysqld段添加如下行:

    log-slow-queries=slow_log  //开启慢查询日志,规定日志文件的名字

    long_query_time=5       //设置慢查询超时时间

  [root@s200 mysql]# /etc/init.d/mysqld restart

  [root@s200 mysql]# ls /data/mysql/slow_log

  mysql> select sleep(6);     //执行一个查询超过5秒的操作

  查看slow_log是否有相关记录。

3、错误日志,修改前缀名

  在mysqld段添加如下行:

    log-error=errorlog     //日志文件名变为errorlog.err

  [root@s200 mysql]# /etc/init.d/mysqld restart

  [root@s200 mysql]# ls /data/mysql/errorlog.err

4、开启二进制日志  

    log-bin=mysql-bin   //开启二进制日志,原来有该行

    log-bin-index=mysql-bin.index  //后添加的,一般不改

 

三、二进制日志的查看  mysqlbinlog

[root@s200 mysql]# mysqlbinlog mysql-bin.000014

    # at 107    //事件发生的位置信息

    #140826  9:54:36  //事件发生的时间信息

 [root@s200 mysql]# mysqlbinlog mysql-bin.000014 | less      


四、如何使用二进制日志进行数据恢复?

    假设凌晨2点有完全备份,早上9点数据库出现问题。

    完全恢复: 先用全备将数据恢复到2点;剩余的使用二进制日志恢复到9点。

    

    1、根据时间点进行恢复

        mysql> use up2;

        mysql> create table t1 (id int);

        mysql> insert into t1 values(1);

        mysql> insert into t1 values(2);

        mysql> insert into t1 values(3);

        mysql> insert into t1 values(4);

        mysql> delete from t1 where id=3;

        mysql> delete from t1 where id=4;

        mysql> select * from t1;

            +------+

            | id   |

            +------+

            |    1 |

            |    2 |

            +------+

            2 rows in set (0.01 sec)

        10:18:56

        10:18:59

        [root@s200 mysql]# mysqlbinlog --start-datetime='2024-08-26 10:18:56' --stop-datetime='2024-08-26 10:45:41' mysql-bin.000016  //找对时间段

        [root@s200 mysql]# mysqlbinlog --start-datetime='2024-08-26 10:18:56' --stop-datetime='2024-08-26 10:45:41' mysql-bin.000016 | mysql -uroot -p

Enter password:      //恢复的操作

 

    2、根据位置点进行恢复

        mysql> drop table t1;

        [root@s200 mysql]# mysqlbinlog --start-position=272 --stop-position=1078  mysql-bin.000016   //找起始和结束位置点

        [root@s200 mysql]# mysqlbinlog --start-position=272 --stop-position=1078  mysql-bin.000016| mysql -uroot -p   //向表中恢复数据

            Enter password:


五、对日志的管理

   删除日志   不要轻易删除

        1)删除某个日志文件之前的所有日志

            mysql> purge master logs to 'mysql-bin.000008';  //删除mysql-bin.000008以前的日志(不包含8)

        2)删除多少天以前的日志文件

            mysql> purge master logs before date_sub(current_date,interval 1 day);

       3)重置二进制日志

            mysql> reset master;  //从000001开始重新计数

       4)手动生成新的二进制日志文件

            mysql> flush logs;

    查看日志信息

        mysql> show master logs;   //显示二进制日志文件的信息,包括名字和大小        

  

 

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-3093375/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: MySQL的主从复制
请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160684