注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

MySQL数据备份与恢复理论

MySQL 彭东稳 6847次浏览 已收录 0个评论

一、数据备份方式

数据库作为一个系统中唯一或者主要的持久化组件,对服务的可用性和数据的可靠性要求较高。 作为能够有效应对因为系统软硬件故障、人工误操作导致数据丢失的预防手段,备份是目前最为常见的数据库运维操作。根据备份方式不同, 分为物理备份(physical backup)和逻辑备份(logical backup)。

物理备份:包括存储数据库内容的目录和文件的原始副本,这种类型的备份是适合于大数据量备份,速度快,并且需要在问题发生时快速恢复数据。

逻辑备份:保存信息为逻辑数据库结构(创建数据库、创建表语句)和内容(插入语句或带分隔的文本文件),这种类型的备份是适合于少量的数据,您可以编辑数据值或表结构,方便使用文本处理工具直接对其处理可移植能力强。丢失浮点数精度,不适合对大数据库做完全备份速度慢。

物理备份具有这些特性:

  • 备份由数据库目录和文件的精确副本组成。通常这是一个复制的全部或部分的MySQL数据目录。
  • 物理备份方法比逻辑快,因为它们只涉及文件复制而不需要转换。
  • 输出比逻辑备份更紧凑。
  • 备份和恢复粒度范围从整个数据目录到单个文件的级别,这可能或不提供表级粒度,取决于存储引擎。例如,InnoDB表的每一个都可以在一个单独的文件,或共享文件的存储与其它InnoDB表;每个MyISAM表的唯一对应一组文件。
  • 除了数据库,备份可以包括任何相关的文件,如日志或配置文件。
  • 内存表的数据是很棘手的,因为它们的内容不存储在磁盘上。(MySQL企业备份产品有一个特点,你可以在一个备份。从内存检索表的数据)
  • 备份只对具有相同或相似的硬件特性的其他机器具有可移植性。
  • 备份可以在MySQL服务器没有运行时进行,如果服务器正在运行,则需要进行适当的锁定,以便在备份过程中不更改数据库内容,MySQL企业备份会自动锁表。

逻辑备份具有这些特性:

  • 备份是通过查询MySQL服务器获取数据库的结构和内容信息。
  • 备份比物理方法慢,因为服务器必须访问数据库信息并将其转换为逻辑格式,如果输出是写在客户端的,服务器也必须将它发送到备份程序。
  • 输出大于物理备份,特别是在文本格式保存时。
  • 备份和恢复粒度可在服务器级别(所有数据库)、数据库(尤其是数据库中的所有表)、或表级可用,无论存储引擎。
  • 备份不包括日志或配置文件,或其他不属于数据库的其他数据库相关文件。
  • 存储在逻辑格式的备份是机器独立的,高度可移植的。
  • 逻辑备份可在MySQL服务器运行时进行,服务器可不脱机备份。
  • 逻辑备份工具包括mysqldump程序和选择…到输出文件的声明,这些工作的任何存储引擎,甚至内存。
  • 恢复逻辑备份,SQL格式的转储文件可以使用MySQL客户端处理,加载分隔的文本文件,使用LOAD DATA INFILE语句或mysqlimport客户端。

二、数据备份类型

考虑到备份操作对数据库可用性的影响, MySQL官方将备份方式划主要划分为以下三类:

热备份(hot backup):是指在数据库运行中直接备份,对正在运行的数据库没有任何影响。这种方式MySQL官方称为Online backupo(在线备份)。即服务器读写操作均可进行。

冷备份(cold backup):是指在数据库停止的情况下进行备份,这种备份最为简单,这种方式在MySQL官方手册中称为Offline Backup(离线备份)。即服务器读写操作终止。

温备份(warm backup):是指服务器保持运行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性。即锁定写操作,仅可以读取数据。 

三、数据备份策略

完全备份(full backup):完整备份是指对数据库进行一个完整的备份,包括所有的数据,由一个MySQL服务器在给定的时间点。

增量备份(increment backup):增量备份包括在给定时间跨度(从一个时间点到另一个点)的数据的变化,也可以说是指在上次的完全备份基础上对更新的数据进行备份。

日志备份(log backup):日志备份主要是指对MySQL数据库二进制日志的备份,通过对一个完全备份进行二进制日志的重做来完成数据库的“即时点”的恢复工作。

对于MySQL数据库来说,官方没有提供真正的增量备份的方法,大部分是通过二进制日志来实现的。这种方法与真正的增量备份相比,效率还是很低的。假设有一个100G的数据库,如果通过二进制日志来完成备份,可能同一页需要多次执行SQL语句来完成重做的工作。但是对于真正的增量备份来说,只需要记录当前每个页最后的检查点的LSN。如果大于之前完全备份时的LSN,则备份该页,否则不用备份。这大大加快了备份的速度以及缩短了恢复的时间,同时这也是xtrabackup工具增量备份的原理。

