以前去企业面试的时候,经常被问一些关于 MySQL 数据库相关的问题,其中最典型的就是关于 MySQL 数据库数据安全的问题。
例如:如何才能保证 MySQL 数据库的数据安全?MySQL 数据库如果发生数据丢失可能会发生在什么地方?如果 MySQL 数据库出现了数据丢失该如何挽救?
问这些问题的主要目的就是考验求职者的生产经验;但是就我面试的过程而言,能够完整答出来的求职者微乎其微。
出现这种情况主要是因为大多数求职者对于 MySQL 数据库底层数据存储的运行机制了解得不够清楚,那么今天我们就来针对于上述的几个问题跟大家详细讨论一下 MySQL 数据库的底层存储运行机制。
MySQL 数据库在什么情况下可能会发生数据丢失
在介绍 MySQL 数据库在什么情况下可能会丢失数据之前,我们首先回顾一下写入一条数据到 MySQL 数据库中所经历的模块,具体如下。
- 第一个模块:将修改的数据逻辑保存在
change buffer
之中。 - 第二个模块:将修改的数据保存在
binlog cache
之中。 - 第三个模块:将修改的数据保存在
redo log
之中。
在这三个模块中,change buffer
是用来保存修改数据的逻辑的,在修改之后,通过 merge 的方式写入磁盘。具体我们可以参考 [第 7 篇]文章 和