`
修补匠
  • 浏览: 9360 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

MySQL的日志文件

阅读更多

由于最近碰到一个日志清理的问题,所以就花时间写了这篇文章,严格来说只是学习笔记。 

 

1.通用日志文件

 

默认安装情况下不开启,即不会生成这个文件,需要手工开启,可直接在命令行中设置:set global general_log = ON。即时生效。重启MySQL服务后,会关闭,需重新启动。

 

也可在配置文件my.ini中设置:general_log=on。这样每次启动MySQL服务都会自动启动。

 

这样MySQL就会在data目录下创建一个和你计算机同名的日志文件:计算机名-PC.log。

 

以后你对MySQL做的任何操作,都会被记录到这个日志文件中。

 

2.二进制日志文件

 

默认安装情况下不开启,即不会生成这个文件,需要手工开启,在配置文件my.ini中的[mysqld]后面加入:log_bin=binary_log。这里的binary_log为二进制文件名。

 

这样MySQL就会在data目录下创建如下两个文件:binary_log.000001和binary_log.index。

 

以后对MySQL表做的任何更新,都会被记录里到这个日志文件中。

 

当在data目录下手工删除了某些二进制日志文件时,一定要同时删除binary_log.index里面的对应记录,否则mysql服务将无法启动。

 

可在命令行中通过 show binlog events in ‘binary_log.000001’查看:




也可通过mysqlbinlog命令查看,先在dos下进入data目录然后输入:mysqlbinlog binary_log.000001。

 

mysqlbinlog binary_log.000001 > Jin.txt可输出到txt文件方便查看。

 

重启MySQL后,将会在data目录下重新生成一个新的日志文件,如原来的是binary_log.000001,那么重启后会生成binary_log.000002文件,也即是每次重启后都会按文件后面的数字递增生成一个新文件。

 

flush logs命令可立即生成一个最新的二进制文件,并将后面的更新操作记录其中。但这样貌似会出现一个问题:通用日志(general_log)和慢查询日志(slow_log)将不再更新。不再更新的意思是说,这些操作被存储在内存中了,要等下次重启mysql后,才会重新写入日志中。

     

       所以在使用flush logs命令的时候需要非常小心,因为如果在执行了flush logs命令后,后面产生的通用日志(general_log)和慢查询日志(slow_log)很大的话,那么就会占用很大的内存。这个只是我的猜测,大家可以认证一下。

 

3.慢查询日志文件

 

默认安装情况下不开启,即不会生成这个文件,需要手工开启,在配置文件my.ini中的[mysqld]后面加入:

 

# 慢查询日志文件

log_slow_queries = slow_queries_log

# 记录下查询时间超过10秒的SQL

long_query_time = 10

# 表示记录下没有使用索引的查询SQL                

log-queries-not-using-indexes  

 

slow_queries_log是慢查询日志的文件名,long_query_time为查询时间(单位s),大于此时间的查询都被记录到该日志,log-queries-not-using-indexes表示没有使用索引的查询,该查询也会被记录到该日志文件下。

 

这样MySQL就会在data目录下创建如下文件:slow_queries_log。

 

以后符合上面条件的查询都会被记录到这个日志文件中。

 

4.log_output = table

 

该选项默认为log_output = file,即将日志存入文件中。可设置将日志存入表中,只需在my.ini文件[mysqld]加入log_output = table,即可将通用查询日志(general_log)以及慢查询(log_slow_queries)日志分别存入mysql数据库的general_log和slow_log表中。

 

但好像在这种模式下无法存储二进制文件。

 

5.通过日志文件进行增量备份

 

   在进行增量备份之前,首先我们需要进行一个全备份,可以使用mysqldump命令:

mysqldump -u 用户名 -p --single-transaction [数据库名|--all-databases] > 文件名.sql

 

--single-transaction的意思相当于设置会话的隔离级别为REPEATABLE-READ,即允许重复读,保证数据库的一致性(关于MySQL的隔离级别,可参考我之前写的文章:http://www.iteye.com/topic/1130108)。

举个例子,假如现在有下面几个数据库:




我们要对Jin_Liang这个数据库做一个全备份,那可以在DOS写如下命令:



 

由图可见,备份完成,我们将备份文件存储在了D盘的Jin_Liang_Backup.sql文件下:



 

打开文件可以看到,里面其实都是表的创建命令以及数据的insert语句。

 

假如我们现在清空数据库Jin_Liang里的所有表(模拟崩溃状态):



 

这时候Jin_Liang里面的数据已经全部被删除了,我们将通过Jin_Liang_Backup.sql来恢复它们,命令如图所示:



 

 

这时候通过mysql命令行客户端查看:

 


 

由图可见,表已全部恢复。

 

上面即是mysql数据库的全备份了,如果想对所有的数据库都进行备份,那么只要在上面的mysqldump命令中选择—all-databases即可。但这有一个缺点,那就是我们必须先手工创建数据库,当然我们在用mysqldump命令的时候可加入--add-drop-database选项,这样就不需要手工创建数据库了。

 

PS: 这里还有一些很有用的命令:

 

只导出一个表:

       mysqldump -u 用户名 -p 数据库名 表名> 文件名.sql

只导出数据库的表结构:

       mysqldump -u 用户名 -p -d --add-drop-table 数据库名 >文件名.sql

      -d 没有数据 --add-drop-table 在每个create语句之前增加一个

 

那下面就开始介绍如何通过二进制日志文件做增量备份。

 

首先先看下data目录下的日志文件有哪些:



 

如图所示,有四个二进制日志文件:binary_log.000001、binary_log.000002、binary_log.000003和binary_log.000004;一个错误日志文件:LilyZhang-PC.err;一个通用日志文件:LilyZhang-PC.log;一个慢查询日志文件:slow_queries.log;还有两个mysql默认的日志文件:ib_logfile0和ib_logfile1。

 

当然我们只需要二进制日志文件。

首先我们需要做flush logs操作,重新生成一个新的二进制日志文件,以便把后面的操作都记录其中:



 

然后查看data目录,可见新生成了binary_log.000005二进制日志文件。



 

这时候我们更新一条记录:



 

查看binary_log.000005文件:



 

由图可见,该更新操作已被记录到binary_log.000005文件中。

 

我们把binary_log.000005导出到txt文件方便查看:



 

打开binary_log.000005.txt文件,如图所示:


 

里面记录了前面的更新操作。所以我们只要根据该操作反向操作即可恢复到之前的状态。

 

从binary_log.000005.txt文件的内容上看,里面记录的其实是重做日志,也即是说当数据库崩溃时,我们可以根据其来重新提交【之前所做的更新】,当然前提是我们做了全备份,并且通过这个全备份文件恢复了备份前的数据,以保证查询条件存在。

 

而增量备份的意思是,我们在做了一次全备份以后,后面我们只要备份那些新更新的数据即可。而二进制日志文件中,保存的即是后面的更新操作,我们只要将其取出重执行一遍,即可恢复到之前的状态。所以,我们在做了一次全备份后,后面的备份我们只要备份二进制日志文件即可。

 

现在我们来模仿通过二进制日志文件如何恢复数据库。首先我们将数据库Jin_Liang删除,以模仿崩溃状态:



 

然后重建数据库:



 

通过全备份恢复:



 

这时候可以看到表已恢复:



 

但查看classes表,此时的数据不是最新的,因为我们之前有做更新:

update classes set class_name = 'Jin' where class_name = 'Jin_Liang'

此时我们就可以通过二进制日志文件来重做这个操作,假设我们前面在做增量备份时,将binary_log.000005备份到了old_logs目录下,那么只要做如下操作即可恢复:



 

此时查看classes表:



 

class_name中Jin_Liang已更新为Jin。

 

  • 大小: 13.3 KB
  • 大小: 15.1 KB
  • 大小: 4.7 KB
  • 大小: 10 KB
  • 大小: 7.5 KB
  • 大小: 13 KB
  • 大小: 37.8 KB
  • 大小: 4.8 KB
  • 大小: 42.1 KB
  • 大小: 36.8 KB
  • 大小: 46.1 KB
  • 大小: 5.2 KB
  • 大小: 10.7 KB
  • 大小: 5.1 KB
  • 大小: 5.6 KB
  • 大小: 88.8 KB
  • 大小: 16.4 KB
  • 大小: 7.3 KB
  • 大小: 21.1 KB
  • 大小: 51.4 KB
分享到:
评论
1 楼 Youkes 2013-05-23  
感谢分享,支持原创

相关推荐

    mysql日志文件的使用.docx

    MySQL日志文件在数据库管理中扮演着至关重要的角色,它们记录了数据库的各种操作,帮助管理员监控、诊断问题以及实现数据恢复。以下是对MySQL日志类型的详细解释和使用方法: 1. **错误日志(The error log)**:这...

    mysql日志文件的使用.pdf

    MySQL日志文件是数据库管理的重要组成部分,它们记录了MySQL服务器的各种操作,有助于故障排查、数据恢复和性能优化。本文将详细介绍MySQL的日志类型、配置方法以及如何查看和使用这些日志。 1. MySQL日志类型: -...

    使用Kettle获取MySQL日志文件名称

    使用Kettle获取MySQL日志文件名称

    Mysql日志文件和日志类型介绍

    MySQL日志文件是数据库管理系统中不可或缺的一部分,它们记录了数据库操作的详细信息,对于故障排查、数据恢复和性能优化都至关重要。以下是对不同类型的MySQL日志文件的详细说明: 1. 错误日志(Error Log):错误...

    日志文件解析MySQL版

    在这个“日志文件解析MySQL版”的资源包中,提供了JAVA源代码、可执行jar文件、日志文件样例以及MySQL建表脚本,这将帮助我们构建一个完整的日志分析系统,以下将详细介绍其中涉及的知识点。 首先,**JAVA日志解析*...

    mysql日志文件在哪 如何修改MySQL日志文件位置

    MySQL日志文件是数据库系统用来记录各种操作的重要组件,它对于数据库的监控、故障排查以及数据恢复至关重要。MySQL中的日志文件通常包含错误日志、查询日志、二进制日志等多种类型。 1. **错误日志**(Error Log)...

    MySQL日志分析(包括工具)

    ### MySQL日志分析详解 #### 一、引言 MySQL作为一种广泛使用的开源关系型数据库管理系统,在维护数据库稳定性与性能方面发挥着至关重要的作用。...希望本文能够帮助读者更好地理解和运用MySQL日志文件。

    MySQL日志文件详解

    MySQL日志文件是数据库管理的关键元素,它们提供了对数据库操作的详细记录,有助于故障排查、性能优化和数据恢复。MySQL支持多种类型的日志文件,包括: 1. **错误日志 (Error Log)**:错误日志记录了MySQL服务器...

    MySQL数据库日志管理.ppt

    删除通用查询日志可以直接删除日志文件,或者重新建立新的通用查询日志文件。 慢查询日志 慢查询日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。启动和设置慢查询日志可以通过配置文件...

    阿里开发的,基于mysql日志消费客户端.zip

    基于 MySQL 日志消费客户端是一种用于处理 MySQL 数据库的日志文件的软件。它可以帮助用户实时监控数据库的状态,自动捕获和处理数据库的异常情况,从而提高数据库的可靠性和稳定性。 MySQL 日志消费客户端的主要...

    mysql删除日志方法.docx

    本文将详细介绍四种清理MySQL日志的方法,并提供具体的实施步骤和注意事项。 #### 方法一:使用 PURGE MASTER LOGS 命令 **语法**: ```sql PURGE {BINARY | MASTER} LOGS {TO 'log_name' | BEFORE datetime_expr}...

    mysql日志.txt

    mysql log 学习

    MySQL DBA之精通日志管理

    #### 一、MySQL日志文件类型 MySQL提供了多种日志文件来帮助DBA监控系统运行状态以及进行故障排除,具体包括以下几种: 1. **错误日志(Error Log)**:记录MySQL服务器启动、运行或关闭过程中发生的任何问题,是...

    MySQL备份与恢复实战(PDF版)

    包含下列主题:mysql 日志文件,使用mysqld 加相应选项来启用某种日志。Mysql完全备份及恢复:mysqldump 对MyISAM 或InnoDB 完全备份,mysqlhotcopy 对MyISAM 完全备份。增量备份:使用二进制日志增量备份,使用...

    Centos7安装mysql8.0压缩包.docx

    使用cat命令查看mysql日志文件,获取初始密码。 配置mysql服务 创建mysqld服务文件,并配置mysql服务的启动项,包括端口号、数据目录、日志文件等。使用systemctl命令重新加载服务配置文件。 创建mysql命令软链接...

Global site tag (gtag.js) - Google Analytics