mysql增量备份还原详解

简介: <p><br></p> <p><span style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"><span style="font-size:24px"><a target="_blank" href="http://blog.csdn.net/jesseyoung/article
+关注继续查看


1 简介
    基于binlog的恢复需要建立在全量备份恢复基础上。使用mysqldump的全量备份的方法在我前面的文章里有详细介绍,可以参考: http://blog.csdn.net/jesseyoung/article/details/41078947

    我们可以将增量的binlog备份下来,用来恢复增量数据。

2 还原增量binlog的方法
    2.1 时间点的恢复建立在一下规则的基础上:

    1 mysql服务器需要开启二进制日志--log-bin
    查看所有binlog文件

[plain] view plain copy
  1. mysql> SHOW BINARY LOGS;  

    查看当前binlog文件信息(包含文件名,当前位置等)
[sql] view plain copy
  1. mysql> SHOW MASTER STATUS;  

    

2 mysqlbinlog工具将binary log文件由二进制转换为可读的文本文件,可以选择基于时间或位置的事件。
3 从binary log文件中执行事件会导致数据的修改,表示要重做数据。命令为:

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog binlog_files | mysql -u root -p  
    4 查看binlog的时间及位置信息我们可以讲binlog内容输出到终端或文本文件
[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog binlog_files | more  
  2. [root@localhost /]# mysqlbinlog binlog_files > tmpfile  
    5 将二进制日志输出到文件非常有用,比如我们想要删除某些我们不想执行的语句。
    通过文本文件导入到数据库
[sql] view plain copy
  1. [root@localhost /]# mysql -u root -p < tmpfile  
    2.2 多个binlog log日志的还原最好将所有文件使用一个连接完成,如果使用不同连接的话有时会导致不安全
    例如:
[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!  
  2. [root@localhost /]# mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!  
    如果第一个日志包含创建临时表语句CREATE TEMPORARY TABLE,第二个日志要使用该临时表,第一个导入binlog日志的进程退出后临时表会被删除,执行第二个日志文件要使用临时表时会因找不到而报 “unknown table.”
    


   建议的方法:
    方法1:
    所有二进制文件放在单个连接里

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p  
     

    方法2:
    将所有二进制文件写在一个文件里执行

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog binlog.000001 >  /tmp/statements.sql  
  2. [root@localhost /]# mysqlbinlog binlog.000002 >> /tmp/statements.sql  
  3. [root@localhost /]# mysql -u root -p -e "source /tmp/statements.sql"  
    使用方法二如果二进制文件里包含GTID信息需要过滤掉
[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog --skip-gtids binlog.000001 >  /tmp/dump.sql  
  2. [root@localhost /]# mysqlbinlog --skip-gtids binlog.000002 >> /tmp/dump.sql  
  3. [root@localhost /]# mysql -u root -p -e "source /tmp/dump.sql"  


3 通过时间点或位置点的恢复


    如果我们要跳过某个时间段或位置段,需要指定起止时间或位置信息
    

3.1 通过事件的时间来恢复


    我们可以通过参数--start-datetime 和 --stop-datetime指定恢复binlog日志的起止时间点,时间使用DATETIME格式。
    比如在时间点2005-04-20 10:00:00我们删除掉一个库,我们要恢复该时间点前的所有日志

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog --stop-datetime="2005-04-20 9:59:59" /usr/local/mysql/data/binlog.123456 | mysql -u root -p  
    我们可能几个小时后才发现该错误,后面又有一系列的增删查改等操作,我们还需要恢复后续的binlog,我们可以指定起始时间

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog --start-datetime="2005-04-20 10:01:00" /usr/local/mysql/data/binlog.123456 | mysql -u root -p  

    通过该种方法恢复我们需要通过查看binlog日志知道发生误操作的确切时间点,查看日志我们可以先将日志输出到文本里

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog /usr/local/mysql/data/binlog.123456 > /tmp/mysql_restore.sql  
   

 3.2 通过事件的位置来恢复


    我们可以通过参数--start-position 和 --stop-position指定恢复binlog日志的起止位置点,通过位置的恢复需要我们有更加精细的操作,例如在某个时间点我们执行了错误的语句,且这个时间点前后都有大并发操作,要确定破坏性sql的时间点,我们可以先导出大致的时间段的日志到文件以缩小查找范围,再去分析和确定

[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog --start-datetime="2005-04-20 9:55:00"  --stop-datetime="2005-04-20 10:05:00" /usr/local/mysql/data/binlog.123456 > /tmp/mysql_restore.sql  
    确定好需要跳过的位置之后,我们就可以进行恢复了
[sql] view plain copy
  1. [root@localhost /]# mysqlbinlog --stop-position=368312 /usr/local/mysql/data/binlog.123456 | mysql -u root -p  
  2. [root@localhost /]# mysqlbinlog --start-position=368315 /usr/local/mysql/data/binlog.123456 | mysql -u root -p  

    注:mysqlbinlog工具的输出会在每条sql语句前增加 SET TIMESTAMP语句,恢复的数据及mysql日志反映当前时间。


参考:

http://blog.csdn.net/JesseYoung/article/details/41211841

http://cwtea.blog.51cto.com/4500217/1259509


总结

Mysql数据库会以二进制形式,自动把用户对mysql数据库的操作,记录到备份文件中。

当用户希望恢复的时候,可以使用备份文件,来进行相应的恢复。

备份文件中会记录创建表的语句、删除表的语句、insert语句、delect语句、update语句等,而不会记录select语句。

增量备份记录的内容包括:

(1)操作语句本身。

(2)操作的时间。

(3)操作的位置。





相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
SQL 关系型数据库 MySQL
MySQL数据库对象与数据备份和还原详解(下)
MySQL数据库对象与数据备份和还原详解(下)
10 0
|
10天前
|
存储 关系型数据库 MySQL
MySQL数据库对象与数据备份和还原详解(上)
MySQL数据库对象与数据备份和还原详解(上)
6 1
|
18天前
|
Java 关系型数据库 数据库连接
mysql数据库还原与Mybatis的逆向工程
mysql数据库还原与Mybatis的逆向工程
17 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql 备份和还原
Mysql 备份和还原
|
3月前
|
SQL 存储 移动开发
史上最简单的 MySQL 教程(二十六)「数据备份与还原」
史上最简单的 MySQL 教程(二十六)「数据备份与还原」
112 0
|
7月前
|
安全 关系型数据库 MySQL
mysql数据备份与还原
mysql数据备份与还原
82 0
|
7月前
|
安全 关系型数据库 MySQL
mysql数据备份与还原1
mysql数据备份与还原1
77 0
|
7月前
|
SQL 存储 关系型数据库
[ MySQL ] 使用 MySQL Workbentch 进行MySQL数据库备份 / 还原(Part 3:备份.sql文件方式)
本文主要讲解如何用 MySQL Workbentch 进行MySQL备份和恢复数据库。 本文主要大纲为:使用Workbentch备份.sql文件的方式进行备份和还原,其中包括还原自身数据库和还原到其他目标库。
143 0
[ MySQL ] 使用 MySQL Workbentch 进行MySQL数据库备份 / 还原(Part 3:备份.sql文件方式)
|
7月前
|
SQL 关系型数据库 MySQL
[ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 2:备份.sql文件方式)
本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库。 本文主要大纲为:使用Navicat备份.sql文件的方式进行备份和还原,其中包括还原自身数据库和还原到其他目标库。
515 0
[ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 2:备份.sql文件方式)
|
7月前
|
SQL 关系型数据库 MySQL
[ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 1:备份.nb3文件方式)
本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库。 本文主要大纲为:使用Navicat备份工具方式进行备份和还原,其中包括还原自身数据库和还原到其他目标库。
525 0
[ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 1:备份.nb3文件方式)
推荐文章
更多
推荐镜像
更多