iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >为什么数据库会丢失数据
  • 680
分享到

为什么数据库会丢失数据

2024-04-02 19:04:59 680人浏览 薄情痞子
摘要

今天就跟大家聊聊有关为什么数据库会丢失数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库管理系统在今天已经是软件的重要组成部分,开源的 Mys

今天就跟大家聊聊有关为什么数据库会丢失数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

数据库管理系统在今天已经是软件的重要组成部分,开源Mysqlpostgresql 以及商业化的 oracle 等数据库已经随处可见,几乎所有的服务都需要依赖数据库管理系统存储数据。

图 1 - 数据库

数据库不会丢失数据听起来像是理所当然的事情,持久化能力也应该是数据库的最基本保障,但是在这个复杂的世界上想要保证数据不丢失是很困难的。在今天,我们能找到很多数据库出现问题导致数据丢失的例子:

  •  mongoDB 在过去很长的一段时间都不能保证持久性,很容易就会丢失数据[^1];

  •  RocksDB DeleteRange 功能导致的数据丢失问题[^2];

  •  腾讯云硬盘故障,导致创业公司线上生产数据完全丢失[^3];

无论是开源数据库还是云服务商提供的服务,都有可能发生数据丢失的。本文将数据库丢失数据的原因归结到以下的几个方面,我们将详细展开介绍这些原因:

  •  人为因素导致的运维和配置错误是数据库丢失数据的首要原因;

  •  数据库存储数据使用的磁盘损坏导致数据丢失;

  •  数据库的功能和实现复杂,数据没有及时刷入磁盘就有丢失的风险;

人为错误

人为错误是造成数据丢失的首要原因。在腾讯云数据丢失事故中,我们会发现,虽然事故的起因是硬件故障,但是最终导致数据完整性受损的还是运维人员的不当操作:

第一是正常数据搬迁流程默认开启数据校验,开启之后可以有效发现并规避源端数据异常,保障搬迁数据正确性,但是运维人员为了加速完成搬迁任务,违规关闭了数据校验;

第二是正常数据搬迁完成之后,源仓库数据应保留24小时,用于搬迁异常情况下的数据恢复,但是运维人员为了尽快降低仓库使用率,违规对源仓库进行了数据回收。

减少人为错误的最好方式是将数据的备份和运维等操作标准化,使用自动化的流程处理涉及数据安全的操作,这样才能降低人为干预带来的风险。

对于软件工程师来说,我们应该敬畏生产环境,谨慎地在生产环境执行一切操作,认识到所有的操作都可能对线上正在运行的服务产生影响,这样才能降低类似问题发生的概率。

硬件错误

我们在 为什么基础服务不应该高可用 一文中曾经介绍过任何一个线上的服务能够正常运行都是极其偶然的,只要时间拉的足够长,我们就没有办法保证服务 100% 的可用性[^4]。磁盘等硬件如果使用的时间足够长,很有可能会发生损坏,根据 Google 论文中的数据,5 年内硬盘的年平均故障率(Annualized Failure Rates,AFR)为 8.6%[^5]。

2018 年,腾讯云数据损坏事故的起因就是磁盘静默错误(Silent data corruption)[^6]导致的单副本数据错误。磁盘静默错误是没有被磁盘固件或者宿主操作系统发现的错误,包括以下情况:电缆松了、电源供给不可靠、外部震动、网络引起的数据丢失等问题。

正是因为磁盘的数据损坏非常常见,所以我们需要数据冗余的方式保证磁盘在发生不可修复读错误(Unrecoverable Read Error)时能够恢复磁盘数据。独立冗余磁盘阵列(Redundant Array of Independent Disks,RAID)是一种能够将多个物理磁盘组合成一个逻辑磁盘的数据存储虚拟化技术,它能够增加数据冗余并提高性能[^7]。

为什么数据库会丢失数据

raid-strategy

图 2 - RAID 三大策略

RAID 主要使用分割(Striping)、镜像(Mirroring)和奇偶校验(Parity)三大策略管理磁盘中的数据,我们这里举几个简单的例子:

  •  RAID 0 使用了数据分割技术,但是没有镜像和奇偶校验。它对磁盘上的数据几乎不进行任何的保护,任意一块磁盘磁盘损坏都意味着其中的数据无法恢复,但是因为不存在冗余,所以它也会提供较好的性能;

  •  RAID 1 使用了数据镜像的功能,但是没有奇偶校验和数据分割。所有的数据都会写入两个相同的磁盘,两个磁盘都能对外提供数据读取的服务。这种方式降低了磁盘的使用率,但是能够提高读取性能并提供备份;   

  •  ...

