gaussdb 备份恢复【WAL预写日志、同步异步提交、可靠性保障机制、备份和恢复方案比较】

tech2024-11-25  19

1. WAL预写日志

原理 预写式日志 WAL(Write-Ahead Logging,也称为 XLog)的中心思想是所有对数据文件的修改在提交之前都要记录到日志文件中,也就是先写日志后写数据。如果遵循这个原则,则不需要在每次事务提交的时候都把数据页刷回到磁盘,因为出现崩溃的情况下可以用日志REDO来恢复数据库。

优点1:显著地减少了写磁盘的次数 因为在事务提交的时候只需要把日志文件刷新到磁盘,而不是事务修改的所有数据文件。在多用户环境里,许多事务的提交可以用日志文件的一次fsync来完成。而且日志文件是顺序写的,因此同步日志的开销远比同步数据块的开销要小。

优点2:提供了支持数据库在线备份和即时恢复的可能性 通过归档的WAL文件,可以将数据库恢复到WAL文件中包含的任意时刻:只需使用以前的数据库物理备份,然后重放WAL到期望的时间点。

2. 同步、异步提交

解决的核心问题:事务提交是否真正写入WAL日志记录中,落地磁盘(是在内存中还是在磁盘上,内存中的数据存在丢失风险)。

同步提交 事务提交通常是同步的,服务器等待事务的WAL记录被刷新到永久存储设备,然后给客户端返回一个成功指示。因此,可以保证客户端的事务提交被保存,即使在服务器突然崩溃时也可以。但这样就会存在延迟,对于频繁的短期事务提交来说,这样的延迟占事务提交总时间的主要部分。(磁盘实时写入是硬件瓶颈)

异步提交 异步提交模式意味着,只要在逻辑上完成事务提交,WAL记录只能保证事务提交的数据在flush到磁盘之前,服务器会返回一条成功提示。这种模式能够显著提升小事务处理的性能。(例如异常掉电、强制关闭数据库,内存中的记录将会丢失)

总结 大多数情况下,异步提交不仅能带来性能的提升,而且不会有数据丢失和数据损坏的风险。

注意 1.设置参数 fsync = OFF 是一个用于更改所有事物行为的服务器端设置。关闭它可以带来性能的提升。它会禁用GaussDB中尝试向数据库不同部分同步提交写入的逻辑,因此系统崩溃(硬件或操作系统崩溃,而不是GaussDB本身崩溃)会使数据库严重损坏。(避免了频繁的磁盘寻址,但数据块存放集中也有风险)

2.用户对于每一个事务都可以选择提交模式,因此,有可能有同步和异步提交事务同时运行(真正提交有时差的小风险,尽量避免)。所以用户可以设置synchronous_commit参数来选择提交模式,事务从提交开始的时候,就取决于synchronous_commit的值。但某些实用程序命令,例如DROP TABLE,是以同步方式提交而不管synchronous_commit的设置。这是为了确保服务器的文件系统和数据库逻辑的一致性。

3.采用immediate模式关闭数据库等同于一台服务器崩溃,因此会造成未刷新的异步提交的数据的丢失(丢失最新的几个事务,小概率事件)。

3. 备份之外可靠性保障机制

风险一:因为电力失效、操作系统崩溃、硬件失效等原因导致数据丢失

解决办法:提交事务前先记录WAL日志并持久化到磁盘上。(如果存放wal日志的磁盘损坏,数据库将不能正常写入,最近的内存中的事务数据将面临丢失,当然这种情况磁盘也会提示报错)

风险二:在计算机的主存和磁盘的盘片之间存在多层缓冲,向回写式磁盘缓冲区写数据时,掉电的情况下容易丢失数据

办法一:使用有电池供电的回写缓冲磁盘控制器。 办法二:如果磁盘驱动器不能保证在关闭或掉电之前写入数据,则应该关闭回写缓冲。

风险三:磁盘盘片写操作自身

1.操作系统的缓冲区内存,gaussdb设置wal_sync_method参数直接写入磁盘。 2.磁盘驱动器的控制器上可能还有一个缓冲,内存数据有丢失风险。 3.磁盘的盘片会被分割为段,通常每段512字节。每次物理读写都对整个段进行操作。当进行写入操作时可能因为电力失效导致某些段写入失败。(页包含段,要么可恢复页,要么避免半页写入,要么供电保障)

办法一:GaussDB在修改磁盘上的实际页面之前周期性地把整个页面的影像写入永久存储,设置full_page_writes参数。这样,在崩溃恢复的时候,GaussDB就可以恢复页面。 办法二:一个电池供电的磁盘控制器或者是文件系统(比如ReiserFS 4)自身能够避免半个页面写入,可以通过full_page_writes参数来关闭页面影像功能。

4. gs_rman 与 gs_dump 备份恢复方案比较

GaussDB提供了gs_dump和gs_rman两种数据备份和恢复方案,它们各有优点,适用于不同的场景。

分类简介适用场景gs_dumpgs_dump是GaussDB用于备份数据库相关信息的逻辑备份工具。 它可以对正在运行的数据库进行完整的一致备份,支持将数据库中的数据定义和数据导出(转储)成物理文件,并使用导入工具进行恢复。业务影响:无,在线备份 恢复效率:高(秒级) 数据可恢复程度:只能恢复到备份时刻 成本:低,占用磁盘空间较少gs_rmangs_rman是GaussDB提供的用于备份和灾难恢复的实用程序。 通过gs_rman可对整个数据库中的数据、WAL归档日志和运行日志进行备份。 业务影响:无,在线备份 恢复效率:中(分钟级) 数据可恢复程度:可恢复到任意时间点的状态 成本:中,占用磁盘空间大

根据具体情况选择适合自己的备份恢复方案。

最新回复(0)