设为首页 收藏本站
查看: 705|回复: 0

[经验分享] 通过LVM快照在线备份MySQL

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-23 08:41:58 | 显示全部楼层 |阅读模式
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。

[iyunv@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 |              |                  |
+------------------+----------+--------------+------------------+


打开终端三,保存二进制日志文件备份信息,并创建快照卷。
[iyunv@localhost ~]# mkdir /backup
[iyunv@localhost ~]# mysql -p -e 'SHOW MASTER STATUS\G' > /backup/BINARY_LOG.INFO
[iyunv@localhost ~]# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata


[iyunv@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;

打开终端三,以只读方式挂载,并做备份。
[iyunv@localhost ~]# mount /dev/myvg/mydata-snap /mnt -o ro
[iyunv@localhost ~]# cd /mnt/data
[iyunv@localhost data]# mkdir -p /backup/full_backup
[iyunv@localhost data]#  cp -a ./* /backup/full_backup
[iyunv@localhost ~]# umount /mnt
[iyunv@localhost ~]# lvremove --force /dev/myvg/mydata-snap
[iyunv@localhost ~]# cd /backup/full_backup/
[iyunv@localhost full_backup]# rm mysql-bin.* -f   二进制日志文件不用备份

[iyunv@localhost full_backup]# cd /mydata/data/   做增量备份
[iyunv@localhost data]# mysqlbinlog --start-position=107 mysql-bin.000002 > /backup/increment_backup.sql

模拟服务器故障,删除数据目录。
[iyunv@localhost data]# rm -rf /mydata/data/*

[iyunv@localhost data]# cp -a /backup/full_backup/* /mydata/data
[iyunv@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;开启二进制日志


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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-49561-1-1.html 上篇帖子: 启动mysqld时报ERROR! The server quit without updating PID file (/data/mysql/103.loca 下篇帖子: 通过LVM快照在线备份MySQL 在线
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表