本节主要内容:
mysql Replication 备份
实验场景:
场景1:主从架构,没有延迟,某DBA误操作:drop database 【复制+快照:在线备份】
场景2:存在不确定性或者风险性较大的操作,如升级测试,大表变更【啥事都在快照上折腾,不行大不了就将之删除】
场景2比较简单,在新建的一个快照上折腾,失败的话,把快照删除,然后再次新建一个即可。用来学习不错。
本节主要对场景1进行模拟。
恢复方法:
① 恢复备库上的快照
② 根据binlog执行point-in-time恢复
首先,为备库创建快照。
[root@jbxue ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg 4 1 0 wz--n- 3.81G 1.81G
[root@jbxue ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mysql vg -wi-ao 2.00G
[root@jbxue ~]# lvcreate --size 1G --snapshot --name backup_mysql /dev/vg/mysql
Logical volume "backup_mysql" created
[root@jbxue ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
backup_mysql vg swi-a- 1.00G mysql 0.00
mysql vg owi-ao 2.00G
[root@jbxue ~]# linuxjishu/9952.html target=_blank class=infotextkey>mount /dev/vg/backup_mysql /mnt/backup
[root@jbxue ~]# cd /mnt/backup/
[root@jbxue backup]# ls
lost+found mysql
[root@jbxue backup]# tar -jcv -f /mnt/snapshot/mysql.tar.bz2 *
[root@jbxue ~]# lvremove --force /dev/vg/backup_mysql
Logical volume "backup_mysql" successfully removed
为什么要先备份快照再还原呢?
其一,昂贵的IO,因为磁头要在快照区和系统区来回跑
其二,快照区空间不足,因为是COW原理
在 2013-10-12 9:57 某位无经验DBA错误地执行了drop database snapshots:
在备库上确认查看:
可见库已经被删除了。
同时,在主库或者备库查看当前的二进制日志坐标,并记录下来。
[root@jbxue mysql]$ mysqladmin -uroot -poracle shutdown
131012 09:59:36 mysqld_safe mysqld from pid file /mnt/LVM/mysql/data/localhost.localdomain.pid ended
[1]+ Done mysqld_safe
[root@jbxue ~]# umount /mnt/backup
[root@jbxue ~]# lvremove --force /dev/vg/backup_mysql
Logical volume "backup_mysql" successfully removed
[root@jbxue ~]# umount /mnt/lvm
[root@jbxue ~]# mkfs -t ext3 /dev/vg/mysql
[root@jbxue ~]# mount /dev/vg/mysql /mnt/lvm
[root@jbxue ~]# tar -jxv -f /mnt/snapshot/mysql.tar.bz2 -C /mnt/lvm
[root@jbxue ~]$ mysqld_safe &
通过binlog执行point-in-time恢复
确认数据是否恢复:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| snapshots |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use snapshots;
Database changed
mysql> show tables;
+---------------------+
| Tables_in_snapshots |
+---------------------+
| t |
+---------------------+
1 row in set (0.00 sec)
mysql> select * from t;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
至此,MySQL 复制+快照配置完成,这种复制+快照的备份架构可以实现在线实时备份。