下面假定2个场景:

场景1:主从架构,没有延迟,某DBA误操作:drop database 【复制+快照:在线备份】
场景2:存在不确定性或者风险性较大的操作,如升级测试,大表变更【啥事都在快照上折腾,不行大不了就将之删除】

场景2比较简单,随便在新建的一个快照上折腾,搞砸就把快照删除,再新建一个,2个字:随便玩
下面我们对场景1进行模拟

恢复方法:
① 恢复备库上的快照
② 根据binlog执行point-in-time恢复

先为备库创建快照

[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  vg     4   1   0 wz--n- 3.81G 1.81G
[root@localhost ~]# lvs
  LV    VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert
  mysql vg   -wi-ao 2.00G    
  
[root@localhost ~]# lvcreate --size 1G --snapshot --name backup_mysql /dev/vg/mysql
  Logical volume "backup_mysql" created
[root@localhost ~]# lvs
  LV           VG   Attr   LSize Origin Snap%  Move Log Copy%  Convert
  backup_mysql vg   swi-a- 1.00G mysql    0.00                        
  mysql        vg   owi-ao 2.00G

[root@localhost ~]# mount /dev/vg/backup_mysql  /mnt/backup
[root@localhost ~]# cd /mnt/backup/
[root@localhost backup]# ls
lost+found  mysql
[root@localhost backup]# tar -jcv -f /mnt/snapshot/mysql.tar.bz2 *
[root@localhost ~]# lvremove --force /dev/vg/backup_mysql 
  Logical volume "backup_mysql" successfully removed

这里为什么要先备份快照再还原呢?
其一,昂贵的IO,因为磁头要在快照区和系统区来回跑
其二,快照区空间不足,因为是COW原理

在 2013-10-12 9:57 某位无经验DBA错误地执行了drop database snapshots:

在备库上确认查看:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
可见库已经被删除了

同时在主库或者备库查看当前的二进制日志坐标并记录下来

[mysql@localhost mysql]$ mysqladmin -uroot -poracle shutdown
131012 09:59:36 mysqld_safe mysqld from pid file /mnt/lvm/mysql/data/localhost.localdomain.pid ended
[1]+  Done                    mysqld_safe

[root@localhost ~]# umount /mnt/backup
[root@localhost ~]# lvremove --force /dev/vg/backup_mysql 
  Logical volume "backup_mysql" successfully removed

[root@localhost ~]# umount /mnt/lvm                                 
[root@localhost ~]# mkfs -t ext3 /dev/vg/mysql
[root@localhost ~]# mount /dev/vg/mysql /mnt/lvm
[root@localhost ~]# tar -jxv -f /mnt/snapshot/mysql.tar.bz2  -C /mnt/lvm
[mysql@localhost ~]$ mysqld_safe &

通过binlog执行point-in-time恢复

[mysql@localhost ~]$ mysqlbinlog --stop-datetime="2013-10-12 10:9:56" /mnt/lvm/mysql/data/mysql-bin.000008 | mysql -uroot -poracle

确认数据是否恢复:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| snapshots          |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use snapshots;
Database changed
mysql> show tables;
+---------------------+
| Tables_in_snapshots |
+---------------------+
| t                   |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from t;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

到此,整个简单的测试就算完成了

这种复制+快照的备份架构可以实现在线实时的备份,个人感觉是个不错的备份解决方案

By 迦夜
2013-10-12
Care and diligence bring luck

MySQL 复制+快照恢复误删除操作实验测试的更多相关文章

  1. mysql的备份恢复等操作

    备份数据库 shell> mysqldump -h host -u root -p dbname >dbname_backup.sql 恢复数据库 shell> mysqladmin ...

  2. 深入MySQL复制(一)

    本文非常详细地介绍MySQL复制相关的内容,包括基本概念.复制原理.如何配置不同类型的复制(传统复制)等等.在此文章之后,还有几篇文章分别介绍GTID复制.半同步复制.实现MySQL的动静分离,以及M ...

  3. 【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)

    关键词:mysql复制(异步复制),mysql异步复制 核心原理: mysql 复制流程原理 一个事务在 mysql异步复制中的流程与生命周期 一个事务,在传统半同步的复制流程 #mysql主从基本实 ...

  4. linux 通过scp 复制备份恢复mysql数据表

    最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下.折磨了一个晚上终于算是搞定了.因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是 ...

  5. MySQL binlog 的恢复操作

     测试出有个问题:mysqlbinlog 不加任何参数 恢复整个binlog 日志文件发现里面有这个操作 SET @@SESSION.GTID_NEXT 的操作,  如果需要恢复文件的时候就需要把他过 ...

  6. Mysql使用binlog恢复数据解决误操作问题的两种方法

    为保证没有其他参数配置影响,重新安装配置了一台最小化安装的CentOS7虚拟机 1. 基础知识
 安装mysql5.6数据库Mysql binlog初步理解 2. 配置mysql 开启binlog.修 ...

  7. 使用MySQL自身复制来恢复binlog

    如果需要恢复的二进制日志较多,较复杂,强烈建议使用MySQL自身复制来恢复binlog,而不要使用mysqlbinlog. 目录 [hide] 1. 如何操作 1.1 将binlog作为relay l ...

  8. mysql同步复制异常的常见操作-传统复制方式

    mysql同步复制异常的常见操作-传统复制方式 一.传统复制方式是基于非gtid的,常见的错误有1032和1062 1032是主键冲突,1062是从库中没有找到对应的记录. 可以查看出现错误的binl ...

  9. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

随机推荐

  1. 保护模式下pmtest1.asm的理解

    整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编 ...

  2. Android java.net.SocketException四大异常解决方案

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  3. 微小说《tree》

    自己一直是一个矛盾纠结的人,计算机专业,却喜欢画画,偶尔会写些短文,寓言,或者酸酸的情诗.. 废话不多说,各位看官有兴趣便随意看看,若有些于共鸣,便共勉之. 正文 两株幼苗从土壤中破土而出,一颗天生强 ...

  4. Linux内核中流量控制

    linux内核中提供了流量控制的相关处理功能,相关代码在net/sched目录下:而应用层上的控制是通过iproute2软件包中的tc来实现, tc和sched的关系就好象iptables和netfi ...

  5. 【原创】FPGA开发手记(三) PS/2键盘

    以下内容均以Xilinx的Nexys3作为开发板   1.PS/2键盘简介 虽然Nexys3开发板是利用USB接口搭载键盘,但是其原理与PS/2键盘完全相同,现在就仅以PS/2键盘为例讲解如何将键盘搭 ...

  6. tlplayer for wince 版本正式商用

    开始的时候tlplayer遇到一些问题,后来经过一些简单优化后,可以满足商用条件. 支持http,mms,rtsp等网络协议,支持内存流播放.需要定制或者需要支持hls,rtmp,m3u8等协议的,请 ...

  7. 函数 flst_get_first

    /********************************************************************//** Gets list first node addre ...

  8. Native Fullscreen JavaScript API (plus jQuery plugin)

    http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ HTML5 <video> is gre ...

  9. SharePoint 2010 PowerShell 系列 之 备份、还原、部署 .WSP

    转:http://www.cnblogs.com/Fengger/archive/2012/08/24/2654093.html PowerShell系列目录 最近在部署测试环境,就顺便把PowerS ...

  10. Setting Up the ADT Bundle

    Setting Up the ADT Bundle The ADT Bundle provides everything you need to start developing apps, incl ...