续 lvm-snapshot:基于LVM快照的备份之准备工作

Attention,Please! 重头戏开始啦

3.基于LVM快照的备份
lvm-snapshot:基于LVM快照的备份
(1)事务日志跟数据文件必须在同一个卷上;
(2)创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后释放锁;
(3)请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行);
备份步骤:
3.1 请求全局锁,并滚动日志
MariaDB [hellodb]> FLUSH TABLES WITH READ LOCK;
MariaDB [hellodb]> FLUSH LOGS;
3.2 查看并记录二进制日志文件及位置标记(手动进行);
MariaDB [hellodb]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      365 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
此时不要退出Mysql,一旦退出,就会我们手动施加的锁,就会自动释放
记录二进制日志文件及位置标记至指定文件
# mkdir /backups
# mysql -e 'show master status' >/backups/binlog.pos
3.3 创建快照卷(-L,指定快照卷大小;-n,指定快照卷名称;-p,指定快照卷的属性)
# lvcreate -L 100M -s -n mydata-snap -p r /dev/myvg/mydata
查看lvm卷使用使用情况
[root@www ~]# lvs
LV          VG   Attr      LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
mydata      myvg owi-aos--  10.00g                                            
mydata-snap myvg sri-a-s-- 100.00m      mydata   0.01                          
root        vg0  -wi-ao---  20.00g                                            
swap        vg0  -wi-ao---   2.00g                                            
usr         vg0  -wi-ao---  10.00g                                            
var         vg0  -wi-ao---  20.00g  
3.4 释放全局锁
MariaDB [hellodb]> UNLOCK TABLES;
注:快照创建完毕,可在之前尚未退出MariaDB的终端执行解锁操作
3.5 挂载快照卷并备份
(1)将快照卷以只读方式挂载至/mnt目录
[root@www ~]# mount -o ro /dev/myvg/mydata-snap /mnt/
(2)查看快照卷挂载是否成功(即查看挂载点下是否有我们之前备份的数据)
[root@www ~]# cd /mnt/
[root@www mnt]# ls
binlogs  data
[root@www mnt]# cd data/
[root@www data]# ls
aria_log.00000001  ibdata1      multi-master.info   test
aria_log_control   ib_logfile0  mysql               www.ja.com.err
hellodb            ib_logfile1  performance_schema  www.ja.com.pid
细心的你应该注意到了,前面我们已经释放了全局锁,所以其他的用户是可以执行写入的操作了,因此
此处我们模拟的是,在我们完整备份以后,又有用户执行了写入操作实验环境,然而不幸的是,我们在此处导入数据没多久,就反了些很"2"的错误:一不小心关掉了数据库服务,并且误删除了数据/mydata/data/下的所有数据
3.6 导入新数据,模拟用户的写操作
MariaDB [mydb]> source /root/mydb.sql;

3.7 备份快照中的数据至指定位置

# cp -a /mnt/data/ /backups/data-$(date +%F)