此外,还需要理解数据库备份的一致性,这要求在备份的时候,数据在这一时间点上是一致的。举例来说,在一个网络游戏中有一个玩家购买了道具,这个事务的过程时:先扣除相应的金钱,然后往其装备表中插入道具,确保扣费和得到的道具是互相一致的。否则,在恢复时,可能出现金钱被扣除了,但是装备丢失的情况。但对于Innodb存储引擎来说,因为其支持MVCC功能,因此实现备份一致比较容易,可以先开启一个事务,然后导出一组相关的表,最后提交。当然,事务隔离级别必须是RR的,这样的做法就可以给你一个完美的一致性备份。然而,这个方法的前提是需要正确地设计应用程序,上述购买道具的过程不可以分为两个事务来完成,如一个完成扣费,一个完成道具的购买。若备份发生在这两者之间,则会因为逻辑设计的问题导致备份出的数据依然是不一致的。

对mysqldump备份工具来说,可以通过添加-single-transaction选项来获得InnoDB存储引擎的一致性备份,原理和我们之前所说的相同,需要了解的是,这时的备份是在一个执行时间很长的事务中完成的。另外,对于Innodb存储引擎的备份,要务必加上-single-transaction的选项。

数据恢复

完全恢复数据是从一个完整的备份得到。这将恢复在备份时的服务器实例状态,如果该状态没有足够的当前状态,则可以再完全备份后使用增量备份接着恢复数据,以使服务器更及时更新状态。增量恢复是在给定的时间跨度中恢复的变化,这也被称为时间恢复点。时间恢复点是基于二进制日志,通常是从备份文件中得到它的状态,然后将二进制日志文件中的数据更改应用为增量恢复来进行数据恢复。 

四、数据备份工具

1)Mysqldump

属于逻辑备份工具,是一个单线程备份工具(mysqldumper是多线程工具),性能较差。并且很难做到增量或差异备份。可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。可以备份整个服务器、单个或部分数据库,单个或部分表,以及表中的部分行;存储过程、存储函数、触发器等,可以自动记录备份时的二进制日志文件以及相应的position,对于MyISAM存储引擎可以做到温备份,对于Innodb存储引擎可以做到基于单事务模式进行热备份。

2)Percona tools

逻辑备份工具,可以执行多线程同时备份。

3)Mysqlhotcopy

属于物理备份工具,其备份类型是温备份。

4)Ibbackup

属于物理备份工具,InnoDB官方提供的收费备份工具,对InnoDB支持热备以及增量备份。

 5)Xtrabackup

属于物理备份工具,Percona公司提供的备份工具是ibbackup的增强版,专门为Percona公司的xtradb存储引擎提供的。

备份MySQL数据时,除了使用以上常用的备份工具之外还可以选择以下几种其他的备份方式,比如以下几种备份方式。

6)导出数据

属于逻辑备份,可以用来备份部分数据,不会备份关系定义,仅备份表中的数据。

备份:Mysql> select * into outfile ‘/tmp/db.txt’ from DB_NAME [where ….];

还原:Mysql> load data infile‘/tmp/db.txt’ into DB_NAME;(表结构要自己创建出来)

7)复制数据

直接复制数据文件,这种数据物理冷备份,也就是说备份时服务器不可用。使用系统提供的命令备份即可,比如cp,rsync等。

8)复制备份

利用MySQL的主从复制功能来进行数据库的备份,这种备份可以防止(主)硬件故障时的可用(从)数据库,但是并不能防止(主)误操作时的数据恢复。

9)快照备份

一些文件系统实现启用“快照”,这些文件系统在一个特定的时间点提供逻辑副本,而不需要整个文件系统的物理副本。MySQL本身不带文件系统快照提供能力,它可通过第三方解决方案如Veritas、LVM、或ZFS。

备份调度压缩和加密

备份调度是有价值的自动备份程序,压缩的备份输出减少了空间的要求,并提供了加密的输出提供了更好的安全性,对未经授权的访问备份数据。MySQL本身并不提供这些功能。MySQL企业备份产品可以压缩InnoDB备份,备份输出压缩或加密,可以使用文件系统工具实现。其他第三方解决方案可提供。

五、MySQL需要备份什么?

一般数据库备份以下几种文件即可:

1)配置文件

2)数据文件

3)二进制日志文件

4)事务日志文件(用来还原已经提交但是还没有完全同步到磁盘的事务)


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)or分享 (0)
关于作者:

您必须 登录 才能发表评论!