mysql之lvm快照方式备份恢复

好像一般大家都不用这个吧,这里也仅是当做记录吧。

其实lvm快照不管是什么存储引擎都可以做到接近热备,看起来也还不错的样子。不过却也需要一些所必须的条件。

如:LVM卷,而且也有足够的空闲空间来做快照,并且事务日志也要与数据文件在一起。

好啦,废话不多说,我们先看看怎么用吧。

大体步骤:

1、全局锁。

2、滚动二进制日志,并做好记录

3、创建lvm快照。

4、释放锁。

5、从快照盘手动复制数据。

6、卸载并移除快照盘。

来吧。

先来看看lvm的情况:

[[email protected] backup]# vgs                #卷组空闲4G多。我这里够用了。
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    1   5   0 wz--n- 58.59g 4.82g
[[email protected] backup]# lvs
  LV    VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  mysql vg0  -wi-ao----  3.00g       #mysql的逻辑卷,好小啊。                                     
  root  vg0  -wi-ao---- 14.65g                                             
  swap  vg0  -wi-ao----  1.94g                                             
  usr   vg0  -wi-ao---- 19.53g                                             
  var   vg0  -wi-ao---- 14.65g

因为锁定的时间越短越好,所以用两个终端分别操作。

终端A开始在Mysql命令行下创建全局锁。在繁忙的环境下可能要等一会儿。

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;    #刷写缓冲区中的信息到磁盘并创建全局锁
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH LOGS;                    #滚动二进志日志
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> SHOW MASTER STATUS;            #查看当前日志,并做好记录
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 |      245 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

终端B赶紧创建快照。注意快照盘的大小啊,太小的话会撑爆的。

[[email protected] backup]# lvcreate -L 2G -n backup -s -p r /dev/vg0/mysql
  Logical volume "backup" created

创建成功,终端A解除锁.

MariaDB [(none)]> UNLOCK TABLE;
Query OK, 0 rows affected (0.00 sec)

然后就可以开始复制数据啦,cp或其它命令。

[[email protected] backup]# mount /dev/vg0/backup /mnt/ -r
[[email protected] backup]# cp -a /mnt/data .
[[email protected] backup]# ls
data
[[email protected] backup]# cd data
[[email protected] data]# ls
aria_log.00000001  BA   hellodb  ib_logfile0  mysql             mysql-bin.index  nfs.star.com.err  performance_schema  testdb1  testdb3
aria_log_control   DDD  ibdata1  ib_logfile1  nfs-slow.log     nfs.star.com.pid  test                testdb2  TTT
[[email protected] data]#

复制完成,也就完成了完全备份了。 事务日志可不能删除,里面或许还有已提交或尚未提交的事务。

卸载并移除快照盘。

[[email protected] data]# umount /mnt
[[email protected] data]# pwd
/backup/data
[[email protected] data]# lvremove /dev/vg0/backup
Do you really want to remove active logical volume backup? [y/n]: y
  Logical volume "backup" successfully removed
[[email protected] data]#


在我们解除全局锁以后,数据库中可能就已经有数据写入了。 而刚才的备份只是之前的备份。 如果想恢复到最新的状态,就要用二进志日志。 刚才不是记录了一个二进志日志的信息吗,从那个日志以后的所有都是备份之后变化。

所以我们现在再创建一些表,插入一些数据试试。来模拟一下备份之后的数据修改。

MariaDB [(none)]> CREATE DATABASE ABCD;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE TABLE ABCD.tb1 (ID int,name char(30));
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> INSERT INTO ABCD.tb1 VALUES (1,‘tom‘),(2,‘lili‘),(3,‘tonny‘);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

我这里创建了一个ABCD的库,并在库里创建了tb1表,插入了数据。

恢复数据:

模拟数据损坏,把所有数据文件都给删掉。并停止数据库。

[[email protected] data]# ls
ABCD               aria_log_control  DDD      ibdata1      ib_logfile1  mysql-bin.000014  nfs-slow.log      nfs.star.com.pid    test     testdb2  TTT
aria_log.00000001  BA                hellodb  ib_logfile0  mysql        mysql-bin.index   nfs.star.com.err  performance_schema  testdb1  testdb3
[[email protected] data]# rm -rf *
[[email protected] data]# ls
[[email protected] data]# killall mysqld
[[email protected] binlogs]# service mysqld start        #数据库已经不能启动了。
Starting MySQL...                                          [FAILED]
[[email protected] binlogs]#

导出从上次记录开始的二进制文件的内容。并用head查看一下,万是文件里面是报错信息呢。

[[email protected] binlogs]# ls
master-bin.000001  master-bin.000002  master-bin.index
[[email protected] binlogs]# mysqlbinlog --start-position=245 master-bin.000002 > /backup/backup.sql
[[email protected] binlogs]# head -n 30 /backup/backup.sql

恢复:

1、把所备份的所有文件复制到数据库目录。

