无论是互联网应用还是其他应用程序,数据库都是必不可少的角色,数据库用来保存上层应用的数据,当然也可以对数据进行处理。数据是应用的核心,因此数据的备份就显得格外重要。


    本文仅供参考,如有遗误,望请指正海涵!


本文主要介绍

    1. 物理备份 & 逻辑备份

    2. 线上备份 & 线下备份

    3. 本地备份 & 远程备份

    4. 快照备份

    5. 完全备份 & 增量备份

    6. 完全恢复 & point-in-time恢复

    7. 表维护

    8. 备份 计划、压缩、加密


一、物理备份 & 逻辑备份

    1. 物理备份

        1)定义:将包含数据库内容的文件和目录直接进行copy备份

        2)利弊:这种方式比较适合大型、重要的数据库,以及要求在出问题的时候能够快速恢复

        3)特性

            a. 物理备份是对整个数据库的文件和目录复制一个副本

            b. 物理备份比逻辑备份快速,只是进行文件复制,不用进行转换

            c. 物理备份的输出不如逻辑备份紧凑(物理备份占用空间大)

            d. 对于业务比较繁忙 和 重要的数据库,备份速度 及 压缩程度都是很重要的,可 \

               以使用mysql企业级备份产品进行物理备份

            e. 备份和恢复的粒度级别 从 整个库毁坏恢复 到 某个表毁坏恢复 或 某个文件毁 \

               坏恢复,有时候不支持表级粒度,这将取决于存储引擎;例如:InnoDB表可以写到 \

               不同的文件 及 和其他的数据库共享文件存储,但myisam表均对应相同的文件。

            f. 除了备份数据文件及数据库文件,还可以备份日志及配置文件

            g. 物理备份不能备份内存中的数据,因为内存中的数据是不存储在存储上的,mysql \

               企业级备份产品能够将内存中的数据进行备份,并允许继续读取内存中的数据。

            h. 备份到其他有相似特性的机器上非常容易

            i. 可以在mysql server是非运行的情况下进行备份,如果server是运行的,必须进行 \

               锁表操作,在备份期间,数据库不能进行写操作。

            j. 物理备份工具包括 mysql企业级备份工具、系统级命令cp scp rsync等等

        4)恢复

            a. mysql企业级备份工具可以恢复InnoDB表及其他通过其备份的数据库

            b. ndb_restore恢复NDB表

            c. 系统级的copy文件 或 mysqlhotcopy 能够恢复到之前的位置

    2. 逻辑备份

        1)定义:保存包含数据库的数据结构(create database | create table) 及 数据库数 \

           据内容的(insert)语句

        2)利弊:这种方式适合数据量比较小的数据库,并且需要有编辑数据库结构及数据、在其 \

           他机器/数据库系统中重建数据结构和数据的权限;一旦将该方法用于数据量比较大的 \

           数据库,则会造成非常耗时,并且影响数据库的性能。

        3)特性

           a. 通过查询数据库获得 数据库结构 and 数据库数据信息

           b. 备份速度比物理备份慢,并且必须访问数据库并将信息写入到逻辑结构文件

           c. 输出比较小,尤其是输出为文本格式的时候

           d. 备份和恢复 在 server级别 and database级别 and table级别都是可用的,不区分 \

              存储引擎

           e. 备份不包含日志文件 & 配置文件,及其他不在数据库中的相关文件

           f. 备份出来的文件与平台无关,高度灵活

           g. 逻辑备份需要有server来执行备份语句,因此server必须是在线的

           h. 备份工具包括 mysqldump programs and select...into statement,任何存储引擎可用

        4)恢复

           a. 可以使用mysql客户端执行备份的sql文件

           b. 可以使用load data语句重新装载数据


二、线上备份 & 线下备份

    1. 线上备份

        1)定义:在mysql server运行的时候,执行在线备份(数据、数据库结构...),也叫热备

           注意:执行线上备份的时候,需要对表进行读锁定,以免在备份期间写入数据

        2)特性

            a. 能够备份哪些数据库,取决于连接server执行备份命令的用户权限

            b. 为了保证数据完整性,在备份的时候,会对备份的表进行加读锁,mysql企业级备 \

               份工具会自动进行加锁


    2. 线下备份

        1)定义:备份的时候,mysql server是停止的,备份数据、结构、配置文件等,也叫冷备

        2)特性

            a. 对于客户端来说,有很大的影响,因为要求数据库关闭;因此备份通常是在从服务 \

               器上进行备份,这样不会影响应用的使用

            b. 备份很容易,因为不能从客户端进行备份


      总结:无论是线上还是线下备份,都会对客户端有影响,线上备份会加读锁,线下备份会关闭 \

            数据库;恢复的时候,线上恢复会禁止客户端读数据,线下恢复会关闭数据库。


三、本地备份 & 远程备份

    1. 本地备份

        1)定义:本地备份是在mysql server上执行


    2. 远程备份

        1)定义:远程备份是在除mysql server之外的其他主机上执行备份,但是可以将备份文件 \

                 写入到mysql server的本地文件系统


    3. mysqldump & mysqlhotcopy & select ...into outfile

        1) mysqldump 能连接本地或者远程的数据库,在本地或者远程均能够完成备份产生SQL输 \

           出,输出的SQL文件保存在client;如果输出以Tab键为间隔的数据文件(使用--tab选 \

           项),则数据文件保存在server主机上

        2) mysqlhotcopy 只能在本地执行备份,首先锁定表(禁止写),然后制作本地表文件的副本

        3)select...into outfile 能够在本地和远程执行备份,但是输出结果保存在server本地

        

        物理备份一般在本地执行备份,能对server执行启停的操作,然后将备份文件拷贝到远程主机


四、快照备份

    mysql本身不提供快照备份的功能,需要借助第三方的工具执行快照备份,例如、文件系统层 \

    次的LVS、ZFS等


五、完全备份 & 增量备份

    1. 完全备份

        1)定义:完全备份包括备份时间点的所有数据库的数据

    2. 增量备份

        1)定义:增量备份包含从上一次备份时间点到这一次备份时间点之间产生的数据

    3. 完全备份方法

        完全备份的方法有很多,包括文件系统层次的copy and 数据库层次的hotcopy等,可以考 \

        虑启用bin-log日志执行增量备份。


六、完全恢复 & point-in-time恢复

    1. 完全恢复

        1)定义:完全恢复是恢复所有的数据,还原到备份的时刻的数据。

    2. point-in-time恢复

        1)定义:增量恢复是恢复给定时间范围内变化的数据(基于binlog)


七、表维护

    如果表损坏导致数据完整性被破坏;对于InnoDB表这个问题不常见,如果是MyISAM表,可以使 \

    用表修复程序进行修复


八、备份 计划、压缩、加密

    备份计划可以使得备份使用程序执行,而不必每次都人为的执行备份;压缩是为了节约磁盘空 \

    间,而加密是为了保证数据的安全性,但是mysql本身不提供这些功能,需要额外的第三方工 \

    具来实现。