RAID 使用的分割和镜像策略与分布式数据库中的分片(Partition)和副本(Replication)比较相似,分割和分片将数据切分后分配到不同的磁盘或者机器,而镜像和副本的作用都是复制数据。

很多现代的操作系统都会提供基于软件的 RAID 实现,一些云服务厂商也会使用自研的文件系统或者冗余备份机制:

  •  Google 使用 Google 文件系统管理文件,它以块的方式存储文件并且通过主服务管理所有的文件块[^8];

  •  Microsoft 在 Azure 中使用擦除编码的方式计算冗余数据[^9];

硬件错误在生产环境中很常见,我们只有通过数据冗余和校验才能降低数据丢失的可能性,但是增加冗余的方式也只能不断降低数据丢失的概率,不能 100% 的避免。

实现复杂

数据库管理系统最终会将数据存储在磁盘上,对于很多数据库来说,数据落到磁盘上就意味着持久化完成了。磁盘作为数据库系统的下层,磁盘能够稳定存储数据是数据库能够持久化数据的基础。

为什么数据库会丢失数据

database-and-disk

图 3 - 数据库依赖磁盘

很多人都误认为使用 write 就能将数据写入到磁盘上,然而这是错误的。函数 write 不仅不能保证数据写入磁盘,有的实现甚至都不能保证目标空间保留给了写入的数据[^10]。一般情况下,对文件的 write 只会更新内存中的页缓存,这些页缓存不会立刻刷入磁盘,操作系统的 flusher 内核线程会在满足以下条件时将数据落盘[^11]:

  •  空闲内存下降到了特定的阈值,需要释放脏页占用的内存空间;

  •  脏数据持续了一定时间,最老的数据就会被写入磁盘;

  •  用户进程执行 sync 或者 fsync 系统调用;

如果我们想要将数据立刻刷入磁盘,就需要在执行 write 后立刻调用 fsync 等函数[^12],当 fsync 等函数返回后,数据库才会通知调用方数据已经成功写入。

为什么数据库会丢失数据

write-and-fsyn

图 4 - 写入和落盘

write 和 fsync 在数据库管理系统中非常重要,它们是提供持久性保证的核心方法,一些开发者对 write 的理解错误写出错误的代码就会导致数据丢失。

除了持久化的特性之外,数据库可能还需要提供 ACID(Atomicity, Consistency, Isolation, Durability)或者 BASE(Basically Available, Soft state, Eventual consistency)的保证,有些数据库还会提供分片、副本以及分布式事务等复杂功能,这些功能的引入也增加了数据库系统的复杂性,而随着程序复杂性的增加,出现问题的可能性也随之增长。

数据库管理系统是软件工程中最复杂、最重要的系统之一,几乎所有服务的正常运行都建立在数据库不会丢失数据的假设上。然而因为如下所示的原因,数据库不能完全保证数据的安全:

  •  运维人员在配置和运维时极有可能因为操作失误导致数据丢失;

  •  数据库依赖的底层磁盘发生硬件错误,导致数据无法恢复;

  •  数据库系统支持的功能非常多而且复杂,数据没有及时落盘就可能造成数据丢失;

一旦发生数据丢失的事故,造成的影响就会非常大,我们在使用数据库存储核心业务数据时也不能完全信任数据库的稳定性,可以考虑使用热备以及快照等方式容灾。

看完上述内容,你们对为什么数据库会丢失数据有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 为什么数据库会丢失数据

