lvm mysql快照_通过LVM快照在线备份MySQL

RHEL 6.6

mysql-5.5.28

文件系统快照是一种非常好用的在线备份方法,特别是我们再升级过程中遇到问题需要回退的状况下。我们可以事先创建一个镜像,如果升级失败,只要回滚就可以了。

使用LVM快照备份原因:

1>几乎可以实现热备,无须关闭服务。

2>支持所有的mysql存储引擎,如InnoDB,MYISAM等。

3>备份速度快,只需拷贝二进制日志文件即可

金无赤足,人无完人,它也存在一些缺点,如:

1>数据文件必须在逻辑卷上

2>数据文件和事务日志要在同一逻辑卷

LVM快照工作原理

LVM使用写时复制来创建快照,只简单标记创建快照的时间点,读数据的时候是从原始卷上读,当原始卷数据有变化时,LVM在有写入操作时,复制受到影响的块到创建快照预留区域中。利用快照,我们可以使用很少的物理存储空间对一个非常大的卷做快照,但我们一定要预估可能发生改变的数据量,并分配足够的空间。假如分配空间不够,又需要写入数据,那么设备就变得不可用。

基本操作步骤:

1>施加读锁,锁定所有表;

2>打开另一终端,保存二进制日志文件和相关位置信息;

3>创建快照卷

4>释放锁并挂载快照卷,然后备份

5>可以删除快照卷,并进行增量备份二进制日志文件

6>恢复

所有数据文件已经准备好,mysql数据文件存放在逻辑卷上,并挂载到/mydata目录,数据文件在/mydata/data。每表一个表空间文件,既 innodb-file-per-table在on的状态。

此例中有一个名为school的数据库,并含有一个student表。为实验方便,开启三个终端,简记为终端1,终端2,终端3。

[root@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              20G  3.7G   15G  20% /

tmpfs                 202M     0  202M   0% /dev/shm

/dev/sda1             477M   24M  428M   6% /boot

/dev/mapper/myvg-mydata

9.9G  181M  9.2G   2% /mydata

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| school             |

+--------------------+

mysql> SHOW TABLES;

+------------------+

| Tables_in_school |

+------------------+

| student          |

+------------------+

mysql> SELECT * FROM student;

+----+----------+-----+

| ID | Name     | Age |

+----+----------+-----+

|  1 | xiaoming |  20 |

|  2 | xiaohong |  22 |

|  3 | xiaohei  |  66 |

|  4 | xiaobai  |  77 |

打开终端一,施加读锁。

mysql> START TRANSACTION;

mysql> FLUSH TABLES WITH READ LOCK;

打开终端2,在student表插入数据,模拟备份过程中有人写入数据。因为已施加读锁,插入会卡那,等待读锁释放才能插入成功。

mysql> INSERT INTO student (Name) VALUES ('xiaoming1');

打开终端一,更新日志文件

mysql> FLUSH LOGS;

mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002 |      107 |              |                  |

+------------------+----------+--------------+------------------+

打开终端三,保存二进制日志文件备份信息,并创建快照卷。

[root@localhost ~]# mkdir /backup

[root@localhost ~]# mysql -p -e 'SHOW MASTER STATUS\G' > /backup/BINARY_LOG.INFO

[root@localhost ~]# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata

[root@localhost ~]# lvs

LV          VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mydata      myvg owi-aos--- 10.00g

mydata-snap myvg sri-a-s--- 52.00m      mydata 0.02

打开终端一,解锁。

mysql> UNLOCK TABLES;

Query OK, 0 rows affected (0.00 sec)

打开终端二,可以看到数据已插入成功。

mysql> INSERT INTO student (Name) VALUES ('xiaoming1');

Query OK, 1 row affected, 1 warning (11 min 37.47 sec)

打开终端一,提交事务,将二进制事件立即写入。

commit;

打开终端三,以只读方式挂载,并做备份。

[root@localhost ~]# mount /dev/myvg/mydata-snap /mnt -o ro

[root@localhost ~]# cd /mnt/data

[root@localhost data]# mkdir -p /backup/full_backup

[root@localhost data]#  cp -a ./* /backup/full_backup

[root@localhost ~]# umount /mnt

[root@localhost ~]# lvremove --force /dev/myvg/mydata-snap

[root@localhost ~]# cd /backup/full_backup/

[root@localhost full_backup]# rm mysql-bin.* -f   二进制日志文件不用备份

[root@localhost full_backup]# cd /mydata/data/   做增量备份

[root@localhost data]# mysqlbinlog --start-position=107 mysql-bin.000002 > /backup/increment_backup.sql

模拟服务器故障,删除数据目录。

[root@localhost data]# rm -rf /mydata/data/*

[root@localhost data]# cp -a /backup/full_backup/* /mydata/data

[root@localhost data]# service mysqld start

Starting MySQL SUCCESS!

mysql> use school

mysql> SELECT * FROM student;   没有小明1;

+----+-----------+-----+

| ID | Name      | Age |

+----+-----------+-----+

|  1 | xiaoming  |  20 |

|  2 | xiaohong  |  22 |

|  3 | xiaohei   |  66 |

|  4 | xiaobai   |  77 |

+----+-----------+-----+

mysql> set sql_log_bin=0 关闭二进制日志文件

mysql> source /backup/increment_backup.sql  导入增量备份

mysql> SELECT * FROM student;    可看到xiaoming1

+----+-----------+-----+

| ID | Name      | Age |

+----+-----------+-----+

|  1 | xiaoming  |  20 |

|  2 | xiaohong  |  22 |

|  3 | xiaohei   |  66 |

|  4 | xiaobai   |  77 |

|  5 | xiaoming1 |   0 |

+----+-----------+-----+

mysql> set sql_log_bin=1;开启二进制日志

至此,备份恢复都完成了。

一个不错的论坛:http://www.aminglinux.com/bbs/forum.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值