技术分享|优炫数据库基于WAL日志备份及恢复

发布于:2023-01-08 ⋅ 阅读:(788) ⋅ 点赞:(0)

背景

在数据库系统中,保证数据库可以由错误状态恢复到正确状态的机制,称为备份与恢复。数据库的备份是一个长期的过程,恢复可看作是备份的一个逆过程,恢复的效果、好坏,很大程度上是依赖于备份的策略。此外,数据库管理员在数据恢复时采用的步骤正确与否,将直接影响最终的恢复结果。

WAL日志

WAL即 Write Ahead Log(预写日志),是数据库系统中常见的一种手段,用于保证数据操作的完整性的一种标准方法。其中心概念是数据文件(存储着表和索引)的修改必须在这些动作被日志记录之后才被写入。利用WAL日志进行恢复的方法能最大程度上恢复数据库系统未落盘数据,能明显提高数据库可用性和容错容灾能力。

WAL日志机制

在任何时间,优炫数据库在数据集簇目录的ux_wal/子目录下都保持有一个预写式日志(WAL)。该日志存在的目的是为了保证系统崩溃后的安全。如果系统崩溃,可以“重放(replay)”从最后一次检查点以来的日志项来恢复数据库,保证数据一致性。

WAL日志文件默认16MB的情况下,并分为若干页,每页8KB。

熟悉优炫数据库的伙伴们都知道,WAL日志写入是在缓存中进行的,WAL日志在数据库恢复、高可用、流复制、逻辑复制等模块中扮演着极其重要的角色。当库中的数据发生变更时:

change发生时:先要将变更后内容计入WAL buffer中,在将变更后的数据写入data buffer;

commit发生时:WAL buffer中数据刷新到磁盘;

checkpoint发生时:将所有data buffer刷新到磁盘。

为了实现WAL日志的机制,需要保证脏页(Data Buffer中修改过的数据)在刷新到磁盘前,脏页对应的WAL日志记录已经刷新到磁盘中。在事务提交之前,生成该事务提交的日志记录(唯一标示为LSN–Log sequence number)。

LSN可理解为WAL日志记录的在日志中的偏移量。表示XLOG record记录写入到事务日志中位置。LSN的值为无符号64位整型(uint64)。在事务日志中,LSN单调递增且唯一。

基于WAL日志,恢复某时间点或最新时间点,通过命名方式来查找是非常方便。

基于WAL日志优势总结

数据备份恢复。读取WAL日志的内容,可恢复数据库丢失的内容。

减少了写磁盘的次数。在日志提交时,只需把日志文件刷新到磁盘,无需事务修改的所有数据文件,可降低频繁IO对性能的影响。

同步开销小。在多用户环境里,事务的提交可用日志文件一次提交完成,同步日志比同步数据库的开销小。

异步地写入。避免其他服务进程在事务提交时,需要同步写入日志到磁盘,只需在已知时间异步写入即可。


网站公告

今日签到

点亮在社区的每一天
去签到