MySQL的日志管理

来源:这里教程网 时间:2026-03-01 18:32:52 作者:

一、四种日志 日志存放位置:数据目录下     [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;   //显示二进制日志文件的信息,包括名字和大小               

相关推荐