[[email protected] data]# ls        #刚才启动数据库所生成的文件。
aria_log.00000001  aria_log_control  ibdata1  ib_logfile0  ib_logfile1  nfs-slow.log  nfs.star.com.err
[[email protected] data]# rm -rf *
[[email protected] data]# cp -a /backup/data/* .    #把我们备份的数据复制过来
[[email protected] data]# ls
aria_log.00000001  BA   hellodb  ib_logfile0  mysql             mysql-bin.index  nfs.star.com.err  performance_schema  testdb1  testdb3
aria_log_control   DDD  ibdata1  ib_logfile1  mysql-bin.000014  nfs-slow.log     nfs.star.com.pid  test                testdb2  TTT
[[email protected] data]# ll        #查看权限是否有问题。
[[email protected] data]# service mysqld start
Starting MySQL..                                           [  OK  ]
[[email protected] data]#

启动成功了。但没有我们刚才创建的库ABCD。

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| BA                 |
| DDD                |
| TTT                |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
| testdb1            |
| testdb2            |
| testdb3            |
+--------------------+
11 rows in set (0.00 sec)

MariaDB [(none)]>

2、恢复二进制日志。

MariaDB [(none)]> SET sql_log_bin=0       
    -> ;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> SHOW VARIABLES LIKE ‘sql_log_bin‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> source /backup/backup.sql

3、查看数据。

MariaDB [(none)]> use ABCD;
Database changed
MariaDB [ABCD]> SHOW TABLES;
+----------------+
| Tables_in_ABCD |
+----------------+
| tb1            |
+----------------+
1 row in set (0.00 sec)

MariaDB [ABCD]> SELECT * FROM tb1;
+------+-------+
| ID   | name  |
+------+-------+
|    1 | tom   |
|    2 | lili  |
|    3 | tonny |
+------+-------+
3 rows in set (0.00 sec)

MariaDB [ABCD]>


时间: 2024-10-17 21:16:21

mysql之lvm快照方式备份恢复的相关文章

MySQL基于LVM快照的备份恢复

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

快照方式备份MySQL数据库及举例

快照方式备份MySQL数据库及举例 作者: 红豆殺 日期: 2011 年 03 月 17 日发表评论7条评论查看评论 一.创建逻辑卷 依照如下连接的文档创建一个逻辑卷 http://www.178-go.com/tags/lvm 要求:物理卷20G;卷组名为vg0;逻辑卷2G,逻辑卷名为mydata 创建逻辑卷挂载点,并挂载之 # mkdir /mydata # mount /dev/vgo/mydata /mydata 二.安装MySQL数据库 如果机器已装有mysql,则此步可省略 只需修改

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

续 lvm-snapshot:基于LVM快照的备份之准备工作 Attention,Please! 重头戏开始啦 3.基于LVM快照的备份 (1)事务日志跟数据文件必须在同一个卷上: (2)创建快照卷之前,要请求MySQL的全局锁:在快照创建完成之后释放锁: (3)请求全局锁完成之后,做一次日志滚动:做二进制日志文件及位置标记(手动进行): 备份步骤: 3.1 请求全局锁,并滚动日志 MariaDB [hellodb]> FLUSH TABLES WITH READ LOCK; MariaDB [

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

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

MySQL基于mysqldump及lvmsnapshot备份恢复

一.备份对象 数据 配置文件 代码:存储过程,存储函数,触发器 跟复制相关的配置 二进制日志文件 二.备份工具 mysqldump:逻辑备份工具 InnoDB热备.MyISAM温备.Aria温备 备份和恢复过程较慢 mysqldumper:多线程的mysqldump 很难实现差异或增量备份 lvm-snapshot: 接近于热备的工具:因为要先请求全局锁,而后创建快照,并在创建快照完成后释放全局锁 使用copy.tar等工具进行物理备份 备份和恢复速度较快 很难实现增量备份,并且请求全局锁需要等

centos mysql 实战 第十二节课 备份恢复 备份方案 备份可以分为几种形式 mysqldump 在不同版本里对性能会不会有影响? mysqldump 的用户需要什么权限 mysqldump 支持Where条件 备份评估

centos mysql 实战 第十二节课  备份恢复  备份方案  备份可以分为几种形式  mysqldump 在不同版本里对性能会不会有影响?   mysqldump 的用户需要什么权限   mysqldump 支持Where条件  备份评估 阿里云Percona-live 2016-4 基于Innodb物理复制 mysql5.7没有线程池,需要用percona版本mysql才有,percona的定位是做免费的企业版mysql mysql5.6的memcached插件只是提供memcache

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 拷贝数据库表方式备份,还原后提示 table xxx '' doesn`t exist

MySQL很强大,支持直接拷贝数据库文件快速备份,那数据库文件在哪里呢? 打开MySQL的配置文件 my.ini,找到 datadir 节点,如 datadir="D:/Program Files/MySQL/MySQL Server 5.1/data" 进入上述文件夹,就可以看到MySQL中新建的数据库文件夹了,每个文件夹以数据库名命名的,你想备份哪个数据库,把这个文件夹拷贝走即可.到时还原数据库,把它拷贝到data目录下即可,就这么简单! 但是,今天在一台MySQL服务器上拷贝备份

LVM快照(snapshot)备份

转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv5ZmYL_ERp3Wprd1jVxG-333s6tCJn2LGqCAvFmJ6dXC Logical VolumeManager (LVM)提供了对任意一个LogicalVolume(LV)做“快照”(snapshot)的功能,以此来获得一个分区的状态一致性备份. 在某一个状态下做备份的时候,可能