lvm-snapshot:基于LVM快照的备份

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

Attention,Please! 重头戏开始啦

3.基于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卷使用使用情况

[[email protected] ~]# 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目录

[[email protected] ~]# mount -o ro /dev/myvg/mydata-snap /mnt/

(2)查看快照卷挂载是否成功(即查看挂载点下是否有我们之前备份的数据)

[[email protected] ~]# cd /mnt/

[[email protected] mnt]# ls

binlogs  data

[[email protected] mnt]# cd data/

[[email protected] 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.不小心停掉了数据库,并且删除了数据目录下的所有文件

[[email protected] ~]# service mysqld stop

Shutting down MySQL...                                     [  OK  ]

[[email protected] ~]# rm -rf /mydata/data/*

还好二进制日志尚在,不然没法做即时点还原(二进制日志文件很重要,要常备份)

[[email protected] ~]# ls /mydata/binlogs/

mysql-bin.000001  mysql-bin.000003  mysql-bin.000005  mysql-bin.state

mysql-bin.000002  mysql-bin.000004  mysql-bin.index

数据目录中的数据被误删除后,数据目录空空如也

[[email protected] ~]# ls /mydata/data/

还原数据目录下的所有数据,-a保持用户属主属组等属性信息不变

[[email protected] ~]# cp -a /backups/data-2014-04-12/*  /mydata/data/

[[email protected] ~]# cd /mydata/data/

查看数据目录下的数据的属主属组是否都是mysql,若不是,就自行修改

[[email protected] 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了

[[email protected] data]# service mysqld start

在数据目录下查看数据文件是否都已恢复

[[email protected] 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二进制日志文件。

查看二进制日志文件

[[email protected] 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的信息

[[email protected] 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

lvm-snapshot:基于LVM快照的备份,布布扣,bubuko.com

时间: 2024-11-06 20:57:26

lvm-snapshot:基于LVM快照的备份的相关文章

xenserver snapshot backup根据快照名备份

11==----------------根据快照名备份----------------------#!/bin/shbackup_date=`date +%Y-%m-%d`echo backup_date: $backup_date########更改此处快照名##########snap_name=2016-06-06########更改备份目录#########snap_path_name=/root/zentao_backup snapshot_uuid=`xe snapshot-list

Linux-6.5下 MariaDB-10基于LVM快照的备份数据 详解

理解部分: LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.LVM可以对分区在线扩容,快照,镜像和条带化,功能非常强大.这篇文章的主题就是其中一个功能--快照. 快照(Snapshot)就是关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像.快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品: 其实

MySQL基于LVM快照的备份恢复

目录 1.数据库全备份 2.准备LVM卷 3.数据恢复到LVM卷 4.基于LVM快照备份数据 5.数据灾难恢复 6.总结 写在前面: 测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷,此次要演示基于LVM的数据备份和恢复,所以就把mysql的数据先迁移到LVM上再做快照卷的备份. 如果innodb表基于LVM来做备份,那事务日志文件和数据文件要在同一个LVM的逻辑卷上,因为在同一时刻我们只能对一个逻辑卷做快照,如果事务日志与数据文件不在同一卷上,那做快照后会导致事务

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

选择lvm逻辑卷存储数据库数据目录的2大理由 (1) 一般来说,我们会将数据库的数据目录放在lvm逻辑卷上,因为数据库的数据增长速度可能会超出我们的预期 ,这样在将来即便是数据增长很快,我们也不必担心,因为lvm可以实现在线扩容 (2) 我们可以对数据目录做基于lvm快照的备份 1.创建用于存储数据目录lvm设备 1.1 创建一个新分区,并修改分区类型 # echo -e 'n\np\n1\n\n+10G\nw\n'|fdisk /dev/sdb # echo -e 't\n8e\np\nw\n

MySQL 备份和恢复(二)基于LVM实现几乎热备

LVM(Logical Volume Management逻辑卷管理)实现几乎热备的原理:利用LVM的快照卷达到可以保存数据库在某一时刻的瞬时状态,只需把当时的快照备份出来即可. LVM的快照原理:简单的讲就是lvm对某个卷创建快照卷后,快照卷则作为原卷的另一个访问入口,当原卷的数据发生变化时,则先把原卷的内容先复制一份到快照卷,然后才会继续对原卷数据的修改,这也就是之所以快照卷的容量大小应该大于整个备份过程中数据库的变化量的原因.所以当备份完成以后,快照卷也就可以拆除了,它的作用就是在备份过程

LVM创建,缩减及快照备份

管理逻辑卷工具:LVM 逻辑卷:灵活可动态存储的一种逻辑上的存储 最底层需要通过工具变成"物理卷":存储设备,Raid ,分区等 VG:(1)底层设备容量之和.(2)PE大小*数量 卷组上面一个块叫PE.默认每个块为4M,可更改. 一.首先创建分区 # fdisk /dev/sdb 二. 查看系统内是否已经安装LVM [[email protected] share]# rpm -qa |grep lvm lvm2-libs-2.02.98-9.el6.x86_64 lvm2-2.02

基于逻辑卷LVM的MySQL、mariadb数据库备份还原详细实现

前提是数据库的数据是放在逻辑卷上的: 数据库数据和日志分开存放:正常情况下数据和日志是放在两个独立的磁盘上,如果是raid的话,那么就无所谓了. 创建分区:         [[email protected] ~]$fdisk /dev/sda         Command (m for help): n         All primary partitions are in use         Adding logical partition 6         First sec

mysqldump 和 基于快照的备份

mysqldump 和 基于快照的备份 Table of Contents mysqldump: 仅适用于数据集较小 lvm-snapshot: 基于 LVM 快照的备份 相关阅读 mysqldump: 仅适用于数据集较小 mysqldump DB_NAME [tbname1] [tbname2] # mysqldump -uroot -pYOUR_PASSWORD DB_NAME > test.sql mysql> create database test2; mysqldump -uroo

Linux下的LVM创建以及Linux快照卷

通过最的学习,我加深了对LVM的理解,在这里,我将它写成博客,一是方便自己记忆,二是让Linux的入门学习者一起学习一下. 首先我们引入LVM的概念,并展开详细的说明,主要是近期学习的看法,我们先看一个图 我们将会提到的名词有:PV.VG.LV.PE 在图中,最下面的,我们可以理解为物理存储介质,硬盘或是分区 PV:称为物理卷,是LVM的基本存储块. VG:称为卷组,我们可以看卷组是由物理卷组合而成的. LV:称为逻辑卷,是从卷组中划分出来的. PE:physical extent,我就称为物理