数据库备份使用场景

97 阅读5分钟

你真的明白了自己所做的数据库备份是要面对什么样的场景的吗?

我想任何一位维护过数据库的人都知道数据库是需要备份的,也知道备份数据库是数据 库维护必不可少的一件事情。那么是否每一个人都知道自己所做的备份到底是为了应对哪些 场景的呢?抑或者说我们每个人是否都很清楚的知道,为什么一个数据库需要作备份呢?读到这里,我想很多读者朋友都会嗤之以鼻,“备份的作用不就是为了防止原数据丢失吗,这谁不知道?”。确实,数据库的备份很大程度上的作用,就是当我们的数据库因为某些原因 而造成部分或者全部数据丢失后,方便找回丢失的数据。但是,不同类型的数据库备份,所能应付情况是不一样的,而且,数据库的备份同时也还具有其他很多的作用。而且我想,每个人对数据库备份的作用的理解可能都会有部分区别。

下面我就列举一下我个人理解的我们能够需要用到数据库备份的一些比较常见的情况吧。

一、数据丢失应用场景

    • 1、人为操作失误造成某些数据被误操作;
    • 2、软件 BUG 造成数据部分或者全部丢失;
    • 3、硬件故障造成数据库数据部分或全部丢失;
    • 4、安全漏洞被入侵数据被恶意破坏;

二、非数据丢失应用场景

    • 5、特殊应用场景下基于时间点的数据恢复;
    • 6、开发测试环境数据库搭建;
    • 7、相同数据库的新环境搭建;
    • 8、数据库或者数据迁移;

上面所列出的只是一些常见的应用场景而已,除了上面这几种场景外,数据库备份还会有很多其他应用场景,这里就不一一列举了。那么各位读者过曾经或是现在所做的数据库备 份到底是为了应对以上哪一种(或者几种)场景?或者说,我们所做的数据库备份能够应对 以上哪几种应用场景?不知道这个问题大家是否有考虑过。

我们必须承认,没有哪一种数据库备份能够解决所有以上列举的几种常见应用场景,即使仅仅只是数据丢失的各种场景都无法通过某一种数据库备份完美的解决,当然也就更不用 说能够解决所有的备份应用场景了。

比如当我们遇到磁盘故障,丢失了整个数据库的所有数据,并且无法从已经出现故障的 硬盘上面恢复出来的时候,我们可能必须通过一个实时或者有短暂时间差的复制备份数据库 存在。当然如果没有这样的一个数据库,就必须要有最近时间的整个数据库的物理或者逻辑 备份数据,并且有该备份之后的所有物理或者逻辑增量备份,以期望尽可能将数据恢复到出 现故障之前最近的时间点。而当我们遇到认为操作失误造成数据被误操作之后,我们需要有 一个能恢复到错误操作时间点之前的瞬间的备份存在,当然这个备份可能是整个数据库的备 份,也可以仅仅只是被误操作的表的备份。而当我们要做跨平台的数据库迁移的时候,我们 所需要的又只能是一个逻辑的数据库备份,因为平台的差异可能使物理备份的文件格式在两 个平台上无法兼容。

既然没有哪一种很多中数据库备份能够完美的解决所有的应用场景,而每个数据库环境 所需要面对的数据库备份应用场景又可能各不一样,可能只是需要面对很多种场景中的某一种或几种,那么我们就非常有必要指定一个合适的备份方案和备份策略,通过最简单的技术 和最低廉的成本,来满足我们的需求。


总的来说,MySQL 的备份与恢复都不是太复杂,方法也比较单一。姑且不说逻辑备份,对于物理备份来说,确实是还不够完善。缺少一个开源的比较好的在线热物理备份软件,一 直是 MySQL 一个比较大的遗憾,也是所有 MySQL 使用者比较郁闷的事情。

当然,没有开源的备份软件使用,非开源的商业软件也还是有的,如比较著名的 Zmanda 备份恢复软件,功能就比较全面,使用也不太复杂,在商业的 MySQL 备份恢复软件市场上 有较高的占有率。而且,Zmanda 同时还提供社区版本的免费下载使用。

不过,稍微让人有所安慰的是 MySQL 在实际应用场景中大多是有一台或者多台 Slave 机器来作为热备的。在需要进行备份的时候通过 Slave 来进行备份也不是太难,而且通过 暂时停止 Slave 上面的 SQL 线程,即可让 Slave 机器停止所有数据写入操作,然后就可 以进行在线进行备份操作了。所以即使买不起商用软件或者不太想买关系也不是太大。