我一直在阅读一篇又一篇关于数据库备份和快照之间区别的文章,但它们没有任何意义,所以请帮助我理解
“快照是您的系统/卷在特定时间点的映像。”
“备份是执行备份时整个系统/卷的副本。”
- 一切都是在某个时间点完成的。这就是物理学的原理。除非你生活在一个不存在时间的黑洞里。这句话对我来说毫无意义。备份是在制作时制作的。是的。呃。这究竟意味着什么。
- 我不知道数据库的“图像”应该是什么。这个类比对我来说毫无意义。它们只是意味着“副本”吗?备份也是数据库的副本。再说一遍,它们对我来说都是一样的。
“快照仅保留自上次快照以来数据库的更改”
- 但我还没有拍过快照。这将是第一个。那么快照会是什么样的呢?由于没有上次快照,因此自上次快照以来没有任何更改。会...与备份完全相同吗?
“快照制作速度快且尺寸小”
- 再说一次,这是我的第一张快照。它如何神奇地比备份更快、更小?或者这只是一个谎言?
编辑:来源:(来自备份与快照的所有顶级谷歌结果)
https://phoenixnap.com/kb/snapshot-vs-backup
快照是系统/卷在特定时间点的映像。
备份是执行备份时整个系统/卷的副本。
https://www.sqlshack.com/understanding-database-snapshots-vs-database-backups-in-sql-server/
数据库快照就像数据库在某个时间点的视图。
快照备份的另一个用途是可以为数据库创建多个快照,并且这些快照可以在不同的时间点拍摄
可以随时创建备份。快照是数据库的“时间点”副本。
快照很小,可以快速轻松地制作,而不会对服务器产生太大影响。
您必须对所使用的术语非常具体。
SQL Server 数据库备份
参考: 备份概述 (SQL Server) (Microsoft Learn | SQL)
SQL Server 数据库快照
参考: 数据库快照 (SQL Server) (Microsoft Learn | SQL)
Windows 快照
借助卷影复制服务 (VSS) 和 SQL Writer执行的 Windows 快照实际上是磁盘驱动器 (HDD/SSD/...) 在给定时间点的快照。
参考: SQL Server 备份应用程序 - 卷影复制服务 (VSS) 和 SQL Writer (Microsoft Learn | SQL)
文档中提供了一张漂亮的图片,它指出了 Windows 快照执行数据库快照期间发生的情况:
回答您的问题
SQL Server 数据库快照将创建现有数据库的只读副本,如上面摘录中所述。
Windows Server 快照允许您将整个系统(操作系统和 SQL Server 数据库)恢复到创建快照时的确切时间点。
您问题中有关快照的链接与两种不同的技术相关:数据库快照(请参阅 2.)和Windows Server 快照(请参阅 3.)。
这就是您可能感到困惑的原因。
定期数据库备份可以设置为使用特定策略定期安排,以便您可以将数据库恢复到过去多个时间点中的任何一个。这是一种一次性设置,允许备份继续进行,就像存在恒定的还原点一样。
您引用的措辞在某种程度上与此相反,并指出这些类型的备份只是该单一时间点的一次性备份。
是的。这是基础设施领域中有关备份的常见术语。
是的,它们都是两种不同的复制方式。同样,拥有您引用的措辞的来源可能有助于我们进一步解释它们的差异。
^ 我想你把这个丢掉了。
请参阅我对 #2 的最后一句话。
这很重要的原因是因为常规数据库备份不会发生在“系统/卷”级别。因此,听起来您正在阅读与数据库级别典型备份不同类型的备份。
只是想指出一些快照用途。快照和备份都可以让您在需要时恢复数据库,但它们的存储和使用方式有很大不同。
备份,我的意思是完整备份,将存储您选择的所有内容,然后您可以将其保存在其他地方。无论源数据库是否存在,它都会恢复数据库。您甚至可以使用 .bak 文件创建新数据库。
SQL Server 快照是一种稀疏文件,通常比备份小得多,因为它不需要立即存储所有内容。事实上,它只是一个记录数据库增量的文件。
当你用快照恢复数据库时,一切都会根据记录被逆转;也就是说,如果由于某种原因无法找到源数据库,仅依靠一个快照并不能帮助恢复数据。
另一件事是,备份的大小通常是固定的,但快照的大小会增加,因为存储的记录越来越多,因此请为此制定良好的快照管理计划。
数据库升级、测试等场景建议使用快照,真正容灾时建议使用备份。
https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-ver16
由于这可能涉及文件系统、数据库、版本控制系统和其他事物,因此我将仅使用术语“数据”来表示您要备份或快照的内容,并使用“系统”来表示数据库或文件系统驱动程序。
“备份”是最容易定义的:它是一个数据集,包含将数据恢复到备份完成时的状态所需的一切。希望备份是一致的,也就是说,它将数据准确地恢复到备份的时间点。如果在备份过程中对数据进行了某些更改,则不应将它们包含在备份中,因为这会破坏一致性。
例如,将目录压缩到存档中并不能保证一致:如果某些文件在此过程中发生更改,则 zip 中将包含哪个版本取决于任何人的猜测。出于同样的原因,使用 rsync(以及其他)等工具完成的文件系统备份总比没有好,但不能保证它们恢复到一致的状态。事实上,如果您通过复制文件来备份实时数据库,那么几乎肯定会导致垃圾。
“快照”就是解决上述问题的方法。快照不是您可以直接看到的数据,它是数据库或文件系统提供的功能。当您要求它拍摄快照时,它会为您提供数据的虚拟视图,及时冻结,就像拍摄快照时一样。备份是一组独立于其来源的应用程序而存在的文件,而快照则不同,它仅作为系统内部状态存在。它基本上是一个时间旅行门户,允许您查看拍摄快照时的数据。因此快照本身无法复制到另一台机器,因为它不是文件。但我们通常也将您可以通过此时间门户读取并实际复制的数据称为“快照”,因此您可以说您“复制了快照”,意思是您复制了数据。
通常,您可以像访问数据一样访问快照,对于文件系统,快照将呈现为只读文件系统,对于数据库,它看起来就像带有 SQL 查询的实时数据库的只读版本, ETC。
实现方式取决于系统,但总体思路是,当发生写入时,将被覆盖但仍然可以通过过去拍摄的任何快照看到的数据不能被简单地覆盖。相反,系统必须保留已修改行的单独版本,并跟踪哪个快照可以看到哪个版本。
所有多用户事务数据库都必须创建快照才能工作。通常它被称为“事务隔离级别”,它确定何时进行这些操作。例如,可以在每个查询开始时制作快照。然后执行查询,而不会看到在其运行时对表进行的修改。否则,查询将无法获得一致的数据库视图,外键关系将被破坏,等等。
现在,一旦你有了快照,你就可以用它做几件事:
查询一下
将其滚回
您可以拍摄快照,然后进行一些修改。如果您不喜欢结果,请回滚到快照。
如果您在文件系统或数据库快照上运行常规备份程序,则可以保证它看到的数据在复制过程中不会被修改。因此,您的备份将是一致的。
例如,如果您创建 ZFS 快照,然后将其压缩或 rsync 到另一台计算机,则该备份将完全按原样恢复您的数据。如果数据来自写入文件而没有崩溃恢复或事务日志的程序(即MyISAM),它仍然无法使用,但这不是快照的错误。
大多数允许使用快照进行备份的系统将提供比复制文件或转储 SQL 更快的备份方法。这通常会产生一个包含所有数据的巨大文件。
因为快照意味着版本跟踪,如果您在周日拍摄快照并对其进行完整备份,然后在周一拍摄另一个快照...那么,通常,系统将提供进行增量备份的可能性:这是一个文件仅包含两个快照之间的更改。如果您有大量数据但只有一小部分发生变化,这将使您的备份速度更快。
恢复时,您将恢复周日起的完整备份。然后您可以停在那里,或者恢复增量备份(按顺序)以使数据恢复到您想要的时间点。
快照不要求是只读的。没有什么可以阻止开发人员使其成为可读写的。在这种情况下,它不会像拍摄快照时那样更改数据,而只是将其分叉为可写副本,而不必实际将其全部存储两次。我认为任何 SQL 数据库都不允许在其数据库中存在这种时间旅行悖论,但这就是所有源代码版本控制系统的工作方式,例如 git。
无论如何,我希望事情能够澄清。备份是一堆文件。快照是一个时间入口。
它有点模糊,因为该术语既可以应用于快照也可以应用于备份。例如,像 .iso 这样的“磁盘映像”是包含磁盘全部内容的文件。所以这是磁盘的备份。有些人也将快照称为图像。但“映像”术语还传达了这样的概念:您将能够像真实的东西一样直接访问它,例如您可以安装 ISO,但无法在数据库 SQL 转储上运行 SQL 查询,这只是一堆文本文件。