snapshot:基于LVM快照的备份

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

Attention,Please! 重头戏开始啦

3.基于LVM快照的备份

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

(1)事务日志跟数据文件必须在同一个卷上;

(2)创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后释放锁;

(3)请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行);

--------------------------------------分割线 --------------------------------------

MySQL管理之基于LVM实现几乎热备

Ubuntu 12.04 KVM之VM动态迁移-基于LVM

RHEL5.9 LVM的使用

Linux系统中对逻辑卷(LVM)的实现

LVM磁盘管理之扩展与缩小LV

--------------------------------------分割线 --------------------------------------


备份步骤:

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             

hellodb            ib_logfile1  performance_schema 

细心的你应该注意到了,前面我们已经释放了全局锁,所以其他的用户是可以执行写入的操作了,因此

此处我们模拟的是,在我们完整备份以后,又有用户执行了写入操作实验环境,然而不幸的是,我们在此处导入数据没多久,就反了些很"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

-rw-rw---- 1 mysql mysql        5 Apr 12 22:34


确认数据目录权限正确的情况下,就可以启动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             

hellodb            ib_logfile1  performance_schema 

在数据中查看数据文件是否都已恢复

MariaDB [(none)]> show databases;

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

| Database          |

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

| hellodb            |

| information_schema |

| mysql              |

| performance_schema |

| test              |

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

5 rows in set (0.01 sec)


此时,完整备份已成功恢复,但是我们模拟用户写操作时倒入的mydb.sql文件,生成的mydb数据库,及其中数据表还没恢复

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/858e9e6b577cfb821d9e7aba4dc908d7.html