本文链接: http://www.lsjlt.com/news/69226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么数据库会丢失数据
    今天就跟大家聊聊有关为什么数据库会丢失数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库管理系统在今天已经是软件的重要组成部分,开源的 MyS...
    99+
    2024-04-02
  • MySQL为什么不会丢失数据
    本篇内容介绍了“MySQL为什么不会丢失数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!进入正题前先简单...
    99+
    2024-04-02
  • 为什么断电后Redis数据不会丢失
    目录前言Redis 持久化机制RDB 持久化机制RDB 机制触发条件自动触发RDB 机制相关配置文件RDB 机制优点RDB 机制缺点AOF 持久化机制AOF 机制如何开启AOF 机制...
    99+
    2024-04-02
  • 什么情况mysql会丢失数据
    这期内容当中小编将会给大家带来有关什么情况mysql会丢失数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么情况mysql会丢失数据1.存储引擎层面丢失数据 ,如果服...
    99+
    2024-04-02
  • vps美国服务器数据为什么会丢失
    vps美国服务器数据丢失的原因有:1、服务器被恶意网络攻击,如被恶意植入木马和病毒,造成数据丢失;2、服务器的物理硬件老化或损坏,导致数据存储失败,从而造成数据丢失;3、人为的操作失误,导致误删vps美国服务器的数据信息。具体内容如下:网站...
    99+
    2024-04-02
  • docker容器退出后数据为什么会丢失
    Docker容器的数据丢失主要有以下几个原因: 容器是临时性的:Docker容器被设计成短暂的,一旦容器停止或退出,容器内的数据...
    99+
    2024-04-03
    docker
  • vps国外云服务器为什么会丢失数据
    vps国外云服务器丢失数据的原因有:1、vps国外云服务器被恶意网络攻击,造成数据丢失;2、vps国外云服务器的物理硬件老化或损坏,导致数据存储失败,从而造成数据丢失;3、人为操作失误导致误删vps国外云服务器的数据信息。具体内容如下:网站...
    99+
    2024-04-02
  • php数据库为什么会连接失败
    有以下几个可能的原因导致PHP数据库连接失败:1. 数据库服务器无法连接:检查数据库服务器是否正常运行,并且网络连接是否正确。可以尝...
    99+
    2023-10-10
    php 数据库
  • Oracle数据库数据丢失怎么恢复
    这篇文章主要介绍“Oracle数据库数据丢失怎么恢复”,在日常操作中,相信很多人在Oracle数据库数据丢失怎么恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2024-04-02
  • sql数据库丢失数据怎么恢复
    如果您的SQL数据库丢失数据,可以尝试以下几种方法来恢复数据: 使用备份:如果您定期备份数据库,可以尝试恢复最近的备份数据。将备...
    99+
    2024-04-18
    sql
  • win7升级win10数据会不会丢失
    这篇文章主要讲解了“win7升级win10数据会不会丢失”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win7升级win10数据会不会丢失”吧!win7升级win10数据保持完整及安装教程解...
    99+
    2023-07-01
  • 云主机数据会丢失吗
    云主机数据有可能丢失,但云服务提供商通常会采取多种措施来保护数据安全和可靠性。这些措施包括备份数据、冗余存储、故障转移、数据复制等。...
    99+
    2023-08-18
    云主机
  • oracle 数据库服务器关机会丢数据么
    正常情况下,oracle 数据库服务器关机不会导致数据丢失。oracle 数据库使用 acid 原则,通过一系列步骤保护数据:1. 强制提交事务; 2. 刷新 redo 日志; 3. 备...
    99+
    2024-05-11
    oracle 数据丢失
  • 使用国外免费云服务器为什么会丢失数据
    使用国外免费云服务器丢失数据的方法:1、国外云服务器被恶意网络攻击,造成数据丢失;2、国外云服务器的物理硬件老化或损坏,导致数据存储失败,从而造成数据丢失;3、人为操作失误,导致误删国外云服务器的数据信息。具体内容如下:1、网站被攻击这里的...
    99+
    2024-04-02
  • win10系统还原会不会丢失数据
    今天小编给大家分享一下win10系统还原会不会丢失数据的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。小编回答: 系统还原一般...
    99+
    2023-07-01
  • 云服务器数据会丢失吗
    云服务器提供商通常会采取一些安全措施来保护其数据,以防止数据丢失或被黑客攻击。以下是可能导致云服务器数据丢失的原因: 访问控制:许多云服务提供商都有访问控制策略,以控制谁可以访问数据,并且只允许特定用户访问数据。这可能导致数据在云服务器...
    99+
    2023-10-26
    服务器 数据
  • 阿里云重启redis不会丢失数据库怎么办
    问题:如何保证阿里云重启redis时不会丢失数据库? 阿里云是一款非常优秀的云计算服务提供商,而redis是阿里云提供的一种基于内存的分布式数据结构存储系统。然而,由于阿里云的重启机制可能会导致redis的临时断开连接,从而导致数据的丢失。...
    99+
    2023-12-26
    阿里 重启 数据库
  • MySQL数据库丢失数据的场景分析
    本篇内容主要讲解“MySQL数据库丢失数据的场景分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库丢失数据的场景分析”吧! MySQL数据库丢...
    99+
    2024-04-02
  • 云服务器重启会不会丢失数据
    云服务器通常不会丢失数据。如果云服务器发生故障或关闭,您可以通过重新启动云服务器来避免数据丢失。 以下是一些可能导致云服务器重启并丢失数据的故障或异常情况: 硬件故障:云服务器通常使用高可用性硬件,可能会发生硬件故障。如果硬件故障,您的...
    99+
    2023-10-26
    会不会 重启 服务器
  • win7升级win10系统数据会不会丢失
    这篇文章主要介绍“win7升级win10系统数据会不会丢失”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win7升级win10系统数据会不会丢失”文章能帮助大家解决...
    99+
    2023-03-01
    win7 win10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作