一种基于LVM快照的数据库完全备份方式
2020-02-27冯冬艳
冯冬艳
(山西职业技术学院,山西 太原 030006)
0 引言
近些年,随着信息技术的快速发展,为了降低成本,提高竞争力,绝大多数企业在企业内部应用了各种各样的信息系统,并且通过数据库对企业的大量数据进行开发和管理。尤其是伴随着大数据、云计算、物联网、人工智能等新兴技术成长起来的一些互联网企业,数据可以称之为是企业的根基与命脉,如果企业的数据安全得不到保障,则直接影响到这类企业的生存和发展。多数企业采取了多种手段来保障数据的安全,比如采用磁盘阵列、数据备份、双机容错、NAS、数据迁移、异地容灾等。
目前,市场上数据库管理系统种类较多,常见的有Oracle、Sybase、SQL Server、DB2、MySQL,以及 MySQL的两个重要分支MariaDB和Percona。Oracle是甲骨文公司的关系型数据库管理系统,其产品在数据库领域有着广泛的应用,产品可靠性高、使用方便、功能强大、可移植性好,适用于各类大中小型系统。Sybase是美国Sybase公司的关系型数据库管理系统,是一种典型的UNIX或Windows NT平台上C/S结构下的大型数据库管理系统,目前在我国的电信行业及铁路行业内占有较高的市场份额,其产品主要适用于大型企业的数据库管理。SQL Server是MicroSoft公司的关系型数据库管理系统,其产品与目前主流的桌面系统——Windows操作系统兼容性好,版本丰富,可适用于不同的工作环境,简单易用,可伸缩性好,相关软件集成度高。DB2是IBM公司的关系型数据库管理系统,具有良好的伸缩性,较好的性能和较强的网络支持能力,主要适用于大型系统的数据管理。MySQL最初是由MySQL AB公司开发,后被Oracle公司收购,是一款开源免费的数据库管理系统产品,也是目前中小型企业首选的关系型数据库管理系统,具有简单易用、体积小、速度快、总成本低等突出特点,且支持插件式存储引擎。而MariaDB和Percona是MySQL的两个分支,有着与MySQL类似的特点,也是开源免费的,有开源社区的技术支持,经常会有一些最新的技术在其产品上测试并推广,在我国主要应用于一些有着较强研发实力的企业。为此,本文探讨一种基于LVM(逻辑卷)快照的对MySQL数据库进行完全备份的备份方式。
1 MySQL数据库常用存储引擎
MySQL数据库不同于其他数据库产品的一个很大特色就是其支持插件式的存储引擎,用户可以根据不同的适用场景选用不同的数据库存储引擎。MySQL中可选的存储引擎主要有:
(1)MyISAM:是MySQL5.5版本之前的默认数据存储引擎,其不支持事务、外键和行级锁,是一种高速存储引擎,拥有较高的插入、查询速度,比较适合以查询为主的工作场景。
(2)InnoDB:是MySQL5.5及之后版本默认的数据存储引擎,其支持事务、外键和行级锁,支持AUTO_INCREMENT属性,具有自动灾难恢复能力,数据查询速度相对MyISAM引擎要慢,比较适合于处理多重并发更新请求的场景。
(3)MERGE:这种存储引擎是一组 MyISAM表的组合,这些 MyISAM表的结构必须完全一致,MERGE表中并没有数据,对其的操作其实是对My-ISAM中的表进行相应的操作。这种引擎在一些特殊情况下具有较好的使用效果。
(4)Memory:这种存储引擎利用内存来创建表,这种类型的表访问速度非常快,虽然提供了非常好的性能,但由于内存不是持久性存储设备,一旦Mysqld守护进程崩溃,表中的内容就会全部丢失。
(5)Archive:这种引擎对表进行归档,归档之后仅支持插入和查询操作,但是这种引擎拥有较好的压缩机制,一般用作数据仓库。
(6)CSV:一般用于使用逗号隔开的数据表文件。
2 常见数据库备份方式
数据库的备份方式种类比较多,根据备份时数据库服务器的在线程度可以分为热备份、温备份和冷备份;根据备份模式的不同可以分为物理备份和逻辑备份;根据备份内容的不同可以分为完全备份、增量备份、差异备份,以下对每种备份方式进行简要介绍。
(1)热备份:热备份就是指数据库服务器在运行的状态下对数据库中的数据进行备份的一种方式,其技术难度较高,如果备份过程出错将会产生较严重的后果,备份过程基本不会对业务产生较大影响。
(2)温备份:也是在数据库服务器运行的状态下进行的备份,但是需要对数据库进行一系列复杂的控制,复制速度较快,但是会对业务,尤其是非常繁忙的数据库服务器业务产生一定的影响。
(3)冷备份:也称为脱机备份,是指数据库服务器在正常关闭的状态下对数据库系统内数据进行备份的一种方式。这种方式备份速度快,便于归档,数据完整性、一致性程度较高,安全性也最高,但是对业务影响较大。
(4)物理备份:是以磁盘块为基本单位将数据库数据进行备份的一种方式,简单来说就是通过直接复制数据文件的方式进行的备份。
(5)逻辑备份:是以文件为基本单位将数据库数据进行备份的一种方式,简单来说就是通过数据库文件导出的方式进行的备份。
(6)完全备份:就是指将所有需要备份的数据全部进行备份的一种方式。这种备份方式的优点是对所有数据都进行了备份,因此系统中的任何数据丢失都能被恢复,恢复效率较高,这种备份方式的不足是备份数据量较大,备份恢复的时间都很长。
(7)差异备份:是针对完全备份而言的,其备份的是自从上一次完全备份以来所有变化了的数据。
(8)增量备份:备份自从上一次备份(包含完全备份、差异备份、增量备份)以来所有变化了的数据。
3 基于LVM快照的数据库完全备份的实现
3.1 前提条件
为了实现基于LVM快照的数据库备份,需要具备一些基本的前提条件,主要包括:①应当创建好逻辑卷,正确挂载,并确保数据文件存放在逻辑卷上;②应当根据备份过程中新发生业务可能产生的数据量合理规划逻辑卷大小,并确保逻辑卷所在卷组有足够的空间,否则快照卷会由于空间耗尽而导致失效。具体实现步骤如下:
(1)在MySQL中刷新表并对表添加读锁,命令格式为:flush tables with read lock。该语句的作用是刷新表并添加读锁,即关闭所有已打开的表,清除缓存并使用全局读锁锁定所有数据库的所有表。
(2)在MySQL中刷新二进制日志,命令格式为:flush logs。该语句的作用是滚动二进制日志,滚动后将产生一个新的二进制日志。由于二进制日志在MySQL数据库的及时点还原过程中具有非常重要的作用,为了方便以后对MySQL数据库进行还原,应当准确标注备份时二进制日志的范围。因此使用该命令就可以达到滚动二进制日志,标记二进制范围的目的。
(3)在Linux中将MySQL数据的二进制日志的位置信息进行保存,命令格式为:mysql-e`show master status\G`>/backup/binlog.info。该语句的作用就是将show master status\G的执行结果,即滚动后新产生的二进制日志文件的名字和位置保存至backup目录下的binlog.info文件中。
(4)在Linux中创建快照卷,命令格式为:lvcreate-L 100M-s-p r-n mysnap/dev/myvg/mydata。该语句的作用就是使用lvcreate命令为/dev/myvg/mydata创建一个大小为100MB、名字叫mysnap的只读类型的快照。
(5)在MySQL中释放表锁,命令格式为:unlock tables。该语句是之前加读锁的一个逆过程,即释放掉之前对所有数据库的所有表添加的全局读锁。
(6)在Linux中挂载快照卷对数据进行备份,命令格 式 为:mount/dev/myvg/mysnap/mnt;cp/mnt/*/backup/。这两条语句的作用就是挂载创建好的快照卷,并将快照卷中所需备份的内容拷贝至/backup数据目录。
(7)在Linux中卸载快照卷并移除快照卷,命令格 式 为:umount/dev/myvg/mysnap;lvremove/dev/myvg/mysnap。这两条语句的作用就是在数据库备份完成之后,对快照卷进行卸载并移除快照卷。
3.2 其他需要注意的事项
如果使用基于LVM快照的数据库备份的是支持事务的InnoDB存储引擎,则应当确保事务日志文件与要创建快照的数据文件在同一个卷上,否则就需要对两个文件分别进行快照,而这样的操作可能导致数据文件的快照与事务日志文件的快照时间点不一致。
此外,在使用InnoDB存储引擎时一般应将MySQL服务器的sync_binlog参数的值设置为1,这样可以有效地避免在对数据库进行备份过程中存在有后台正在写入的事务。
4 结语
通过使用LVM的快照方式对MySQL数据库进行备份可以达到几乎热备的效果,主要是由于快照是通过COW(Copy On Write)来实现的,其在创建快照卷时仅复制原卷中的元数据(Meta-Data),并没有真正的数据复制,因此其创建速度非常快。同时,用户一定要确保在备份过程中,新发生业务产生的数据量要小于快照卷的大小,否则将会导致快照卷崩溃,进而导致备份失败。此外,用户在进行基于LVM快照的数据库备份时应当根据不同的存储引擎妥善处理好二进制日志、事务日志等文件的备份工作,以确保在真正数据发生丢失时能够快速、准确、安全的对数据库进行恢复。