3.8 备份完成之后,删除快照卷
# umount /mnt/   卸载快照卷
# lvremove /dev/myvg/mydata-snap   移除快照卷
恢复:二进制日志一定要保存好,否则很难做到即时点还原
模拟数据库损坏
4.不小心停掉了数据库,并且删除了数据目录下的所有文件
[root@www ~]# service mysqld stop
Shutting down MySQL...                                     [  OK  ]
[root@www ~]# rm -rf /mydata/data/*
还好二进制日志尚在,不然没法做即时点还原(二进制日志文件很重要,要常备份)
[root@www ~]# ls /mydata/binlogs/
mysql-bin.000001  mysql-bin.000003  mysql-bin.000005  mysql-bin.state
mysql-bin.000002  mysql-bin.000004  mysql-bin.index
数据目录中的数据被误删除后,数据目录空空如也
[root@www ~]# ls /mydata/data/
还原数据目录下的所有数据,-a保持用户属主属组等属性信息不变
[root@www ~]# cp -a /backups/data-2014-04-12/*  /mydata/data/
[root@www ~]# cd /mydata/data/
查看数据目录下的数据的属主属组是否都是mysql,若不是,就自行修改
[root@www data]# ll  
total 110636
-rw-rw---- 1 mysql mysql    16384 Apr 12 22:33 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Apr 12 22:33 aria_log_control
drwx------ 2 mysql mysql     4096 Apr 12 22:38 hellodb
-rw-rw---- 1 mysql mysql 12582912 Apr 12 22:34 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Apr 12 22:34 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Apr 12 22:32 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Apr 12 22:34 multi-master.info
drwx------ 2 mysql mysql     4096 Apr 12 22:33 mysql
drwx------ 2 mysql mysql     4096 Apr 12 22:33 performance_schema
drwx------ 2 mysql mysql     4096 Apr 12 22:25 test
-rw-r----- 1 mysql root      3660 Apr 12 22:34 www.ja.com.err
-rw-rw---- 1 mysql mysql        5 Apr 12 22:34 www.ja.com.pid
确认数据目录权限正确的情况下,就可以启动mysql了
[root@www data]# service mysqld start
在数据目录下查看数据文件是否都已恢复
[root@www data]# ls
aria_log.00000001  ibdata1      multi-master.info   test
aria_log_control   ib_logfile0  mysql               www.ja.com.err
hellodb            ib_logfile1  performance_schema  www.ja.com.pid
在数据中查看数据文件是否都已恢复
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.01 sec)
此时,完整备份已成功恢复,但是我们模拟用户写操作时倒入的mydb.sql文件,生成的mydb数据库,及其中数据表还没恢复
由于该写入操作出现在我们完整备份之后,所以我们的完整备份中没有这个数据库和其中的数据,所以此时我们只能借助于二进制日志文件了。我们上次完整备份时的二进制日志文件是mysql-bin.000005,在我们做了完整备份恢复之后,重启了sql服务,
于是生成了mysql-bin.000006二进制日志文件。
查看二进制日志文件
[root@www data]# ls /mydata/binlogs/
mysql-bin.000001  mysql-bin.000003  mysql-bin.000005  mysql-bin.index
mysql-bin.000002  mysql-bin.000004  mysql-bin.000006
查看我们完整备份之前保存的二进制日志mysql-bin.000005的信息
[root@www data]# cat /backups/binlog.pos
FilePositionBinlog_Do_DBBinlog_Ignore_DB
mysql-bin.000005365
查看二进制日志文件mysql-bin.000005的具体内容
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005
# at 365
#140412 22:55:48 server id 1  end_log_pos 403GTID 0-1-2176
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=2176*//*!*/;
......省略一些不甚重要的信息
# at 4857
#140412 22:55:51 server id 1  end_log_pos 4895GTID 0-1-2200
/*!100001 SET @@session.gtid_seq_no=2200*//*!*/;
# at 4895
#140412 22:55:51 server id 1  end_log_pos 5009Querythread_id=4exec_time=0error_code=0
SET TIMESTAMP=1397314551/*!*/;
DROP TABLE IF EXISTS `t5` /* generated by server */
/*!*/;
# at 5009
#140412 22:55:51 server id 1  end_log_pos 5047GTID 0-1-2201
/*!100001 SET @@session.gtid_seq_no=2201*//*!*/;
# at 5047
#140412 22:55:51 server id 1  end_log_pos 5245Querythread_id=4exec_time=0error_code=0
SET TIMESTAMP=1397314551/*!*/;
CREATE TABLE `t5` (
`ID` int(10) unsigned NOT NULL DEFAULT '0',
`Name` char(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!*/;
# at 5245
#140412 22:55:51 server id 1  end_log_pos 5283GTID 0-1-2202
借助二进制日志文件实现增量备份的恢复
现在我们需要将这些二进制日志信息导入到mysql服务器
法1:
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005 >/tmp/incr.sql
# mysql </tmp/incr.sql 或 mysql> source /tmp/incr.sql
法2:
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005 | mysql
在数据库查看mydb数据库是否已经恢复了
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.01 sec)
我们可以看到mydb数据库已成功恢复。
注:当数据库灾难恢复之后,我们要做的第一件事就是对当前数据库做一次完整备份,以备不时之需,有备无患
mylvbackup: perl脚本,快速基于lvm备份mysql

转载于:https://blog.51cto.com/1757513075/1405848

lvm-snapshot:基于LVM快照的备份相关推荐

  1. lvm 逻辑卷的快照及备份 还原

    为什么80%的码农都做不了架构师?>>>    1. LVM的快照概述 LVM机制还提供了对LV做快照的功能,以此来获得文件系统的状态一致性备份.LVM采用写时复制技术(Copy-O ...

  2. LVM创建,缩减及快照备份

    管理逻辑卷工具:LVM 逻辑卷:灵活可动态存储的一种逻辑上的存储 最底层需要通过工具变成"物理卷":存储设备,Raid ,分区等 VG:(1)底层设备容量之和.(2)PE大小*数量 ...

  3. linux lvm snapshot lvm 快照 逻辑卷 快照

    lvm快照有多种实现方法,其中一种是COW(Copy-On-Write),不用停止服务或将逻辑卷设为只读就可以进行备份,当一个 snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据, ...

  4. mysql 高效备份_Mysql高性能备份方案解决数据不间断访问(LVM快照方式备份)

    Mysql高性能备份方案解决数据不间断访问(LVM快照方式备份) mysql LVM快照备份特点: 1.在大多数情况下,这种方式几乎算得上是热备.它无需关闭服务,只需要设置只读或者类似这样的限制. 2 ...

  5. linux增加/根目录的磁盘空间(基于LVM)

    linux增加/根目录的磁盘空间(基于LVM) 问题引出: 在测试过程中替换so文件,报磁盘空间不足的错误 [root@UF2 ~]# df -h Filesystem            Size ...

  6. oracle在linux上使用裸设备,在linux下构建基于LVM的裸设备数据库

    我的环境很简单,vm workstation下面装了一个linux 4,oracle 10g版本,由于不属于trouble shooting和performance tuning 而只是搭建一套裸设备 ...

  7. 在OpenStack中调优基于LVM的Cinder卷的IO性能

    要调优基于LVM的Cinder卷的IO性能,你可以做以下几件事: --使用高性能磁盘类型:Cinder卷的性能将取决于使用的磁盘类型.固态硬盘(SSD)通常比硬盘(HDD)更快,因此将固态硬盘用于Ci ...

  8. 基于LVM进行磁盘分区

    基于LVM进行磁盘分区 1.添加一个 swap 分区 在您的系统中添加一个新的 swap 分区,并满足以下要求: swap 分区容量为 512 MiB4G 不要移除或者修改其他已经存在于您的系统中的 ...

  9. MySQL基于mysqldump及lvmsnapshot备份恢复

    一.备份对象 数据 配置文件 代码:存储过程,存储函数,触发器 跟复制相关的配置 二进制日志文件 二.备份工具 mysqldump:逻辑备份工具 InnoDB热备.MyISAM温备.Aria温备 备份 ...

最新文章

  1. 5G NGC — 关键技术 — 网络切片 — 切片的选择
  2. 【Python基础】必知必会的8个Python列表技巧
  3. 计算机接口控制采集时序图,自动站实时数据质量控制
  4. LeetCode450题—— 删除二叉搜索树中的节点
  5. MongoDB异常修复
  6. 2016年11月14日--SQL创建数据库、表-查、插、删、改
  7. spring配置定时器的时间设置
  8. asp.net搜索关键词高亮显示函数
  9. Qt 信号槽的应用(二)
  10. 第7周 文件和数据格式化
  11. SPC X-R控制图的操作步骤
  12. 学习java的第5天
  13. 赶紧学会!开发者愚人节怎么写代码。。。
  14. matlab2018a课后答案,[2018年最新整理]matlab习题及答案.doc
  15. STM32 SWD模式下SPI3无法使用的问题
  16. WMCTF-RE--WMware
  17. c语言零基础入门(完整版)
  18. extern C 介绍(转)
  19. 人脸验证:Joint Bayesian
  20. 2.1 Oracle 服务器

热门文章

  1. CocosPods 引入项目,哪些文件需要上传到服务器呢?
  2. JavaScript----BOM(浏览器对象模型)
  3. HUD2795 线段树(单点更新)
  4. C/C++基础知识:函数指针和指针函数的基本概念
  5. windows共享内存
  6. ironic如何支持部署时按需RAID?
  7. python学习HTML之CSS(2)
  8. JMeter 性能测试进阶实战
  9. C语言100例01 PHP版(练习)
  10. 15、iOS开发之duplicate symbols for architecture x86_64错误